Verilog Can';I don’我的脑袋绕不动试验台

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) /

我做测试台有困难。我的学校已经进入了第四季度,但我觉得我错过了一些基础知识

在这里,我试图制作一个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)   //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语句。