不同的verilog代码风格看RTL视图之二
时间:02-24
来源:互联网
点击:
这次要说明的一个问题是我在做一个480*320液晶驱动的过程中遇到的,先看一个简单的对比,然后再讨论不迟。
这个程序是在我的液晶驱动设计中提取出来的。假设是x_cnt不断的增加,8bit的x_cnt加一个周期回到0后,y_cnt加1,如此循环,本意是要让下面的dout信号只有在x_cnt>=5 & y_cnt=0或者x_cnt if(x_cnt == 8'd5 && y_cnt == 8'd0) dout_r
else if(x_cnt == 8'd6 && y_cnt == 8'd1 ) dout_r
[color=] assign dout = dout_r;
综合后使用了RTL视图,其实你还可以发现优先级的问题,这个后面再说。
组合逻辑的代码:
[color=] input clk;
[color=] input[7:0] x_cnt,y_cnt;
[color=] output dout;
[color=] assign dout = ((x_cnt >= 8'd5 && y_cnt == 8'd0) ||
(x_cnt
综合后使用了2个macrocells。用了2个等于比较器,还有2个小于(等于)比较器。但是占用的资源却比前者多出了一倍多,这个似乎说明了一些问题。其实在这个很简单的设计里,这种资源占用情况还不是很明显,我在做整个项目中用了这两种不同的设计风格后发现:两种不同的coding style得到的macrocells占用个数差别达到10几个(这个可能是比较极端的情况)。当然了,这其中更多的因素可能是布局布线后走线等在不同风格代码下的耗费是不一样的。总之,前者更值得推荐,就是说能用等于比较器直接赋值(哪怕是用故意生成的锁存器来保持赋值),也不用小于(大于)比较器。
这个程序是在我的液晶驱动设计中提取出来的。假设是x_cnt不断的增加,8bit的x_cnt加一个周期回到0后,y_cnt加1,如此循环,本意是要让下面的dout信号只有在x_cnt>=5 & y_cnt=0或者x_cnt if(x_cnt == 8'd5 && y_cnt == 8'd0) dout_r
else if(x_cnt == 8'd6 && y_cnt == 8'd1 ) dout_r
[color=] assign dout = dout_r;
综合后使用了RTL视图,其实你还可以发现优先级的问题,这个后面再说。
组合逻辑的代码:
[color=] input clk;
[color=] input[7:0] x_cnt,y_cnt;
[color=] output dout;
[color=] assign dout = ((x_cnt >= 8'd5 && y_cnt == 8'd0) ||
(x_cnt
综合后使用了2个macrocells。用了2个等于比较器,还有2个小于(等于)比较器。但是占用的资源却比前者多出了一倍多,这个似乎说明了一些问题。其实在这个很简单的设计里,这种资源占用情况还不是很明显,我在做整个项目中用了这两种不同的设计风格后发现:两种不同的coding style得到的macrocells占用个数差别达到10几个(这个可能是比较极端的情况)。当然了,这其中更多的因素可能是布局布线后走线等在不同风格代码下的耗费是不一样的。总之,前者更值得推荐,就是说能用等于比较器直接赋值(哪怕是用故意生成的锁存器来保持赋值),也不用小于(大于)比较器。
比较器 相关文章:
- FPGA作为协处理器在实时系统中的应用(04-08)
- Virtex-5推动超宽带通信和测距的发展(01-06)
- FPGA异步FIFO设计中的问题与解决办法(01-16)
- 异步FIFO结构及FPGA设计(03-09)
- FPGA单芯片四核二乘二取二的安全系统(03-11)
- 利用FPGA和CPLD数字逻辑实现ADC(06-04)