XLININX FPGA 的HLS Stream应用中 Byte Write Enable 怎么用?

思考空间

如果要修改hls_stream对应的FIFO的深度,该采用哪个directive?
可以用STREAM修改FIFO的深度。可以在GUI下操作,也可以直接使用如下Tcl命令完成设置。
set_directive_stream -depth 512 -dim 1 “top” idx_fifo

在使用Xilinx的IP Block Memory Generator时,会出现如图1所示界面,这里有一个所谓的“ByteWrite Enable”,它的具体含义是什么呢?
图1 XILINX FPGA HSL Byte Write Enable选项.png

图1 Byte Write Enable选项

从字面上看,其含义是Byte写使能,也就是以8-bit为单位写入数据。举例说明:输入数据为32-bit,那么就需要4-bit Byte写使能信号,这个使能信号与输入数据各位的对应关系如图2所示。从图中不难看出,当we[3]有效时,只会将输入数据的高8-bit写入到目标地址;当we[0]有效时,只会将输入数据的低8-bit写入到目标地址。其实,也就是根据写使能来更新指定地址上原始数据的某些位。

图2 XILINX FPGA Byte写使能与输入数据的对应关系.png

图2 Byte写使能与输入数据的对应关系

这里我们看一个单端口RAM,输入/输出数据为32-bit,读优先。直接采用SystemVerilog代码,从代码角度深入理解Byte写使能的含义。具体代码如图3所示。

图3 XILINX FPGA 带Byte Write Enable的单端口RAM.png

图3 带Byte Write Enable的单端口RAM

在代码的第17行,声明了一个数组,其深度为DEPTH,宽度为DATA_WIDTH,其实DATA_WIDTH就是Byte写使能的个数(NUM_COL)和COL_WIDTH(8-bit,对应一个Byte)的乘积。该数组的初始值为0。代码第23行至第32行是核心部分,通过for…generate语句将数据在Byte写使能的作用下写入相应的地址。

对上述代码进行仿真,结果如图4所示。输入地址在Byte写使能有效时始终为1,输入数据始终为11223344(十六进制)。由于是读优先,可以看到输出数据依次更新相应的Byte。

图4 仿真结果.png

图4 仿真结果

这里再给出一个仿真结果,大家可自行分析理解。
图5 仿真结果.png

图5 仿真结果

思考空间

代码第17行对RAM的初始化是否可综合?


**如何理解XLILINX FPGA HLS中的Stream**

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
lailailee 头像