Verilog 没有给出预期的结果

Posted

技术标签:

【中文标题】Verilog 没有给出预期的结果【英文标题】:Verilog did not give the expected result 【发布时间】:2020-04-24 12:15:05 【问题描述】:

我编写了这个 Verilog 代码。内部模块是一个 8 位多路复用器,顶部模块用于测试多路复用器。它应该显示11110000,但每次都显示xxxxxxxx。我该如何解决这个问题?

module testbench;

reg CLK;
test mytest(CLK);
initial begin
CLK = 1'b0;
#10
CLK = 1'b1;
end
endmodule

module test(CLK);
input CLK;
reg [7:0] in0,in1;
reg sel;
wire [7:0] out;

mux myux(in0,in1,sel,out);

always @(posedge CLK) begin
    sel = 1'b0;
    in0 = 8'b11110000;
    $display("%b",out);
    end
endmodule

这是mux 模块:

module mux(in0,in1,sel,out);
    input sel;
    input [7:0] in1,in0;
    output [7:0] out;
    reg out;

    always @(in0,in1,sel) begin

    if(sel == 1'b0) begin

        out = in0;

    end
    else begin

        out = in1;

    end
    end

endmodule

【问题讨论】:

【参考方案1】:

问题是您没有运行足够长的模拟时间。你只运行了一个时钟周期。这是更改testbench 模块以运行多个时钟周期的一种方法:

module testbench;

reg CLK;
test mytest(CLK);

initial begin
    CLK = 1'b0;
    forever #10 CLK =~CLK;
end

initial #1000 $finish;

endmodule

我现在看到这样的输出:

xxxxxxxx
11110000
11110000
11110000
11110000

另外,我的代码出现编译错误。在您的 mux 模块中,您应该更改:

reg out;

到:

reg [7:0] out;

【讨论】:

以上是关于Verilog 没有给出预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

verilog的timescale问题请教

verilog,为啥设计组合电路时不能引入反馈

基于Verilog的CRC-CCITT校验

我想用verilog做一个单周期的方波 分别是20和10 下面是我写的代码 编译的时候没有问题 但是仿真的结果却不

Verilog中的浮点乘法问题

verilog中`timescale后面的单位最小可以定义为多少?和啥有关?