Verilog не дал ожидаемого результата - PullRequest
0 голосов
/ 24 апреля 2020

Я написал этот код 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 Ответ

2 голосов
/ 24 апреля 2020

Проблема в том, что вы не запустили симуляцию достаточно долго. Вы запускали его только за один такт. Вот один из способов изменить ваш 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;
...