verilog с cocotb: назначить оператор

Мой код verilog является сумматором, который просто использует assign sum = a+b, Проблема в том, что при запуске его с помощью cocotb, sum остается неизвестным, хотя a а также b имеют действительные значения. когда я делаю sum Тип рег, это работает.

`timescale 1 ns / 1 ps

module adder(input [7:0] a,
        input [7:0] b,
        output reg  [7:0] sum,
        output [7:0] sum2);

    assign sum2=a+b;        //Trouble is here
    always@(a,b) begin
        sum=a+b;            //This works
    end

`ifdef COCOTB_SIM
    initial begin
        $dumpfile("adder.vcd");
        $dumpvars();
    end
`endif
endmodule

вывод gtkwave

1 ответ

Решение

Я считаю, что это на самом деле вызвано ошибкой в ​​Icarus, присутствующей в v0.9.7.

Если вы обновитесь до последней версии разработки, вы обнаружите, что непрерывное назначение отлично работает. Другие симуляторы также обрабатывают непрерывное назначение штрафа.

Если вы застряли на этой версии Icarus, вы можете обойти ее, поместив назначение в процесс, как вы обнаружили.

Другие вопросы по тегам