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
1 ответ
Решение
Я считаю, что это на самом деле вызвано ошибкой в Icarus, присутствующей в v0.9.7.
Если вы обновитесь до последней версии разработки, вы обнаружите, что непрерывное назначение отлично работает. Другие симуляторы также обрабатывают непрерывное назначение штрафа.
Если вы застряли на этой версии Icarus, вы можете обойти ее, поместив назначение в процесс, как вы обнаружили.