EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2008/10/2 8:59:51

4

标签: verilog  代码风格  RTL  

不同的verilog代码风格看RTL视图之二

不同的verilog代码风格看RTL视图之二

 

    这次要说明的一个问题是我在做一个480*320液晶驱动的过程中遇到的,先看一个简单的对比,然后再讨论不迟。

    这个程序是在我的液晶驱动设计中提取出来的。假设是x_cnt不断的增加,8bitx_cnt加一个周期回到0后,y_cnt1,如此循环,本意是要让下面的dout信号只有在x_cnt>=5 & y_cnt=0或者x_cnt<= 4,y_cnt=1这个区间内为1,其它时刻内为0。一般而言会有如下两种描述,前者是时序逻辑,后者是组合逻辑。当然除了下面两种编码风格外,还可以有很多种不同的编码。这里只是列举其一说明一下问题。

Ex2:

input clk;

input[7:0] x_cnt,y_cnt;

output dout;

 

reg dout_r;

 

always @ (posedge clk)

      if(x_cnt == 8'd5 && y_cnt == 8'd0) dout_r <= 1'b1;

      else if(x_cnt == 8'd6 && y_cnt == 8'd1 ) dout_r <= 1'b0;

 

assign dout = dout_r;

 

点击看大图

    综合后使用了<1macrocells。主要使用的是4个等于比较器。然后每个时钟的上升沿做一次判断,仔细看上面的RTL视图,其实你还可以发现优先级的问题,这个后面再说。

 

组合逻辑的代码:

input clk;

input[7:0] x_cnt,y_cnt;

 

output dout;

 

assign dout = ((x_cnt >= 8'd5 && y_cnt == 8'd0) ||

(x_cnt < 8'd6 && y_cnt == 8'd1 ));

    点击看大图

 

    综合后使用了2macrocells。用了2个等于比较器,还有2个小于(等于)比较器。但是占用的资源却比前者多出了一倍多,这个似乎说明了一些问题。其实在这个很简单的设计里,这种资源占用情况还不是很明显,我在做整个项目中用了这两种不同的设计风格后发现:两种不同的coding style得到的macrocells占用个数差别达到10几个(这个可能是比较极端的情况)。当然了,这其中更多的因素可能是布局布线后走线等在不同风格代码下的耗费是不一样的。总之,前者更值得推荐,就是说能用等于比较器直接赋值(哪怕是用故意生成的锁存器来保持赋值),也不用小于(大于)比较器。

 

系统分类: CPLD/FPGA   |   用户分类: FPGA设计感悟   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

阅读(1359)  |  评论(3)  |  收藏(2)  |  举报  

投一票您将和博主都有获奖机会!

最新评论

  • smallfish230058

    2009/3/25 15:21:35

    谢谢,我一直在找,RTL级语言应该怎么看,麻烦各位知道一下

  • 2006tx_yafeng

    2008/10/6 12:00:32

    面积与速度不可兼得。

  • wangxing

    2008/10/2 17:48:27

    欢迎你到“可编程器件”论坛版块做贡献!! 这是地址:http://bbs.ednchina.com/ShowForum.aspx?id=22