Verilog代码设计案例分析

FPGA/ASIC技术

206人已加入

描述

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)

最终的综合结果变为我们所期望的结果:

代码

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分