您的位置 首页 厂商

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

我们来做一个4选一的Mux的实验,首先是利用if…else语句来做,如下。(由输入xsel来选择输出的路数xin0,xin1,xin2,xin3其一,输出yout)Ex3:

  咱们来做一个4选一的Mux的试验,首先是使用if…else句子来做,如下。

  (由输入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视图如下:

  

点击看大图

 

  上面的视图里,能够看出有三个等于比较器,然后在触发器前会有三个2选1的挑选器。和咱们的代码是相同的,第一个if句子的优先级是最高的(这儿所谓的优先级最高不是软件意义上的高优先级,因为HDL规划的并行性,判别句子归纳后不是先后进行判别,而是在同一时间进行判别,也便是说if和后边的if else 或许else其实是一起进行判别的),看红线衔接的网络,假如它的等于比较器的逻辑值为1,那么决议了最终一个2选1mux的值必定是和xin0衔接的而与前面的成果无关。顺次类推,假如它的等于比较器的值为0,那么最终的输出就由前面的逻辑来决议。其实,归纳出来这样的成果和咱们的想象仍是有收支的,一个4选1mux何必如此杂乱呢。

  下面就看用case句子来做这个4选1mcu吧。

  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视图如下:

  

点击看大图

 

  呵呵,上面应该便是咱们所要的,4选1的mux,一望而知。Case与if的用法仍是应该依据详细的状况而定,可是尽量多用case往往会更简化硬件电路。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/116985.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部