前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在C代码中插入移位寄存器

如何在C代码中插入移位寄存器

作者头像
Lauren的FPGA
发布2020-04-08 11:24:51
1.2K0
发布2020-04-08 11:24:51
举报
文章被收录于专栏:Lauren的FPGA
众所周知,标准C或C++代码是没有HDL

在C代码中插入寄存器时,需要添加头文件ap_shift_reg.h,如下图所示。这个案例中移位寄存器的深度为4(由DEPTH确定),这可以理解为4个寄存器级联。输出q取0号寄存器(由ADDR确定)输出。

定义移位寄存器时,需要声明其为static,这使得移位寄存器初始值为0。ap_shift_reg的第一个参数为数据类型,第二个参数为移位寄存器的深度,如下图第5行代码所示。在第8行代码中,使用了移位寄存器类型的方法shift,该方法同时实现移位寄存器的写入、移位和读出功能。在这里,将d[i]写入移位寄存器、移位、将0号寄存器的值输出给q[i]是同时执行的。

为进一步理解,我们看下面这张图。由上至下三部分分别对应数组d、深度为4的移位寄存器和不同ADDR值时数组q获得的数据。可以得出结论,数组q中一定包含ADDR+1个0。

结合C/RTL协同仿真,如果ADDR为1,仿真波形如下图所示。注意看图中的q_V_we0信号,其高脉冲表明了数据有效。可见仿真结果与上图的结果是一致的。

最后,我们看看生成的Verilog代码的关键部分,如下图所示。第29到第33行是对移位寄存器进行初始化,初始值为0;第35到第43行,移位寄存器执行写入和移位功能;第45行,执行读出功能。这是很规范的移位寄存器的描述方式。

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

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

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

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

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