compactRIO HotLink Transmitter
This module is part of the crio_interface module.
The crio_hotlink_tx module is responsible for transmitting data using the hotlink protocol to a compactRIO carrier. It packages data from multiple cRIO channels into smaller chunks and sends them in a sequential manner inserting the appropriate synchronization bit. The module supports test modes for verifying functionality and accommodates different numbers of channels, which are set by the CRIO_CHANNELS generic.
Generics
Name |
Description |
Type |
Default |
|---|---|---|---|
CRIO_CHANNELS |
Sets the number of supported channels |
integer |
1 |
Ports
Name |
Description |
Type |
|---|---|---|
clk_i |
Input clock signal |
std_logic |
rstn_i |
Active-low synchronous reset |
std_logic |
en_i |
Enable signal for data transmission |
std_logic |
channels_i |
Input that specifies the number of active channel (up to CRIO_CHANNELS) |
std_logic_vector(clog2(CRIO_CHANNELS) - 1 downto 0) |
test_mode_i |
Test mode signal to enable the generation of test patterns |
std_logic |
data_i |
Input data array for each channel (dependent on CRIO_CHANNELS) |
array_hotlink_data_t(CRIO_CHANNELS - 1 downto 0) |
sent_o |
Output flags indicating data transmission completion for each channel |
std_logic_vector(CRIO_CHANNELS - 1 downto 0) |
data_o |
Output data bus (8 bits), where the MSB is used as a marker for synchronization |
std_logic_vector(7 downto 0) |
Implementation details
The crio_hotlink_tx architecture handles data transmission through the following processes:
Data Packaging and Transmission: - The data is processed in chunks of 7 bits, with the 8th bit reserved as a synchronization marker. - The data_o output bus sends these chunks sequentially, with the MSB (data_o(7)) set to 1 when the first chunk of the first channel is transmitted. - The data from each channel is output, chunk by chunk, based on the value of the chunks_cnt_v counter, which increments until the entire data packet has been transmitted.
Channel Handling: - The module supports multiple CRIO channels as defined by the CRIO_CHANNELS generic. It transmits data for one channel at a time, controlled by the ch_cnt_v counter, which cycles through the channels. - Once data transmission for a channel is complete, the corresponding sent_o bit is set to 1, indicating that the data for that channel has been sent. The ch_cnt_v counter then moves to the next channel.
Test Mode: - If test_mode_i is asserted (‘1’), the module generates a test pattern rather than using input data. The test pattern is a triangular wave.
Reset Behavior: - When rstn_i = ‘0’, the module resets all internal counters and buffers. The sent_o flags and the data_o output bus are cleared.
Constants
Name |
Description |
Type |
|---|---|---|
HOTLINK_CHUNKS_c |
Number of chunks required to fully transmit one data packet (derived from HOTLINK_DATA_LENGTH / 7) |
natural |
Signal Descriptions
chunks_cnt_v: Tracks the number of chunks that have been transmitted for the current data packet.
ch_cnt_v: Tracks the current CRIO channel being processed for transmission.
sent_s: Indicates if data for a channel has been transmitted.
sent_old_s: Used to store the previous state of the sent_s signal to detect edges.
test_pattern_s: Holds the test pattern data to be transmitted when test_mode_i is active.