15.四选一多路选择器的Verilog实现

1.用case语句:

module MUX41a(a,b,c,d,s1,s0,y);
 input a,b,c,d;
 input s1,s0;
 output y;
 reg y;
 always @(a or b or c or d or s1 or s0)
 begin : MUX41
  case({s1,s0})
   2'b00:y<=a;
   2'b01:y<=b;
   2'b10:y<=c;
   2'b11:y<=d;
   default:y<=a;
  endcase
 end
endmodule

2.用assign语句

module MUX41a(a,b,c,d,s1,s0,y);
 input a,b,c,d,s1,s0;
 output y;
 wire [1:0] SEL;
 wire AT,BT,CT,DT;
 assign SEL={s1,s0};
 assign AT=(SEL==2'D0);
 assign BT=(SEL==2'D1);
 assign CT=(SEL==2'D2);
 assign DT=(SEL==2'D3);
 assign y=(a&AT)|(b&BT)|(c&CT)|(d&DT);
endmodule

3.用三目语句:

module MUX41a(a,b,c,d,s1,s0,y);
 input a,b,c,d,s1,s0;
 output y;
 wire AT=s0?d:c;
 wire BT=s0?b:a;
 wire y=(s1?AT:BT);
endmodule

=号是阻塞式赋值,语句执行时马上赋值;而<=是非阻塞式赋值,得等语句块(beign end或fork join)执行完再赋值。
关于reg,wire,always@(*)的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值