Вы объявили a
дважды, один раз как 4-битный выход (предполагаемый тип провода), а один раз как внутреннюю однобитную регистрацию. То, как вы это сделали, не соответствует стандарту IEEE, потому что оно не соответствует стилю ANSI или не ANSI. Некоторые симуляторы могут разрешить то, что вы сделали, и работать правильно, другие выдают ошибки компиляции (строгое соответствие IEEE), а некоторые путаются. Я предполагаю, что последнее произошло с вашим симулятором; возможно, в вашем журнале компиляции было предупреждающее сообщение, которое вы просмотрел.
Избавьтесь от строки reg a;
и измените output [3:0] a
на output reg [3:0] a
, чтобы сделать ее совместимой с заголовком в стиле ANSI. В стиле списка портов ANSI направление, тип, ширина и имя портов объявляются для одного и того же имени.
module Counter(
input ck,
output reg [3:0] a
);
Альтернативой является стиль, отличный от ANSI (не рекомендуется), который требует одну строку для объявления порядка портов, другую для направления и размера и необязательную дополнительную строку, чтобы сделать его reg. Надлежащий заголовок в стиле, отличном от ANSI, ниже. Заголовок в стиле, отличном от ANSI, требуется для IEEE1364-1995. ANSI был добавлен и стал рекомендуемым стилем, начиная с IEEE1364-2001, с поддержкой не-ANSI, чтобы можно было продолжать использовать устаревший код.
module Counter(ck, a);
input ck;
output [3:0] a;
reg [3:0] a;
Другое замечание: флопам следует назначать неблокирующие (<=
) назначения, а не блокирующие (=
) назначения. Как минимум измените a = i;
на a <= i;
, чтобы на практике использовать правильный стиль кодирования, который позволит избежать условий гонки в планировщике Verilog.
person
Greg
schedule
17.10.2016
$display
на$monitor
- person Karan Shah   schedule 17.10.2016