High Speed SelectIO Wizard ip使用记录

        本次实验的目的是通过VU9P开发板的6个TG接口,采用固定连接的方式,即X+和X-维度互联,其框图如下所示:

IP参数配置

          通过调用High Speed SelectIO Wizard来实现数据通路,High Speed SelectIO Wizard ip有24对数据通道,且其数据通路方向(BUS Direction)可以是 单向发送(TX ONLY),单向接受(RX ONLY),双向分时复用(BIDIR),独立收发(TX + RX),由于一个TG接口由48对LVDS lane 组成,其中24对用于发送数据,24对用于接收数据,所以本次实验将例化两个High Speed SelectIO Wizard分别用于发送和接受,因此一个IP的数据通路方向为单向发送,另一个为单向接收。

TX模块配置

        要求单条lane的速率跑到最高1600Mbps,即1.6G bps,因此其IP的TX模块基本配置如下:

而对于Pin Selection部分的参数配置,需注意以下几个点:

        对于ip的24对LVDS lane,需要选择一对lane作为时钟通道,而由于引脚G31,F31是一对差分时钟引脚,不能作为数据通道,也不能作为ip的时钟通道,所以对于某个该引脚对所在的TG不能使用这一对lane,那么其数据通道就只能使用22对。为方便其他TG使用同一逻辑,那么都只使用22对数据lane,一对时钟lane。

        虽然G31所在的lane并没有勾选,但是ip生成后,还是会生成一个特殊的信号,bg2_pin0_nc,需要将这个信号例化到顶层文件中,并且需要将引脚绑上,如此才能正确编译。

        RX模块配置之前,需要先了解一个itslip Training Pattern的原理,并了解其训练原理。在Xilinx High Speed SelectIO Wizard IP中,当配置为​​RX ONLY​​模式时,​​Bitslip Training Pattern​​参数用于​​接收端的数据边界校准​​,其核心作用是通过预定义的比特序列实现串行数据到并行数据的精确对齐。以下是详细解析:


 ​​Bitslip Training Pattern的作用原理​​

  1. ​​解决相位不确定性​​
    在高速串行接口中,接收端(RX)需将串行数据流转换为并行数据,但初始采样相位可能未对齐数据边界(如8:1解串时,1位偏移会导致整个字节错位)。Bitslip机制通过移位操作逐步调整数据边界,直至检测到预置的​​Training Pattern​​(训练序列)表明对齐成功。

  2. ​​校准流程​​

    • ​​步骤1​​:发送端(TX)连续发送固定的训练序列(如0x0C)。

    • ​​步骤2​​:接收端对并行输出数据应用BITSLIP脉冲,每次移位1位(SDR模式)或按DDR模式交替移位。

    • ​​步骤3​​:当接收数据与预设的Bitslip Training Pattern匹配时,停止移位并锁定边界。

RX模块配置

Advanced界面配置其他默认,电平配置跟随开发板实际情况配置:

而在配置Pin seltion界面时,需注意一点,其时钟信号只能是选择每一个Group的PIN0位置的一对lane,所以对于时钟信号的选择,推荐先对RX的ip进行设置,然后根据原理图找到TX实际与之相连的IO所对应的lane作为时钟信号。如下图所示:

其他中间的信号有些可选为时钟信号,但是编译会报错。

设计方案

整体设计方案:

下面是LVDS_module部分的框图:

上图展示的是一条LVDS通路中的信号构成,其中22对data差分信号线用于传递数据,1对时钟差分信号线,加上两条非差分信号线用于传递握手信号。

start信号:通过vio控制,其用于TX复位标识,便于人为控制训练的开始。

对于握手信号的解释:

flag_to_rx    :发送模块生成,传递到接收模块,其定义为:当发送模块的初始化序列完成标志rst_seq_done为1后,flag_to_rx   为1,发送模块的rst_seq_done有效后变回0,其余时刻都为0。

flag_from_tx:接收来自发送模块传递过来的 “flag_to_rx  ”信号。且需要对其进行上升沿下降沿定位。

        当其上升沿出现,代表与之连接的TX模块的IP复位完成,并且该上升沿可以作为RX IP的复位信号标志。及其上升沿出现后,对RX IP复位有效。

        而下降沿出现,代表与之连接的RX模块的IP复位完成,那么该信号可作为发送数据包发送训练数据0x0C和正常数据的一个分割点,出现之前一直发0x0C,出现之后正常发数据。

TX模块信号解析

对于TX模块的IP的其他信号需要注意,其中需要注意的一些信号:

1. 控制与状态信号
​信号名​​方向​​位宽​​功能说明​
rstInput1-bit全局复位信号(高有效)
riu_clkInput1-bitRIU(Reconfigurable I/O)配置接口时钟(典型值100MHz)
pll0_lockedOutput1-bitPLL锁定状态指示(1=锁定,0=失锁)
rst_seq_doneOutput1-bit初始化序列完成标志(1=就绪)
vtc_rdy_bscXOutput1-bit*8各Bank的VTU(Voltage/Timing Unit)校准完成信号(X=0~7)
en_vtc_bscXInput1-bit*8VTU校准使能信号(需拉高以激活延时控制)
dly_rdy_bscXOutput1-bit*7Bank内延时单元校准完成信号(索引1~7)

TX的ip操作流程:上电后拉高en_vtc_bscX → 等待vtc_rdy_bscXdly_rdy_bscX变高 → 最终rst_seq_done有效 → 开始发送数据。所以一般将en_vtc_bscX直接置为1。

2. 时钟管理信号​ 
​信号名​​方向​​功能说明​
clkInput用户逻辑数据时钟(频率需匹配PLL设置)
shared_pll0_clkoutphy_outOutputPLL输出的高速串行时钟(连接至IO引脚或下一级IP)
pll0_clkout0OutputPLL分频后的并行参考时钟(用户逻辑同步时钟)
3. 数据通道信号(按Bank分组)​
​信号格式​​方向​​位宽​​功能说明​
bgX_pinY_ZOutput1-bitBank X(0~3)的引脚 Y(0~11)输出数据(直连FPGA物理引脚)
data_from_fabric_bgX_pinY_ZInput4-bit​用户逻辑输入数据​​(与bgX_pinY_Z关联,发送时IP将4位并转1位串行)

​数据流示例​​(Bank 0 Pin 0):
用户逻辑 → data_from_fabric_bg0_pin0_0[3:0] → HSSIO IP → 串行化为单比特流 → bg0_pin0_0输出

下面代码块为High Speed SelectIO Wizard设置为单向发送模块生成的.veo文件内容:

TG1_HSSIO_TX your_instance_name (.vtc_rdy_bsc0(vtc_rdy_bsc0),                                    // output wire vtc_rdy_bsc0.en_vtc_bsc0(en_vtc_bsc0),                                      // input wire en_vtc_bsc0.vtc_rdy_bsc1(vtc_rdy_bsc1),                                    // output wire vtc_rdy_bsc1.en_vtc_bsc1(en_vtc_bsc1),                                      // input wire en_vtc_bsc1.vtc_rdy_bsc2(vtc_rdy_bsc2),                                    // output wire vtc_rdy_bsc2.en_vtc_bsc2(en_vtc_bsc2),                                      // input wire en_vtc_bsc2.vtc_rdy_bsc3(vtc_rdy_bsc3),                                    // output wire vtc_rdy_bsc3.en_vtc_bsc3(en_vtc_bsc3),                                      // input wire en_vtc_bsc3.vtc_rdy_bsc4(vtc_rdy_bsc4),                                    // output wire vtc_rdy_bsc4.en_vtc_bsc4(en_vtc_bsc4),                                      // input wire en_vtc_bsc4.vtc_rdy_bsc5(vtc_rdy_bsc5),                                    // output wire vtc_rdy_bsc5.en_vtc_bsc5(en_vtc_bsc5),                                      // input wire en_vtc_bsc5.vtc_rdy_bsc6(vtc_rdy_bsc6),                                    // output wire vtc_rdy_bsc6.en_vtc_bsc6(en_vtc_bsc6),                                      // input wire en_vtc_bsc6.vtc_rdy_bsc7(vtc_rdy_bsc7),                                    // output wire vtc_rdy_bsc7.en_vtc_bsc7(en_vtc_bsc7),                                      // input wire en_vtc_bsc7.dly_rdy_bsc0(dly_rdy_bsc0),                                    // output wire dly_rdy_bsc0.dly_rdy_bsc1(dly_rdy_bsc1),                                    // output wire dly_rdy_bsc1.dly_rdy_bsc2(dly_rdy_bsc2),                                    // output wire dly_rdy_bsc2.dly_rdy_bsc3(dly_rdy_bsc3),                                    // output wire dly_rdy_bsc3.dly_rdy_bsc4(dly_rdy_bsc4),                                    // output wire dly_rdy_bsc4.dly_rdy_bsc5(dly_rdy_bsc5),                                    // output wire dly_rdy_bsc5.dly_rdy_bsc6(dly_rdy_bsc6),                                    // output wire dly_rdy_bsc6.dly_rdy_bsc7(dly_rdy_bsc7),                                    // output wire dly_rdy_bsc7.rst_seq_done(rst_seq_done),                                    // output wire rst_seq_done.shared_pll0_clkoutphy_out(shared_pll0_clkoutphy_out),          // output wire shared_pll0_clkoutphy_out.pll0_clkout0(pll0_clkout0),                                    // output wire pll0_clkout0.rst(rst),                                                      // input wire rst.clk(clk),                                                      // input wire clk.riu_clk(riu_clk),                                              // input wire riu_clk.pll0_locked(pll0_locked),                                      // output wire pll0_locked.bg0_pin0_0(bg0_pin0_0),                                        // output wire bg0_pin0_0.data_from_fabric_bg0_pin0_0(data_from_fabric_bg0_pin0_0),      // input wire [3 : 0] data_from_fabric_bg0_pin0_0.bg0_pin1_1(bg0_pin1_1),                                        // output wire bg0_pin1_1.bg0_pin2_2(bg0_pin2_2),                                        // output wire bg0_pin2_2.data_from_fabric_bg0_pin2_2(data_from_fabric_bg0_pin2_2),      // input wire [3 : 0] data_from_fabric_bg0_pin2_2.bg0_pin3_3(bg0_pin3_3),                                        // output wire bg0_pin3_3.bg0_pin4_4(bg0_pin4_4),                                        // output wire bg0_pin4_4.data_from_fabric_bg0_pin4_4(data_from_fabric_bg0_pin4_4),      // input wire [3 : 0] data_from_fabric_bg0_pin4_4.bg0_pin5_5(bg0_pin5_5),                                        // output wire bg0_pin5_5.bg0_pin6_6(bg0_pin6_6),                                        // output wire bg0_pin6_6.data_from_fabric_bg0_pin6_6(data_from_fabric_bg0_pin6_6),      // input wire [3 : 0] data_from_fabric_bg0_pin6_6.bg0_pin7_7(bg0_pin7_7),                                        // output wire bg0_pin7_7.bg0_pin8_8(bg0_pin8_8),                                        // output wire bg0_pin8_8.data_from_fabric_bg0_pin8_8(data_from_fabric_bg0_pin8_8),      // input wire [3 : 0] data_from_fabric_bg0_pin8_8.bg0_pin9_9(bg0_pin9_9),                                        // output wire bg0_pin9_9.bg0_pin10_10(bg0_pin10_10),                                    // output wire bg0_pin10_10.data_from_fabric_bg0_pin10_10(data_from_fabric_bg0_pin10_10),  // input wire [3 : 0] data_from_fabric_bg0_pin10_10.bg0_pin11_11(bg0_pin11_11),                                    // output wire bg0_pin11_11.bg1_pin0_13(bg1_pin0_13),                                      // output wire bg1_pin0_13.data_from_fabric_bg1_pin0_13(data_from_fabric_bg1_pin0_13),    // input wire [3 : 0] data_from_fabric_bg1_pin0_13.bg1_pin1_14(bg1_pin1_14),                                      // output wire bg1_pin1_14.bg1_pin2_15(bg1_pin2_15),                                      // output wire bg1_pin2_15.data_from_fabric_bg1_pin2_15(data_from_fabric_bg1_pin2_15),    // input wire [3 : 0] data_from_fabric_bg1_pin2_15.bg1_pin3_16(bg1_pin3_16),                                      // output wire bg1_pin3_16.bg1_pin4_17(bg1_pin4_17),                                      // output wire bg1_pin4_17.data_from_fabric_bg1_pin4_17(data_from_fabric_bg1_pin4_17),    // input wire [3 : 0] data_from_fabric_bg1_pin4_17.bg1_pin5_18(bg1_pin5_18),                                      // output wire bg1_pin5_18.bg1_pin6_19(bg1_pin6_19),                                      // output wire bg1_pin6_19.data_from_fabric_bg1_pin6_19(data_from_fabric_bg1_pin6_19),    // input wire [3 : 0] data_from_fabric_bg1_pin6_19.bg1_pin7_20(bg1_pin7_20),                                      // output wire bg1_pin7_20.bg1_pin8_21(bg1_pin8_21),                                      // output wire bg1_pin8_21.data_from_fabric_bg1_pin8_21(data_from_fabric_bg1_pin8_21),    // input wire [3 : 0] data_from_fabric_bg1_pin8_21.bg1_pin9_22(bg1_pin9_22),                                      // output wire bg1_pin9_22.bg1_pin10_23(bg1_pin10_23),                                    // output wire bg1_pin10_23.data_from_fabric_bg1_pin10_23(data_from_fabric_bg1_pin10_23),  // input wire [3 : 0] data_from_fabric_bg1_pin10_23.bg1_pin11_24(bg1_pin11_24),                                    // output wire bg1_pin11_24.bg2_pin2_28(bg2_pin2_28),                                      // output wire bg2_pin2_28.data_from_fabric_bg2_pin2_28(data_from_fabric_bg2_pin2_28),    // input wire [3 : 0] data_from_fabric_bg2_pin2_28.bg2_pin3_29(bg2_pin3_29),                                      // output wire bg2_pin3_29.bg2_pin4_30(bg2_pin4_30),                                      // output wire bg2_pin4_30.data_from_fabric_bg2_pin4_30(data_from_fabric_bg2_pin4_30),    // input wire [3 : 0] data_from_fabric_bg2_pin4_30.bg2_pin5_31(bg2_pin5_31),                                      // output wire bg2_pin5_31.bg2_pin6_32(bg2_pin6_32),                                      // output wire bg2_pin6_32.data_from_fabric_bg2_pin6_32(data_from_fabric_bg2_pin6_32),    // input wire [3 : 0] data_from_fabric_bg2_pin6_32.bg2_pin7_33(bg2_pin7_33),                                      // output wire bg2_pin7_33.bg2_pin8_34(bg2_pin8_34),                                      // output wire bg2_pin8_34.data_from_fabric_bg2_pin8_34(data_from_fabric_bg2_pin8_34),    // input wire [3 : 0] data_from_fabric_bg2_pin8_34.bg2_pin9_35(bg2_pin9_35),                                      // output wire bg2_pin9_35.bg2_pin10_36(bg2_pin10_36),                                    // output wire bg2_pin10_36.data_from_fabric_bg2_pin10_36(data_from_fabric_bg2_pin10_36),  // input wire [3 : 0] data_from_fabric_bg2_pin10_36.bg2_pin11_37(bg2_pin11_37),                                    // output wire bg2_pin11_37.bg3_pin0_39(bg3_pin0_39),                                      // output wire bg3_pin0_39.data_from_fabric_bg3_pin0_39(data_from_fabric_bg3_pin0_39),    // input wire [3 : 0] data_from_fabric_bg3_pin0_39.bg3_pin1_40(bg3_pin1_40),                                      // output wire bg3_pin1_40.bg3_pin2_41(bg3_pin2_41),                                      // output wire bg3_pin2_41.data_from_fabric_bg3_pin2_41(data_from_fabric_bg3_pin2_41),    // input wire [3 : 0] data_from_fabric_bg3_pin2_41.bg3_pin3_42(bg3_pin3_42),                                      // output wire bg3_pin3_42.bg3_pin4_43(bg3_pin4_43),                                      // output wire bg3_pin4_43.data_from_fabric_bg3_pin4_43(data_from_fabric_bg3_pin4_43),    // input wire [3 : 0] data_from_fabric_bg3_pin4_43.bg3_pin5_44(bg3_pin5_44),                                      // output wire bg3_pin5_44.bg3_pin6_45(bg3_pin6_45),                                      // output wire bg3_pin6_45.data_from_fabric_bg3_pin6_45(data_from_fabric_bg3_pin6_45),    // input wire [3 : 0] data_from_fabric_bg3_pin6_45.bg3_pin7_46(bg3_pin7_46),                                      // output wire bg3_pin7_46.bg3_pin8_47(bg3_pin8_47),                                      // output wire bg3_pin8_47.data_from_fabric_bg3_pin8_47(data_from_fabric_bg3_pin8_47),    // input wire [3 : 0] data_from_fabric_bg3_pin8_47.bg3_pin9_48(bg3_pin9_48),                                      // output wire bg3_pin9_48.bg3_pin10_49(bg3_pin10_49),                                    // output wire bg3_pin10_49.data_from_fabric_bg3_pin10_49(data_from_fabric_bg3_pin10_49),  // input wire [3 : 0] data_from_fabric_bg3_pin10_49.bg3_pin11_50(bg3_pin11_50)                                    // output wire bg3_pin11_50
);

RX模块信号解析

​1. 控制与状态信号​
​信号名​​方向​​功能说明​
rstInput全局复位信号(高有效)
riu_clkInputRIU配置接口时钟(100-200MHz)
pll0_lockedOutput内置PLL锁定状态(1=锁定)
rst_seq_doneOutputRX初始化序列完成标志(1=就绪)
vtc_rdy_bscXOutputBank X的VTU时序单元校准完成信号
en_vtc_bscXInputBank X的VTU校准使能信号(需拉高,例化直接置1)
dly_rdy_bscXOutputBank X的IDELAY延时单元校准完成信号
 ​​2. Bitslip数据对齐控制​
​信号名​​功能说明​
start_bitslip​输入​​:启动Bitslip校准序列(脉冲触发)
rx_bitslip_sync_done​输出​​:所有通道Bitslip对齐完成标志
bitslip_error_XX​输出​​:通道XX的对齐错误指示(1=检测到错误,如超时或训练序列不匹配)
fifo_rd_data_valid​输出​​:解串后的并行数据有效标志

​Bitslip工作流程​​:
拉高start_bitslip → IP自动发送训练序列 → 移位检测匹配 → rx_bitslip_sync_done变高
若超时未对齐 → bitslip_error_XX报错

本次实验中,由于在配置RX的时候,Bitslip Training Pattern参数配置的是0x0C,意味着RX的IP在“拉高start_bitslip → IP自动发送训练序列 → 移位检测匹配 → rx_bitslip_sync_done变高”这个流程中,从外界也就是TX模块传递进来的数据要一直稳定的为C,直到训练结束后,才能发送其他数据。

 ​​3. 数据时钟管理​
​信号名​​方向​​功能说明​
clkInput用户逻辑参考时钟(需与PLL输入同源)
shared_pll0_clkoutphy_outOutput高速串行采样时钟(供其他模块使用)
pll0_clkout0OutputPLL生成的并行输出时钟(用于同步data_to_fabric_*
fifo_rd_clk_XXInput通道XX的FIFO读取时钟(用户自定义)
 ​​4. 数据通道信号(按Bank分组)​
​信号格式​​方向​​位宽​​功能说明​
bgX_pinY_Z​Input​1-bitBank X的引脚Y输入数据(直连FPGA物理引脚)
data_to_fabric_bgX_pinY_ZOutput4-bit​解串后的并行数据​​(ISERDES将1位串行数据转换为4位并行输出至用户逻辑)

​数据流示例​​(Bank 0 Pin 0):
外部引脚输入 → bg0_pin0_0 → ISERDES解串 → data_to_fabric_bg0_pin0_0[3:0] → 用户逻辑

 ​​5. FIFO状态信号​
​信号名​​方向​​功能说明​
fifo_empty_XXOutput通道XX的FIFO空标志(1=无数据可读)
fifo_rd_data_validOutputFIFO读取数据有效标志

下面代码块为High Speed SelectIO Wizard设置为单向接收模块生成的.veo文件内容:

TG1_HSSIO_RX your_instance_name (.fifo_rd_data_valid(fifo_rd_data_valid),                    // output wire fifo_rd_data_valid.start_bitslip(start_bitslip),                              // input wire start_bitslip.rx_bitslip_sync_done(rx_bitslip_sync_done),                // output wire rx_bitslip_sync_done.bitslip_error_0(bitslip_error_0),                          // output wire bitslip_error_0.bitslip_error_2(bitslip_error_2),                          // output wire bitslip_error_2.bitslip_error_4(bitslip_error_4),                          // output wire bitslip_error_4.bitslip_error_6(bitslip_error_6),                          // output wire bitslip_error_6.bitslip_error_8(bitslip_error_8),                          // output wire bitslip_error_8.bitslip_error_10(bitslip_error_10),                        // output wire bitslip_error_10.bitslip_error_13(bitslip_error_13),                        // output wire bitslip_error_13.bitslip_error_15(bitslip_error_15),                        // output wire bitslip_error_15.bitslip_error_17(bitslip_error_17),                        // output wire bitslip_error_17.bitslip_error_19(bitslip_error_19),                        // output wire bitslip_error_19.bitslip_error_21(bitslip_error_21),                        // output wire bitslip_error_21.bitslip_error_23(bitslip_error_23),                        // output wire bitslip_error_23.bitslip_error_28(bitslip_error_28),                        // output wire bitslip_error_28.bitslip_error_30(bitslip_error_30),                        // output wire bitslip_error_30.bitslip_error_32(bitslip_error_32),                        // output wire bitslip_error_32.bitslip_error_34(bitslip_error_34),                        // output wire bitslip_error_34.bitslip_error_36(bitslip_error_36),                        // output wire bitslip_error_36.bitslip_error_39(bitslip_error_39),                        // output wire bitslip_error_39.bitslip_error_41(bitslip_error_41),                        // output wire bitslip_error_41.bitslip_error_43(bitslip_error_43),                        // output wire bitslip_error_43.bitslip_error_45(bitslip_error_45),                        // output wire bitslip_error_45.bitslip_error_47(bitslip_error_47),                        // output wire bitslip_error_47.bitslip_error_49(bitslip_error_49),                        // output wire bitslip_error_49.fifo_rd_clk_0(fifo_rd_clk_0),                              // input wire fifo_rd_clk_0.fifo_rd_clk_2(fifo_rd_clk_2),                              // input wire fifo_rd_clk_2.fifo_rd_clk_4(fifo_rd_clk_4),                              // input wire fifo_rd_clk_4.fifo_rd_clk_6(fifo_rd_clk_6),                              // input wire fifo_rd_clk_6.fifo_rd_clk_8(fifo_rd_clk_8),                              // input wire fifo_rd_clk_8.fifo_rd_clk_10(fifo_rd_clk_10),                            // input wire fifo_rd_clk_10.fifo_rd_clk_13(fifo_rd_clk_13),                            // input wire fifo_rd_clk_13.fifo_rd_clk_15(fifo_rd_clk_15),                            // input wire fifo_rd_clk_15.fifo_rd_clk_17(fifo_rd_clk_17),                            // input wire fifo_rd_clk_17.fifo_rd_clk_19(fifo_rd_clk_19),                            // input wire fifo_rd_clk_19.fifo_rd_clk_21(fifo_rd_clk_21),                            // input wire fifo_rd_clk_21.fifo_rd_clk_23(fifo_rd_clk_23),                            // input wire fifo_rd_clk_23.fifo_rd_clk_28(fifo_rd_clk_28),                            // input wire fifo_rd_clk_28.fifo_rd_clk_30(fifo_rd_clk_30),                            // input wire fifo_rd_clk_30.fifo_rd_clk_32(fifo_rd_clk_32),                            // input wire fifo_rd_clk_32.fifo_rd_clk_34(fifo_rd_clk_34),                            // input wire fifo_rd_clk_34.fifo_rd_clk_36(fifo_rd_clk_36),                            // input wire fifo_rd_clk_36.fifo_rd_clk_39(fifo_rd_clk_39),                            // input wire fifo_rd_clk_39.fifo_rd_clk_41(fifo_rd_clk_41),                            // input wire fifo_rd_clk_41.fifo_rd_clk_43(fifo_rd_clk_43),                            // input wire fifo_rd_clk_43.fifo_rd_clk_45(fifo_rd_clk_45),                            // input wire fifo_rd_clk_45.fifo_rd_clk_47(fifo_rd_clk_47),                            // input wire fifo_rd_clk_47.fifo_rd_clk_49(fifo_rd_clk_49),                            // input wire fifo_rd_clk_49.fifo_empty_0(fifo_empty_0),                                // output wire fifo_empty_0.fifo_empty_2(fifo_empty_2),                                // output wire fifo_empty_2.fifo_empty_4(fifo_empty_4),                                // output wire fifo_empty_4.fifo_empty_6(fifo_empty_6),                                // output wire fifo_empty_6.fifo_empty_8(fifo_empty_8),                                // output wire fifo_empty_8.fifo_empty_10(fifo_empty_10),                              // output wire fifo_empty_10.fifo_empty_13(fifo_empty_13),                              // output wire fifo_empty_13.fifo_empty_15(fifo_empty_15),                              // output wire fifo_empty_15.fifo_empty_17(fifo_empty_17),                              // output wire fifo_empty_17.fifo_empty_19(fifo_empty_19),                              // output wire fifo_empty_19.fifo_empty_21(fifo_empty_21),                              // output wire fifo_empty_21.fifo_empty_23(fifo_empty_23),                              // output wire fifo_empty_23.fifo_empty_28(fifo_empty_28),                              // output wire fifo_empty_28.fifo_empty_30(fifo_empty_30),                              // output wire fifo_empty_30.fifo_empty_32(fifo_empty_32),                              // output wire fifo_empty_32.fifo_empty_34(fifo_empty_34),                              // output wire fifo_empty_34.fifo_empty_36(fifo_empty_36),                              // output wire fifo_empty_36.fifo_empty_39(fifo_empty_39),                              // output wire fifo_empty_39.fifo_empty_41(fifo_empty_41),                              // output wire fifo_empty_41.fifo_empty_43(fifo_empty_43),                              // output wire fifo_empty_43.fifo_empty_45(fifo_empty_45),                              // output wire fifo_empty_45.fifo_empty_47(fifo_empty_47),                              // output wire fifo_empty_47.fifo_empty_49(fifo_empty_49),                              // output wire fifo_empty_49.vtc_rdy_bsc0(vtc_rdy_bsc0),                                // output wire vtc_rdy_bsc0.en_vtc_bsc0(en_vtc_bsc0),                                  // input wire en_vtc_bsc0.vtc_rdy_bsc1(vtc_rdy_bsc1),                                // output wire vtc_rdy_bsc1.en_vtc_bsc1(en_vtc_bsc1),                                  // input wire en_vtc_bsc1.vtc_rdy_bsc2(vtc_rdy_bsc2),                                // output wire vtc_rdy_bsc2.en_vtc_bsc2(en_vtc_bsc2),                                  // input wire en_vtc_bsc2.vtc_rdy_bsc3(vtc_rdy_bsc3),                                // output wire vtc_rdy_bsc3.en_vtc_bsc3(en_vtc_bsc3),                                  // input wire en_vtc_bsc3.vtc_rdy_bsc4(vtc_rdy_bsc4),                                // output wire vtc_rdy_bsc4.en_vtc_bsc4(en_vtc_bsc4),                                  // input wire en_vtc_bsc4.vtc_rdy_bsc5(vtc_rdy_bsc5),                                // output wire vtc_rdy_bsc5.en_vtc_bsc5(en_vtc_bsc5),                                  // input wire en_vtc_bsc5.vtc_rdy_bsc6(vtc_rdy_bsc6),                                // output wire vtc_rdy_bsc6.en_vtc_bsc6(en_vtc_bsc6),                                  // input wire en_vtc_bsc6.vtc_rdy_bsc7(vtc_rdy_bsc7),                                // output wire vtc_rdy_bsc7.en_vtc_bsc7(en_vtc_bsc7),                                  // input wire en_vtc_bsc7.dly_rdy_bsc0(dly_rdy_bsc0),                                // output wire dly_rdy_bsc0.dly_rdy_bsc1(dly_rdy_bsc1),                                // output wire dly_rdy_bsc1.dly_rdy_bsc2(dly_rdy_bsc2),                                // output wire dly_rdy_bsc2.dly_rdy_bsc3(dly_rdy_bsc3),                                // output wire dly_rdy_bsc3.dly_rdy_bsc4(dly_rdy_bsc4),                                // output wire dly_rdy_bsc4.dly_rdy_bsc5(dly_rdy_bsc5),                                // output wire dly_rdy_bsc5.dly_rdy_bsc6(dly_rdy_bsc6),                                // output wire dly_rdy_bsc6.dly_rdy_bsc7(dly_rdy_bsc7),                                // output wire dly_rdy_bsc7.rst_seq_done(rst_seq_done),                                // output wire rst_seq_done.shared_pll0_clkoutphy_out(shared_pll0_clkoutphy_out),      // output wire shared_pll0_clkoutphy_out.pll0_clkout0(pll0_clkout0),                                // output wire pll0_clkout0.rst(rst),                                                  // input wire rst.clk(clk),                                                  // input wire clk.riu_clk(riu_clk),                                          // input wire riu_clk.pll0_locked(pll0_locked),                                  // output wire pll0_locked.bg2_pin0_nc(bg2_pin0_nc),                                  // input wire bg2_pin0_nc.bg0_pin0_0(bg0_pin0_0),                                    // input wire bg0_pin0_0.data_to_fabric_bg0_pin0_0(data_to_fabric_bg0_pin0_0),      // output wire [3 : 0] data_to_fabric_bg0_pin0_0.bg0_pin1_1(bg0_pin1_1),                                    // input wire bg0_pin1_1.bg0_pin2_2(bg0_pin2_2),                                    // input wire bg0_pin2_2.data_to_fabric_bg0_pin2_2(data_to_fabric_bg0_pin2_2),      // output wire [3 : 0] data_to_fabric_bg0_pin2_2.bg0_pin3_3(bg0_pin3_3),                                    // input wire bg0_pin3_3.bg0_pin4_4(bg0_pin4_4),                                    // input wire bg0_pin4_4.data_to_fabric_bg0_pin4_4(data_to_fabric_bg0_pin4_4),      // output wire [3 : 0] data_to_fabric_bg0_pin4_4.bg0_pin5_5(bg0_pin5_5),                                    // input wire bg0_pin5_5.bg0_pin6_6(bg0_pin6_6),                                    // input wire bg0_pin6_6.data_to_fabric_bg0_pin6_6(data_to_fabric_bg0_pin6_6),      // output wire [3 : 0] data_to_fabric_bg0_pin6_6.bg0_pin7_7(bg0_pin7_7),                                    // input wire bg0_pin7_7.bg0_pin8_8(bg0_pin8_8),                                    // input wire bg0_pin8_8.data_to_fabric_bg0_pin8_8(data_to_fabric_bg0_pin8_8),      // output wire [3 : 0] data_to_fabric_bg0_pin8_8.bg0_pin9_9(bg0_pin9_9),                                    // input wire bg0_pin9_9.bg0_pin10_10(bg0_pin10_10),                                // input wire bg0_pin10_10.data_to_fabric_bg0_pin10_10(data_to_fabric_bg0_pin10_10),  // output wire [3 : 0] data_to_fabric_bg0_pin10_10.bg0_pin11_11(bg0_pin11_11),                                // input wire bg0_pin11_11.bg1_pin0_13(bg1_pin0_13),                                  // input wire bg1_pin0_13.data_to_fabric_bg1_pin0_13(data_to_fabric_bg1_pin0_13),    // output wire [3 : 0] data_to_fabric_bg1_pin0_13.bg1_pin1_14(bg1_pin1_14),                                  // input wire bg1_pin1_14.bg1_pin2_15(bg1_pin2_15),                                  // input wire bg1_pin2_15.data_to_fabric_bg1_pin2_15(data_to_fabric_bg1_pin2_15),    // output wire [3 : 0] data_to_fabric_bg1_pin2_15.bg1_pin3_16(bg1_pin3_16),                                  // input wire bg1_pin3_16.bg1_pin4_17(bg1_pin4_17),                                  // input wire bg1_pin4_17.data_to_fabric_bg1_pin4_17(data_to_fabric_bg1_pin4_17),    // output wire [3 : 0] data_to_fabric_bg1_pin4_17.bg1_pin5_18(bg1_pin5_18),                                  // input wire bg1_pin5_18.bg1_pin6_19(bg1_pin6_19),                                  // input wire bg1_pin6_19.data_to_fabric_bg1_pin6_19(data_to_fabric_bg1_pin6_19),    // output wire [3 : 0] data_to_fabric_bg1_pin6_19.bg1_pin7_20(bg1_pin7_20),                                  // input wire bg1_pin7_20.bg1_pin8_21(bg1_pin8_21),                                  // input wire bg1_pin8_21.data_to_fabric_bg1_pin8_21(data_to_fabric_bg1_pin8_21),    // output wire [3 : 0] data_to_fabric_bg1_pin8_21.bg1_pin9_22(bg1_pin9_22),                                  // input wire bg1_pin9_22.bg1_pin10_23(bg1_pin10_23),                                // input wire bg1_pin10_23.data_to_fabric_bg1_pin10_23(data_to_fabric_bg1_pin10_23),  // output wire [3 : 0] data_to_fabric_bg1_pin10_23.bg1_pin11_24(bg1_pin11_24),                                // input wire bg1_pin11_24.bg2_pin2_28(bg2_pin2_28),                                  // input wire bg2_pin2_28.data_to_fabric_bg2_pin2_28(data_to_fabric_bg2_pin2_28),    // output wire [3 : 0] data_to_fabric_bg2_pin2_28.bg2_pin3_29(bg2_pin3_29),                                  // input wire bg2_pin3_29.bg2_pin4_30(bg2_pin4_30),                                  // input wire bg2_pin4_30.data_to_fabric_bg2_pin4_30(data_to_fabric_bg2_pin4_30),    // output wire [3 : 0] data_to_fabric_bg2_pin4_30.bg2_pin5_31(bg2_pin5_31),                                  // input wire bg2_pin5_31.bg2_pin6_32(bg2_pin6_32),                                  // input wire bg2_pin6_32.data_to_fabric_bg2_pin6_32(data_to_fabric_bg2_pin6_32),    // output wire [3 : 0] data_to_fabric_bg2_pin6_32.bg2_pin7_33(bg2_pin7_33),                                  // input wire bg2_pin7_33.bg2_pin8_34(bg2_pin8_34),                                  // input wire bg2_pin8_34.data_to_fabric_bg2_pin8_34(data_to_fabric_bg2_pin8_34),    // output wire [3 : 0] data_to_fabric_bg2_pin8_34.bg2_pin9_35(bg2_pin9_35),                                  // input wire bg2_pin9_35.bg2_pin10_36(bg2_pin10_36),                                // input wire bg2_pin10_36.data_to_fabric_bg2_pin10_36(data_to_fabric_bg2_pin10_36),  // output wire [3 : 0] data_to_fabric_bg2_pin10_36.bg2_pin11_37(bg2_pin11_37),                                // input wire bg2_pin11_37.bg3_pin0_39(bg3_pin0_39),                                  // input wire bg3_pin0_39.data_to_fabric_bg3_pin0_39(data_to_fabric_bg3_pin0_39),    // output wire [3 : 0] data_to_fabric_bg3_pin0_39.bg3_pin1_40(bg3_pin1_40),                                  // input wire bg3_pin1_40.bg3_pin2_41(bg3_pin2_41),                                  // input wire bg3_pin2_41.data_to_fabric_bg3_pin2_41(data_to_fabric_bg3_pin2_41),    // output wire [3 : 0] data_to_fabric_bg3_pin2_41.bg3_pin3_42(bg3_pin3_42),                                  // input wire bg3_pin3_42.bg3_pin4_43(bg3_pin4_43),                                  // input wire bg3_pin4_43.data_to_fabric_bg3_pin4_43(data_to_fabric_bg3_pin4_43),    // output wire [3 : 0] data_to_fabric_bg3_pin4_43.bg3_pin5_44(bg3_pin5_44),                                  // input wire bg3_pin5_44.bg3_pin6_45(bg3_pin6_45),                                  // input wire bg3_pin6_45.data_to_fabric_bg3_pin6_45(data_to_fabric_bg3_pin6_45),    // output wire [3 : 0] data_to_fabric_bg3_pin6_45.bg3_pin7_46(bg3_pin7_46),                                  // input wire bg3_pin7_46.bg3_pin8_47(bg3_pin8_47),                                  // input wire bg3_pin8_47.data_to_fabric_bg3_pin8_47(data_to_fabric_bg3_pin8_47),    // output wire [3 : 0] data_to_fabric_bg3_pin8_47.bg3_pin9_48(bg3_pin9_48),                                  // input wire bg3_pin9_48.bg3_pin10_49(bg3_pin10_49),                                // input wire bg3_pin10_49.data_to_fabric_bg3_pin10_49(data_to_fabric_bg3_pin10_49),  // output wire [3 : 0] data_to_fabric_bg3_pin10_49.bg3_pin11_50(bg3_pin11_50)                                // input wire bg3_pin11_50
);

用户逻辑设计

用户逻辑分为两个部分,其一为给发送模块构造数据包,其二为比对模块,用于检测接收到的包是否和发送的包一致。

TX_GEN造包模块

        该模块的作用是,在RX模块训练阶段,构造值为0x0C的数据,当RX模块训练结束后,生成正常递增或者其他要求的88位数据(22对数据通道,每条通道构造的数据包位宽为4)。

RX_MON比对模块

        该模块的作用是:将收到的22对4位数据重新组合成88位的数据,并通过判断其是否与发送数据相同,输出检测结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90650.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Execel文档批量替换标签实现方案

问题背景需求:俺现网班级作为维度,批量导出每个班级学员的数据,excel的个数在1k左右,每一张表的人数在90左右。导出总耗时在10小时左右。代码编写完成并导出现网数据后,发现导出的标题错了。解决方案1.通过修改代码&am…

SpringBoot配置多数据源多数据库

Springboot支持配置多数据源。默认情况,在yml文件中只会配置一个数据库。如果涉及到操作多个数据库的情况,在同实例中(即同一个ip地址下的不同数据库),可以采用数据库名点数据库表的方式,实现跨库表的操作。…

Rocky9.4部署Zabbix7

一、配置安装源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm ​ yum clean all 二、安装Zabbix server,Web前端,agent yum install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf z…

【Java】对象类型转换(ClassCastException)异常:从底层原理到架构级防御,老司机的实战经验

在开发中,ClassCastException(类转换异常)就像一颗隐藏的定时炸弹,常常在代码运行到类型转换逻辑时突然爆发。线上排查问题时,这类异常往往因为类型关系复杂而难以定位。多数开发者习惯于在转换前加个instanceof判断就…

探路者:用 AI 面试加速人才集结,为户外爱好者带来更专业的服务

作为深耕户外用品领域的知名品牌,探路者已构建起覆盖全国的销售服务网络,上千品种的产品矩阵更是为品牌在市场中站稳脚跟提供了有力支撑。对探路者来说,要持续为户外爱好者带来专业且贴心的体验,专业人才是核心支撑。然而&#xf…

LeetCode——面试题 05.01 插入

通过万岁!!! 题目:一共会给四个数,分别是N、M、i、j,然后希望我们把N和M抓怒换为2进制以后,将M的二进制放在i到j之间的区域,如果M的二进制长度小于i-j1,则前面补0即可。最…

前端设计中如何在鼠标悬浮时同步修改块内样式

虽然只是一个小问题,但这个解决问题的过程也深化了自己对盒子模型的理解问题缘起正在写一个登录注册的小窗口,想要在鼠标悬浮阶段让按钮和文字都变色,但是发现实操的时候按钮和文字没办法同时变色鼠标悬停前鼠标悬停后问题分析仔细分析了下该…

航空发动机高速旋转件的非接触式信号传输系统

航空发动机是飞机动力系统的核心,各种关键部件如涡轮、压气机等,经常处于极端高温、高速旋转的工作环境中。航空发动机内的传感器数据,如何能够稳定可靠的通过无线的方式传输到检测太,一直是业内的一个难点和痛点。在这个领域&…

【postgresql按照逗号分割字段,并统计数量和求和】

postgresql按照逗号分割字段,并统计数量和求和postgresql按照逗号分割字段,并统计数量和求和postgresql按照逗号分割字段,并统计数量和求和 SELECT ucd, p ,tm, step, unitcd, tm_end from resource_calc_scene_rain_bound_value_plus whe…

「iOS」————继承链与对象的结构

iOS学习前言对象的底层结构isa的类型isa_tobjc_class & objc_object类信息的静态与动态存储(ro、rw、rwe机制)cachebits继承链isKindOfClass和isMemberOfClassisKindOfClass:isMemberofClass前言 对 对象底层结构的相关信息有点遗忘,简略…

代码随想录day46dp13

647. 回文子串 题目链接 文章讲解 回溯法 class Solution { public:int count 0;// 检查字符串是否是回文bool isPalindrome(string& s, int start, int end) {while (start < end) {if (s[start] ! s[end]) return false;start;end--;}return true;}// 回溯法&#…

学习随笔录

#61 学习随笔录 今日的思考 &#xff1a; 反思一下学习效率低下 不自律 或者 惰性思维 懒得思考 又或者 好高婺远 顶级自律从不靠任何意志力&#xff0c;而在于「平静如水的野心」_哔哩哔哩_bilibili 然后上面是心灵鸡汤合集 vlog #79&#xff5c;程序员远程办公的一天…

python-函数进阶、容器通用方法、字符串比大小(笔记)

python数据容器的通用方法#记住排序后容器类型会变成list容器列表 list[1,3,5,4,6,7] newListsorted(list,reverseTrue) print(newList) [7, 6, 5, 4, 3, 1]list[1,3,5,4,6,7] newListsorted(list,reverseFalse) print(newList) [1, 3, 4, 5, 6, 7]字典排序的是字典的key字符串…

关闭chrome自带的跨域限制,简化本地开发

在开发时为了图方便,简化本地开发,懒得去后端配置允许跨域,那就可以用此方法1. 右键桌面上的Chrome浏览器图标&#xff0c;选择“创建快捷方式”到桌面。2. 在新创建的快捷方式的图标上右键&#xff0c;选择“属性”。3. 在弹出窗口中的“目标”栏中追加&#xff1a; --allow-r…

C++___快速入门(上)

第一个C程序#include<iostream> using namespace std; int main() {cout << "hello world !" << endl;return 0; }上边的代码就是用来打印字符串 “hello world !” 的&#xff0c;可见&#xff0c;与C语言还是有很大的差别的&#xff0c;接下来我…

构建企业级Docker日志驱动:将容器日志无缝发送到腾讯云CLS

源码地址:https://github.com/k8scat/docker-log-driver-tencent-cls 在现代云原生架构中,容器化应用已经成为主流部署方式。随着容器数量的快速增长,如何高效地收集、存储和分析容器日志成为了一个关键挑战。传统的日志收集方式往往存在以下问题: 日志分散在各个容器中,难…

Kafka——消费者组重平衡能避免吗?

引言 其实在消费者组到底是什么&#xff1f;中&#xff0c;我们讲过重平衡&#xff0c;也就是Rebalance&#xff0c;现在先来回顾一下这个概念的原理和用途。它是Kafka实现消费者组&#xff08;Consumer Group&#xff09;弹性伸缩和容错能力的核心机制&#xff0c;却也常常成…

使用爬虫获取游戏的iframe地址

如何通过爬虫获取游戏的iframe地址要获取网页中嵌入的游戏的iframe地址&#xff08;即iframe元素的src属性&#xff09;&#xff0c;您可以使用网络爬虫技术。iframe是HTML元素&#xff0c;用于在当前页面中嵌入另一个文档&#xff08;如游戏页面&#xff09;&#xff0c;其地址…

NTLite Ent Version

NTLite是一款专业的系统安装镜像制作工具&#xff0c;通过这款软件可以帮助用户快速生成镜像文件打好补丁&#xff0c;很多朋友在安装电脑系统的时候一般都安装了windows系统的所有Windows组件&#xff0c;其实有很多Windows组件你可能都用到不到&#xff0c;不如在安装系统时就…

Maven之依赖管理

Maven之依赖管理一、Maven依赖管理的核心价值二、依赖的基本配置&#xff08;坐标与范围&#xff09;2.1 依赖坐标&#xff08;GAV&#xff09;2.2 依赖范围&#xff08;scope&#xff09;示例&#xff1a;常用依赖范围配置三、依赖传递与冲突解决3.1 依赖传递性示例&#xff1…