verilog 请问如何描述组合电路mux? 试了输出必须定义成reg才行
时间:10-02
整理:3721RD
点击:
请问组合电路 MUX多路器如何描述?以下描述需要把输出(OUT)定义为reg,否则编译错,试过夏宇闻书上例子输出也必须定义成reg,
如果定义成reg,则就不是组合电路mux了。
请问如何定义组合电路mux?
module mux(EN ,IN0 ,IN1 ,IN2 ,IN3 ,SEL ,OUT );
input
EN ;
input
[7:0] IN0 ,IN1 ,IN2 ,IN3 ;
input
[1:0] SEL ;
output [7:0] OUT ;
reg
[7:0] OUT ;
always @(SEL
or EN
or IN0
or IN1
or IN2
or IN3 )
begin
if (EN
== 0) OUT
= {8{1'b0}};
else
case (SEL )
0 : OUT
= IN0 ;
1 : OUT
= IN1 ;
2 : OUT
= IN2 ;
3 : OUT
= IN3 ;
default : OUT
= {8{1'b0}};
endcase
end
endmodule
reg 和是否组合电路没有关系。
关键看always @里面是否有posedge/negedge, 没有的,就只是电平变化,出来的还是组合电路。例子里的那个就是个MUX
assign Y=S0?B:A;
语法书上已经有说过,信号类型,wire只综合成线型;reg则要根据输入与输出关系才确认是综合成寄存器还是线型,所以你的问题出在对语法上不是很精通。你的贴是对的。
mux本身没有时钟,就是一个纯粹的组合逻辑器件;
