SRIO xilinx官方源码分析(一)——头文件instruction_list.vh

NUM_SWRITES表示待发送SWRITE事务的数量;

NUM_NWRITTES表示待发送的NWRITE_R事务的数量;

NUM_NWRITERS表示待发送NWRITER事务的数量;

NUM_NREADS表示待发送NREAD事务的数量;

NUM_DBS表示待发送DB事务的数量;

NUM_MSGS表示待发送的MSG事务的数量。

NUMBER_OF_INSTRUCTIONS为所有待发送事务的总数量

​
​
localparam NUM_SWRITES = SEND_SWRITE ? 37 : 0;
localparam NUM_NWRITERS = SEND_NWRITER ? 19 : 0;
localparam NUM_NWRITES = SEND_NWRITE ? 19 : 0;
localparam NUM_NREADS = SEND_NREAD ? 26 : 0;
localparam NUM_DBS = SEND_DB ? 2 : 0;
localparam NUM_MSGS = SEND_MSG ? 17 : 0;
localparam NUM_FTYPE9 = SEND_FTYPE9 ? 1 : 0;

​
​localparam NUMBER_OF_INSTRUCTIONS = NUM_SWRITES + NUM_NWRITERS + NUM_NWRITES + NUM_NREADS + NUM_DBS + NUM_MSGS + NUM_FTYPE9;

以下代码定义了37个swrite个事务(stream流写事务),注意:{12'h000, SWRITE, 4'h0,   36'h000000777, 8'd0}不是一个swrite事务的HELLO格式的数据包;

在此,回顾一下swrite事务的HELLO格式数据包:

其中R代表保留,一般默认为0。

第一列的十二位数据12'h000,其中高8位为R(保留),因为swrite没有srcTiD。低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,swrite事务的FTYPY为4‘h6。

第三列为4bit的TTYPE,swrite事务的TTYPE为R,即0。

第四列为36bit的数据,高两位为R(保留),低34位为地址addr。

第五列为8位数据,表示size,swrite事务的size为R,即0。如果size不为0,不管为多少,目标Target会将size当成0来处理。

localparam [64*37-1:0] swrite_instruction = {
  // RSVD,   FTYPE, TTYPE,  ADDRESS,       SIZE
  // SWRITEs
  {12'h000, SWRITE, 4'h0,   36'h000000777, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000008806, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000125, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000124, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000123, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000122, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000121, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000120, 8'd0},  
  {12'h000, SWRITE, 4'h0,   36'h000000126, 8'd1},  
  {12'h000, SWRITE, 4'h0,   36'h000000124, 8'd1},  
  {12'h000, SWRITE, 4'h0,   36'h000000122, 8'd1},  
  {12'h000, SWRITE, 4'h0,   36'h000004350, 8'd1},  
  {12'h000, SWRITE, 4'h0,   36'h000004355, 8'd2},  
  {12'h000, SWRITE, 4'h0,   36'h000012300, 8'd2},  
  {12'h000, SWRITE, 4'h0,   36'h000012304, 8'd3},  
  {12'h000, SWRITE, 4'h0,   36'h000345000, 8'd3},  
  {12'h000, SWRITE, 4'h0,   36'h000345003, 8'd4},  
  {12'h000, SWRITE, 4'h0,   36'h004550000, 8'd4},  
  {12'h000, SWRITE, 4'h0,   36'h004550002, 8'd5},  
  {12'h000, SWRITE, 4'h0,   36'h198877600, 8'd5},  
  {12'h000, SWRITE, 4'h0,   36'h198877601, 8'd6},  
  {12'h000, SWRITE, 4'h0,   36'h2ABBCCDD8, 8'd6},  
  {12'h000, SWRITE, 4'h0,   36'h2ABBCCDD8, 8'd7},  
  {12'h000, SWRITE, 4'h0,   36'h2ABBCCDD8, 8'd15}, 
  {12'h000, SWRITE, 4'h0,   36'h2ABBCCDD8, 8'd31}, 
  {12'h000, SWRITE, 4'h0,   36'h120000600, 8'd63}, 
  {12'h000, SWRITE, 4'h0,   36'h230000600, 8'd95}, 
  {12'h000, SWRITE, 4'h0,   36'h340000600, 8'd127},
  {12'h000, SWRITE, 4'h0,   36'h450000600, 8'd255},
  {12'h000, SWRITE, 4'h0,   36'h560000600, 8'd15}, 
  {12'h000, SWRITE, 4'h0,   36'h670000600, 8'd31}, 
  {12'h000, SWRITE, 4'h0,   36'h780000600, 8'd63}, 
  {12'h000, SWRITE, 4'h0,   36'h780000600, 8'd95}, 
  {12'h000, SWRITE, 4'h0,   36'h890000600, 8'd127},
  {12'h000, SWRITE, 4'h0,   36'h9A0000600, 8'd255},
  {12'h000, SWRITE, 4'h0,   36'hAB0000600, 8'd15}, 
  {12'h000, SWRITE, 4'h0,   36'hCD0000600, 8'd15}}; 

以下代码定义了19个NWRITE_R事务(写请求带响应的事务)。

第一列的十二位数据12'h000,其中高8位为srcTID。低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,NWRITE_R事务的FTYPY为4'h5。

第三列4bit的TNWR_R为TTYPE,值为4'h5。

第四列为36bit的数据,高两位为R(保留),低34位为地址addr。

第五列为8位数据,表示size。NWRITE_R的size不为R。其中,size为0,说明这次传输的数据个数为1。size为5,说明这次传输的数据个数为6。size的范围为0~255,表示传输的数据个数范围为1~256。

localparam [64*19-1:0] nwriter_instruction = {
  // NWRITERs
  {12'h000, NWRITE, TNWR_R, 36'h000000777, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000008806, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000125, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000124, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000123, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000122, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000121, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000120, 8'd0},
  {12'h000, NWRITE, TNWR_R, 36'h000000126, 8'd1},
  {12'h000, NWRITE, TNWR_R, 36'h000000124, 8'd1},
  {12'h000, NWRITE, TNWR_R, 36'h000000122, 8'd1},
  {12'h000, NWRITE, TNWR_R, 36'h000004350, 8'd1},
  {12'h000, NWRITE, TNWR_R, 36'h000004355, 8'd2},
  {12'h000, NWRITE, TNWR_R, 36'h000012300, 8'd2},
  {12'h000, NWRITE, TNWR_R, 36'h000012304, 8'd3},
  {12'h000, NWRITE, TNWR_R, 36'h000345000, 8'd3},
  {12'h000, NWRITE, TNWR_R, 36'h000345003, 8'd4},
  {12'h000, NWRITE, TNWR_R, 36'h004550000, 8'd4},
  {12'h000, NWRITE, TNWR_R, 36'h004550002, 8'd5}};

以下代码定义了19个NWRITE事务(写请求事务)。

第一列的十二位数据12'h000,其中高8位为srcTID。低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,NWRITE事务的FTYPY为4'h5。其中NWRITE事务(写请求事务)和NWRITE_R事务(写请求带响应的事务)的FTYPE相同。

第三列4bit的TNWR为TTYPE,值为4'h4。

第四列为36bit的数据,高两位为R(保留),低34位为地址addr。

第五列为8位数据,表示size。NWRITE的size不为R。其中,size为0,说明这次传输的数据个数为1。size为5,说明这次传输的数据个数为6。size的范围为0~255,表示传输的数据个数范围为1~256。

localparam [64*19-1:0] nwrite_instruction = {
  // NWRITEs
  {12'h000, NWRITE, TNWR,   36'h198877600, 8'd5},
  {12'h000, NWRITE, TNWR,   36'h198877601, 8'd6},
  {12'h000, NWRITE, TNWR,   36'h2ABBCCDD8, 8'd6},
  {12'h000, NWRITE, TNWR,   36'h2ABBCCDD8, 8'd7},
  {12'h000, NWRITE, TNWR,   36'h2ABBCCDD8, 8'd15},
  {12'h000, NWRITE, TNWR,   36'h2ABBCCDD8, 8'd31},
  {12'h000, NWRITE, TNWR,   36'h120000600, 8'd63},
  {12'h000, NWRITE, TNWR,   36'h230000600, 8'd95},
  {12'h000, NWRITE, TNWR,   36'h340000600, 8'd127},
  {12'h000, NWRITE, TNWR,   36'h450000600, 8'd255},
  {12'h000, NWRITE, TNWR,   36'h560000600, 8'd15},
  {12'h000, NWRITE, TNWR,   36'h670000600, 8'd31},
  {12'h000, NWRITE, TNWR,   36'h780000600, 8'd63},
  {12'h000, NWRITE, TNWR,   36'h890000600, 8'd95},
  {12'h000, NWRITE, TNWR,   36'h9A0000600, 8'd127},
  {12'h000, NWRITE, TNWR,   36'hAB0000600, 8'd255},
  {12'h000, NWRITE, TNWR,   36'hBC0000600, 8'd15},
  {12'h000, NWRITE, TNWR,   36'hCD0000600, 8'd15},
  {12'h000, NWRITE, TNWR,   36'hDE0000600, 8'd15}};

以下代码定义了26个NREAD事务(读请求事务)。

第一列的十二位数据12'h000,其中高8位为srcTID。低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,NREAD事务的FTYPY为4'h2。

第三列4bit的TNRD为TTYPE,值为4'h4。

第四列为36bit的数据,高两位为R(保留),低34位为地址addr。

第五列为8位数据,表示size。NREAD的size不为R。其中,size为0,说明这次传输的数据个数为1。size为5,说明这次传输的数据个数为6。size的范围为0~255,表示传输的数据个数范围为1~256。

localparam [64*26-1:0] nread_instruction = {
  // NREADs
  {12'h000, NREAD,  TNRD,   36'h000002307, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002406, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002505, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002604, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002703, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002802, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002301, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002400, 8'd00},
  {12'h000, NREAD,  TNRD,   36'h000002506, 8'd01},
  {12'h000, NREAD,  TNRD,   36'h000002604, 8'd01},
  {12'h000, NREAD,  TNRD,   36'h000002702, 8'd01},
  {12'h000, NREAD,  TNRD,   36'h000002800, 8'd01},
  {12'h000, NREAD,  TNRD,   36'h000002305, 8'd02},
  {12'h000, NREAD,  TNRD,   36'h000002400, 8'd02},
  {12'h000, NREAD,  TNRD,   36'h000002504, 8'd03},
  {12'h000, NREAD,  TNRD,   36'h000002600, 8'd03},
  {12'h000, NREAD,  TNRD,   36'h000002703, 8'd04},
  {12'h000, NREAD,  TNRD,   36'h000002800, 8'd04},
  {12'h000, NREAD,  TNRD,   36'h000002502, 8'd05},
  {12'h000, NREAD,  TNRD,   36'h000002600, 8'd05},
  {12'h000, NREAD,  TNRD,   36'h000002701, 8'd06},
  {12'h000, NREAD,  TNRD,   36'h000002800, 8'd06},
  {12'h000, NREAD,  TNRD,   36'h0000023F0, 8'd07},
  {12'h000, NREAD,  TNRD,   36'h000002400, 8'd15},
  {12'h000, NREAD,  TNRD,   36'h000002500, 8'd31},
  {12'h000, NREAD,  TNRD,   36'h000002600, 8'd63}};

以下代码定义了2个DOORB事务(门铃事务)。

第一列的十二位数据12'h000,其中高8位为srcTID。低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,DOORB事务的FTYPY为4'hA。

第三列为4bit的TTYPE,DOORB事务的TTYPE为R,即0。

第四列为36bit的数据,高四位为R(保留),中间8bit为 info MSB,另外8bit为info LSB,最低16bit为R(保留),即0。info MSB 和 info LSB是什么意思,笔者暂时也不太清楚

第五列为8位数据,表示size,DOORB事务的size为R,即0。如果size不为0,不管为多少,目标Target会将size当成0来处理。

localparam [64*2-1:0] db_instruction = {
  // DOORBELLs
  {12'h000, DOORB,  4'b0,   36'h0DBDB0000, 8'd01},
  {12'h000, DOORB,  4'b0,   36'h044440000, 8'd01}};

以下代码定义了17个MESSG事务(消息事务)。

第一列的十二位数据12'h000,其中高8位为4bit的msglen和4bit的msgseg,低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

 第二列为4bit的FTYPE,MESSG事务的FTYPY为4'hB。

第三列为4bit的TTYPE,MESSG事务的TTYPE为R(保留),即0。

第四列为36bit的数据,其中高26bit为R(保留),6bit的mailbox,2bit的R,2bit的ltr。

第五列为8位数据,表示size。MESSG的size不为R。其中,size为0,说明这次传输的数据个数为1。size为5,说明这次传输的数据个数为6。size的范围为0~255,表示传输的数据个数范围为1~256。

localparam [64*17-1:0] msg_instruction = {
  // MESSAGEs
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000022, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000022, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000022, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000022, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000022, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000002, 8'd07},
  {12'h000, MESSG,  4'b0,   36'h000000012, 8'd07}};

以下代码定义了1个DATA stream事务。

第一列的十二位数据12'h000,其中高8位表示“S,E,R,xh,O,P”,低4位分别表示1bit的R(保留)、2bit的prio、1bit的CRF。

第二列为4bit的FTYPE,DATA stream事务的FTYPY为4'h9。

第三列为4bit的TTYPE,DATA stream事务的TTYPE为R(保留),即0。

第四列为36bit的数据,其实高4位为R(保留),中间16bit为streamID,低16位为Length。

第五列为8位数据,表示size。DATA stream的size不为R。其中,size为0,说明这次传输的数据个数为1。size为5,说明这次传输的数据个数为6。size的范围为0~255,表示传输的数据个数范围为1~256。

localparam [64*1-1:0] ftype9_instruction = {
  // FTYPE9 
  {12'h000, FTYPE9,  4'b0,   36'h0DBDB1000, 8'd7}};

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xilinx FPGA工程例子源码 VERILOG设计源码78个合集: 1024点FFT快速傅立叶变换.zip AD7266的Verilog驱动程序.zip BOOTLOADER (基于Platform Flash).rar ChipScope使用示例.zip DDR SDRAM控制器verilog代码.zip DDR SDRAM控制器参考设计VHDL.zip DDR2 Controller.zip EDK9.1嵌入式开发实验代码.zip EDK中PS2自定义IP.zip FFT变换的IP核的源代码.zip FM收音机的解码及控制器VHDL语言实现.zip FPGA实现CAN总线控制器源码.rar FPGA语音通信平台设计实例.zip IP camera的开源系统.zip LCD IP CORE.zip LCD12864 在Spartan-3E实现代码.zip PCI Express IP核应用参考设计.zip PCI Express标准概述.zip PCIE DMA例子.zip PCI总线IP核(华为的商用).zip PCI的核.zip PICOBLAZE控制LCD1602的源码.zip PS2键盘控制程序.zip Sparten3E的EDK实验.zip System Generator的设计实例.rar The SDRAM controller is designed for the Virtex V300bg432-6.zip ucos_ii 在microblaze平台上的移植.zip USB IP核.zip USB2.0 IP核源代码.zip USB大容量存储开发板CPLD代码.zip USB接口应用系统设计实例.zip USB接口控制器参考设计VHDL代码(Xilinx).zip USB通信全套资料.zip Verilog实现闰年的判断(ISE8.21中调试通过).zip Verilog编写的信道估计.zip Verilog编写的基于SPARTAN板的VGA接口显示程序.zip VGA显示IP核(括驱动).zip VHDL实现对图像的采集和压缩.zip VHDL编写的PCI代码(PCI2.2兼容).zip xilinx 3s400开发板厂家光盘源码(按键防抖动).zip Xilinx DDR2存储器接口调试代码.rar Xilinx DDR3最新VHDL代码(通过调试).rar Xilinx EDK工程一例MicroBlaze内置USB固件程序.rar Xilinx EDK设计试验.rar Xilinx ISE9.x FPGA_CPLD设计指南(原书光盘上的源码).zip Xilinx Sdram 参考设计:含Verilog和VHDL版本级详细说明文档.rar Xilinx SPARTAN-3E入门开发板实例.zip Xilinx sparten3E 键盘和开发板的通信和LCD的字符显示.zip Xilinx spratan3 xcs100E(VGA PS2).zip Xilinx TCP_IP协议实现.rar Xilinx 公司BASYs开发板自带的Demo程序.zip Xilinx 公司的加法器核.rar Xilinx 官方网站提供的一个利用DCT进行图像压缩的设计参考.rar Xilinx 提供的频率发生器的VHDL源码.zip Xilinx 提供的速多状态编码8b_10b编码器.zip Xilinx 的Basys板VGA显示图片原码.zip Xilinx 的I2C工程.zip Xilinx 的IP:1024点FFT快速傅立叶变换.rar Xilinx 的用于设计SMBus控制器的源程序.zip Xilinx 级试验的代码.rar Xilinx.CPLD源码参考设计.zip 兼容opencores.org的I2C slave的RTL代码.zip 在FPGACPLD中实现AD或DA的文章(英文Verilog).zip 在FPGA上实现CRC算法的程序.zip 基于FPGA_CPLD和USB技术的无损图像采集卡.zip 基于FPGA实时处理的双目测距系统.zip 基于Spartan3E的串口调试和检测程序.rar 基于Spartan3火龙刀系列FPGA开发板制作的VGA实验例程.rar 基于XILINX的SPARTAN板的VGA接口显示程序.rar 基于XILINX的XC3系列FPGA的VGA控制器的VHDL源程序.rar 实现在Sparton-3E板卡上的按键及开关的控制.zip 实现基于spartan3与CAN总线连接后的的汽车时速的模拟仿真.zip 扩频接收机设计实例.zip 摄像头的硬件函数(IP核).zip 用FPGA实现数字锁相环.zip 用FPGA模拟VGA时序,PS_2总线的键盘接口VHDL源

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值