2015-11-08 7 views
2

мой код Verilog - сумматор, который просто использует assign sum = a+b. Проблема заключается в том, что при запуске с использованием cocotbsum остается неизвестным, хотя a и b имеют допустимые значения. когда я делаю sum a reg type, он работает.verilog с cocotb: присваивать оператор

`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 
    [email protected](a,b) begin 
     sum=a+b;   //This works 
    end 

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

gtkwave output

ответ

4

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

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

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

+0

Вы правы. Это ошибка. –

+2

Я воспринимаю это изображение формы волны, видимо, показывающее окна Gtkwave, которые вы указали на использование Icarus? – user1155120

+1

@ user1155120 GTKWave - это подделка, но некоторые люди также попали в эту проблему. К сожалению, большинство репозиториев для популярных дистрибутивов Linux по-прежнему предоставляют Icarus v0.9.7 – Chiggs

 Смежные вопросы

  • Нет связанных вопросов^_^