咱们来做一个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往往会更简化硬件电路。