Use Cases
- Memory-mapped control/status integration with software-visible register maps.
Block Diagram
VHDL Include And Instantiation Template
File Header
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library radhdl;
-- Direct entity instantiation below does not require importing the entity name.
use radhdl.interfaces.all;
-- Narrower alternative: use radhdl.interfaces_uart.all;Component Declaration
component radif_uart_to_reg is
generic (
DATA_WIDTH : integer := 32;
ADDR_WIDTH : integer := 16;
BAUD_DIVISOR : positive := 868;
VENDOR_TAG : string := "GENERIC";
PRODUCT_SERIES_TAG : string := "GENERIC"
);
port (
clk : in std_logic;
rstn : in std_logic;
uart_rx_i : in std_logic;
uart_tx_o : out std_logic;
reg_wr_addr : out std_logic_vector(ADDR_WIDTH - 1 downto 0);
reg_rd_addr : out std_logic_vector(ADDR_WIDTH - 1 downto 0);
reg_wr_en : out std_logic;
reg_rd_en : out std_logic;
reg_data_in : out std_logic_vector(DATA_WIDTH - 1 downto 0);
reg_data_out : in std_logic_vector(DATA_WIDTH - 1 downto 0);
reg_wr_rdy : in std_logic;
reg_rd_rdy : in std_logic;
reg_wr_valid : in std_logic;
reg_rd_valid : in std_logic;
reg_error : in std_logic
);
end component;Direct Entity Instantiation
u_radif_uart_to_reg : entity radhdl.radif_uart_to_reg
generic map (
DATA_WIDTH => 32,
ADDR_WIDTH => 16,
BAUD_DIVISOR => 868,
VENDOR_TAG => "GENERIC",
PRODUCT_SERIES_TAG => "GENERIC"
)
port map (
clk => <clk_signal>,
rstn => <rstn_signal>,
uart_rx_i => <uart_rx_i_signal>,
uart_tx_o => <uart_tx_o_signal>,
reg_wr_addr => <reg_wr_addr_signal>,
reg_rd_addr => <reg_rd_addr_signal>,
reg_wr_en => <reg_wr_en_signal>,
reg_rd_en => <reg_rd_en_signal>,
reg_data_in => <reg_data_in_signal>,
reg_data_out => <reg_data_out_signal>,
reg_wr_rdy => <reg_wr_rdy_signal>,
reg_rd_rdy => <reg_rd_rdy_signal>,
reg_wr_valid => <reg_wr_valid_signal>,
reg_rd_valid => <reg_rd_valid_signal>,
reg_error => <reg_error_signal>
);Generics
| Name | Type | Default | Description |
|---|---|---|---|
| DATA_WIDTH | integer | 32 | Width of the RADIF register data path. This bridge currently transports 32-bit words. |
| ADDR_WIDTH | integer | 16 | Width of the RADIF byte address path. |
| BAUD_DIVISOR | positive | 868 | Number of clk cycles per UART bit. |
| VENDOR_TAG | string | "GENERIC" | Vendor selector retained for generated package consistency. |
| PRODUCT_SERIES_TAG | string | "GENERIC" | Device-family selector retained for generated package consistency. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
| clk | in | std_logic | Register/UART clock. |
| rstn | in | std_logic | Active-low reset. |
| uart_rx_i | in | std_logic | UART receive pin. |
| uart_tx_o | out | std_logic | UART transmit pin. |
| reg_wr_addr | out | std_logic_vector(ADDR_WIDTH - 1 downto 0) | Register write address. |
| reg_rd_addr | out | std_logic_vector(ADDR_WIDTH - 1 downto 0) | Register read address. |
| reg_wr_en | out | std_logic | One-cycle register write request. |
| reg_rd_en | out | std_logic | One-cycle register read request. |
| reg_data_in | out | std_logic_vector(DATA_WIDTH - 1 downto 0) | Register write data. |
| reg_data_out | in | std_logic_vector(DATA_WIDTH - 1 downto 0) | Register read data. |
| reg_wr_rdy | in | std_logic | Register target write ready. |
| reg_rd_rdy | in | std_logic | Register target read ready. |
| reg_wr_valid | in | std_logic | Register target write response valid. |
| reg_rd_valid | in | std_logic | Register target read response valid. |
| reg_error | in | std_logic | Register target error for current response. |
Register Interfaces
Static register maps are rendered below for this module.
| Interface | Directions | Signals | Representative ports |
|---|---|---|---|
| Register control/status | in, out | 11 | reg_wr_addr, reg_rd_addr, reg_wr_en, reg_rd_en, reg_data_in, reg_data_out, reg_wr_rdy, reg_rd_rdy, +3 more |
Register Maps
radif_uart_to_reg
The UART bridge has no local configuration registers; it forwards binary UART commands to downstream RADIF register targets.
| Register | Offset | Access | Reset | Description |
|---|---|---|---|---|
| write_frame | 0x00 | protocol | none | UART write command frame. |
| read_frame | 0x04 | protocol | none | UART read command frame. |
write_frame
UART write command frame.
WriteFrame[15:0]
1514131211109876543210
ADDR [15:8]
CMD [7:0]
WriteFrame[31:16]
31302928272625242322212019181716
DATA [31:24]
ADDR [23:16]
| Name | Register bit(s) | Description |
|---|---|---|
| DATA | WriteFrame[31:24] | Four-byte big-endian 32-bit write data. |
| ADDR | WriteFrame[23:8] | Two-byte big-endian byte address. |
| CMD | WriteFrame[7:0] | First byte is 0x57 for write. |
read_frame
UART read command frame.
ReadFrame[15:0]
1514131211109876543210
ADDR [15:8]
CMD [7:0]
ReadFrame[31:16]
31302928272625242322212019181716
RSVD [31:24]
ADDR [23:16]
| Name | Register bit(s) | Description |
|---|---|---|
| ADDR | ReadFrame[23:8] | Two-byte big-endian byte address. |
| CMD | ReadFrame[7:0] | First byte is 0x52 for read. |
Testbenches
No directly associated testbench was found.
Sources
- interfaces/hdl/radif/src/radif_uart_to_reg.vhd
