前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Byte Write Enable 怎么用

Byte Write Enable 怎么用

作者头像
Lauren的FPGA
发布2019-10-30 21:49:27
3.1K0
发布2019-10-30 21:49:27
举报
文章被收录于专栏:Lauren的FPGA

思考空间

如果要修改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 Byte Write Enable选项
图1 Byte Write Enable选项

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

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

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

图3 带Byte Write Enable的单端口RAM
图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 仿真结果
图4 仿真结果

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

图5 仿真结果
图5 仿真结果

思考空间

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档