首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

凡事预则立---Verilog代码设计案例分析

凡事预则立---Verilog代码设计案例分析

Verilog以其灵活性而得到大部分FPGA设计者的喜爱,然而有些时候,这些灵活性也带来一些小问题,因此我们要记住,电脑永远没人我们聪明,我们一定要提前知道代码会被综合成什么样子。下面举一个有趣的例子。
假如定义如下变量:
reg [4:0] wp;
reg [4:0] rp;
……………………….
……………………….
Always @(posedge rx_ll_clock)
Begin
………………
………………
………………
if (rp == wp + 2)
full <= 1'b1;
else
full <= 1'b0;
…………………..
…………………..
end
从上面的代码可以看出,综合器应该综合一个触发器,一个加法器和一个比较器。这里的触发器和加法器不多说了,问题就出在的比较器上。按照我们的想法是当rp=0,wp=30时,full应该在时钟沿变为为“1”。在项目设计时,Function仿真时就出现了问题,最终发现综合器的综合结果和我们预期的不一致,如下图所示.


很明显,综合的比较器位宽是[5:0]而不是我们期望的[4:0]。最终我们将红色部分修改如下:
if (rp == wp + 2)改为if (rp == wp + 5’h02)
最终的综合结果变为我们所期望的结果:

最终的显示结果也满足我们预期的目标:

附件大小verilog-1.jpg11.53 KBverilog-2.jpg16.27 KBverilog-3.jpg8.63 KBverilog-4.jpg21.91 KB
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表