Verilog Can';I don’我的脑袋绕不动试验台
我做测试台有困难。我的学校已经进入了第四季度,但我觉得我错过了一些基础知识 在这里,我试图制作一个2×4的解码器,但我想在verilog中模拟它Verilog Can';I don’我的脑袋绕不动试验台,verilog,Verilog,我做测试台有困难。我的学校已经进入了第四季度,但我觉得我错过了一些基础知识 在这里,我试图制作一个2×4的解码器,但我想在verilog中模拟它 module decoder2to4(x, enable, y); input [1:0] x; //this is my decoder input input enable; output [3:0] y; reg [3:0] y; always @(x, enable ) // begin if(enable==0) /
module decoder2to4(x, enable, y);
input [1:0] x; //this is my decoder input
input enable;
output [3:0] y;
reg [3:0] y;
always @(x, enable ) //
begin
if(enable==0) //if enable isn't on, all outputs WON'T OUTPUT correct and give us 1111
y = 4'b1111;
else //if enable is high...
if (x == 2'b00) //...then we check our inputs and give corresponding outputs
y = 4'b0001;
if (x == 2'b01)
y = 4'b0010;
if (x == 2'b10)
y = 4'b0100;
if (x == 2'b11);
y = 4'b1000;
end
endmodule
这是我的模拟文件~我写对了吗
module testbench_2to4decoder;
reg [1:0] x; //use reg not wire to assign values
wire [3:0] y; //for the outputs
2to4Decoder uut(x,y);
initial begin
x = 2'b00;
enable = 1'b0; //keep it off
#10 //wait some time
enable = 1'b1; //turn enable on
#10; //wait some time
x = 2'b01; //input 01
#10; //wait some time
x = 2'b10; //input 10
#10; //then
x = 2'b11; //input 11
#10;
enable = 1'b0; //turn it off
#10;
end
endmodule
您没有正确地实例化设计。首先,
启用
未连接<代码>启用甚至没有在测试台中声明
此外,模块名称错误。而不是以下内容:
2to4Decoder uut(x,y);
你必须具备:
decoder2to4 uut(x,enable, y);
鼓励使用重置
逻辑设置输出的默认值。但因为这是一个组合电路,所以这里不是强制性的
可以使用for
或repeat
循环和其中的增量变量x
来提供输入。但这只是为了提高编码效率
其余的事情似乎都很好。请参阅链接。啊,我真傻,我给模块命名的方式与我实例化模块的方式不同。谢谢你的关注。我已经做了一些改变,但仍然不起作用。我还试图在测试夹具中添加一个输入启用,但它不会模拟;reg[1:0]x//使用reg not wire为导线[3:0]y指定值//对于输出解码器2至4 uut(x,y,启用);初始开始x=2'b00;启用=1'b0//保持关闭#10//等待一段时间启用=1'b1//启用#10//等待一段时间x=2'b01//输入01#10//等待一段时间x=2'b10//输入10#10//那么x=2'b11//输入11#10;启用=1'b0//关掉它#10;end EndModule我模拟了您的代码,我添加了启用信号,请参阅链接。在模块
解码器2to4
中,最好使用自动灵敏度列表,而不是手动,即始终@*
而不是始终@(x,启用)
。case语句提供更干净的代码,而不是级联if语句。