原创 不同的verilog代码风格看RTL视图之三

2008-10-3 22:10 8723 13 21 分类: FPGA/CPLD

不同的verilog代码风格看RTL视图之三<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


    我们来做一个4选一的Mux的实验,首先是利用ifelse语句来做,如下。


(由输入xsel来选择输出的路数xin0,xin1,xin2,xin3其一,输出yout


    Ex3:


input clk;


input xin0,xin1,xin2,xin3;


input[1:0] xsel;


 


output yout;


 


reg youtr;


 


always @ (posedge clk)


    if(xsel == 2'b00) youtr <= xin0;


    else if(xsel == 2'b01) youtr <= xin1;


    else if(xsel == 2'b10) youtr <= xin2;


    else youtr <= xin3;


 


assign yout = youtr;


 


    综合后的RTL视图如下:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图


    上面的视图里,可以看出有三个等于比较器,然后在触发器前会有三个21的选择器。和我们的代码是一样的,第一个if语句的优先级是最高的(这里所谓的优先级最高不是软件意义上的高优先级,由于HDL设计的并行性,判断语句综合后不是先后进行判断,而是在同一时刻进行判断,也就是说if和后面的if else 或者else其实是同时进行判断的),看红线连接的网络,如果它的等于比较器的逻辑值为1,那么决定了最后一个21mux的值必定是和xin0连接的而与前面的结果无关。依次类推,如果它的等于比较器的值为0,那么最后的输出就由前面的逻辑来决定。其实,综合出来这样的结果和我们的设想还是有出入的,一个41mux何必如此复杂呢。


    下面就看用case语句来做这个41mcu吧。


 


input clk;


input xin0,xin1,xin2,xin3;


input[1:0] xsel;


 


output yout;


 


reg youtr;


 


always @ (posedge clk)


    case (xsel)


       2'b00: youtr <= xin0;


       2'b01: youtr <= xin1;


       2'b10: youtr <= xin2;


       default: youtr <= xin3;


       endcase


      


assign yout = youtr;


 


    它的RTL视图如下:



点击看大图 


    呵呵,上面应该就是我们所要的,41mux,一目了然。Caseif的用法还是应该根据具体的情况而定,但是尽量多用case往往会更简化硬件电路。

PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1855852 2015-11-20 20:36

对于这个,只要把always过程中的上升沿敏感信号改为电平敏感信号型就不过综合出寄存器了。

用户1527113 2010-12-21 21:30

强悍,顶,期待后面对这个FPGA的测试。。。 其实国产的芯片如果可以的话,应该模仿台湾的策略,不要搞到最后又没人用了,然后不了了之

ilove314_323192455 2008-10-9 18:34

截图啊!

用户172161 2008-10-9 16:44

小声的问,RTL视图怎么上传滴?

用户461316 2008-10-8 09:57

不错的!!!!!

ilove314_323192455 2008-10-7 22:01

LS的说的也没有错,我这里只是做时序逻辑说明这个问题,如果你用纯组合逻辑做确实是节省了一个寄存器。但话说回来,纯组合逻辑综合出来的优化效果也是不一样。感兴趣的朋友可以比较下后面两个组合逻辑综合出来的逻辑。 EX1: input xin0,xin1,xin2,xin3; input[1:0] xsel; output yout; assign yout = (xsel == 2'b00) ? xin0 : ((xsel == 2'b01) ? xin1 : ((xsel == 2'b10) ? xin2:xin3)); EX2: input xin0,xin1,xin2,xin3; input[1:0] xsel; output yout; assign yout = xsel[1] ? (xsel[0] ? xin3:xin2):(xsel[0] ? xin1:xin0);

用户457439 2008-10-7 18:57

用纯组合逻辑实现不就是更简单了,省去一个寄存器,相应于verilog中的 assign a = en ? x : y; 这种结构不是更简单吗?

ilove314_323192455 2008-10-7 18:33

那么请问如何才更简单呢? 难道做一个4选1还可以有更优化的方法?

用户457439 2008-10-7 17:16

晕,MUX是一个组合逻辑电路,这样两种方法实现起来都不简单……
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
EE直播间
更多
我要评论
8
13
关闭 站长推荐上一条 /3 下一条