module mux4_1(out,in0,in1,in2,in3,sel);
output out;
input in0,in1,in2,in3;
input[1:0] sel;
reg out;
always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表
case(sel)
2'b00: out=in0;
2'b01: out=in1;
2'b10: out=in2;
2'b11: out=in3;
default: out=2'bx;
endcase
endmodule
对于简单的Verilog描述的4选1多路选择器(无延迟)测试的疑问
建模问题,你的模型是(S1,S0)00选择D0,01选择D2,10选择D1, 11选择D3。电路看图
还有说一点我的意见(可以无视)学数字设计不要用门级建模!!!!毫无意义!!别跟我提考试!!verilog入门推荐你看《verilog HDL高级数字设计》
#15 d=1010, s[1]=1, s[0]=0, out=0
(s1,s2)为[1,0]时,out应该为1啊
我开始还真没发现这个问题,这应该是#15时文字仿真输出的是上升沿以前的值,看我的波形:
仿真在#15时会有个上升沿,所以你让它在#15时输出的值只能由仿真器自身的设计机制决定。尽量别在上升沿的时候用文字输出
verilog四选一数据选择器用条件生成语句怎么写
input [1: 0] sel;
input in1, in2, in3, in4;
output out;
assign out = sel == 2‘b00 ? in1 : sel == 2'b01 ? in2 : sel == 2'b10 ? in3 : sel == 2'b11 ? in4 : 2'bxx;
用verilog实现8位2选1的选择器
这个很简单。
module mux(
input ctrl,
input [7:0] x,
input [7:0] y,
output [7:0] f
);
assign f = ctrl? y:x;
endmodule
不用谢,呵呵。
关于verilog2选一多路选择器的问题
在端口定义处 加上 reg [3:0]r;试试
而且你这assign和always模块干的是同一件事儿吧?
试过了,说r定义过了不行
module mux(a,b,s,r);
//因为你在声明端口的时候就已经定义了输入输出,后面有重新写了,不晓得是不是这里重复了
input [3:0]a;
input [3:0]b,
input s,
output[3:0]r;
reg [3:0]r;//我不是很习惯像你那么写,我定义端口一般是这样的格式,不晓得有没有帮助
assign r=(s?a:b);
always @(a or b or s)
begin : mux
case({s})
1'b0 : r<=a;
1'b1 : r<=b;
default : r<=a;
endcase
end
endmodule
转载请注明出处365教育网 » 怎样用Verilog实现4选1数据选择器