какая разница в объявлении позиции переменной в xilinx?

Я начинаю писать Verilog через xilinx.

Я узнал, что объявления портов должны быть такими, как показано ниже

module mealy(
  nReset,
  clk,
  in,
  out
);

  input  nReset;
  input  clk;
  input  in;
  output out;
endmodule

Когда я использую xilinx, у него есть опция по умолчанию для установки переменной, это выглядит так:

module mealy(
  input  nReset,
  input  clk,
  input  in,
  output out
);

endmodule

Иногда, когда я использую второй способ, он генерирует ошибку. В чем разница между двумя стилями?


Второстепенная проблема: при объявлении выходов как regs первый стиль работает правильно, т.е.

module mealy(
  in,
  out
 );

  output out;
  input  in;
  reg    out;
endmodule

При использовании второго стиля генерируется ошибка о том, что вы не можете объявить дважды.

module mealy(
  input  in,
  output out
);
  reg out;
endmodule

В чем дело? Я только новичок и не знаю, почему я должен объявлять рег.


person dskim    schedule 29.09.2013    source источник


Ответы (1)


Verilog 1995, часто называемый verilog-95 (IEEE 1364-1995), используется, чтобы объявления портов были отделены от направлений и снова отделены от типов reg.

Начиная с Verilog 2001 (IEEE 1364-2001) можно использовать более компактную версию.

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

При использовании нового объявления порта, включая направление, вы также должны объявить тип, если не провод.

module mealy(
  input  in,              // Inputs are implicitly wires (reg would not make sense)
  output     [1:0] out_x, // 2 bit wire type as output
  output reg [1:0] out_y  // 2 Bit reg  type as output
);
endmodule

Следует искать разницу между типами reg и wire, в основном это оптимизация моделирования. При использовании SystemVerilog они оба могут быть заменены типом logic.

Wire управляются портами или операторами присваивания. reg назначаются внутри блоков always или initial. reg НЕ подразумевает триггер.

person Morgan    schedule 29.09.2013
comment
спасибо Моргану за помощь. Другой вопрос, почему это нельзя декларировать так же. Я добавил свой код для другого вопроса. пожалуйста, помогите еще один вопрос. - person dskim; 30.09.2013
comment
Вы задали два вопроса; вам нужно выдать сообщение об ошибке для обоих. Вторая ошибка проста; нельзя смешивать объявления старого и нового стиля. Первая ошибка не очевидна. Вы говорите «иногда» возникает ошибка. Когда? Что за ошибка? out провод? У вас где-то установлен default_nettype? - person EML; 03.10.2013
comment
@EML Я думаю, вы хотели прокомментировать вопрос, а не ответ. Главный вопрос заключался в том, «в чем разница», а не в том, как устранить ошибку, в этом отношении точная ошибка инструмента не так важна. - person Morgan; 04.10.2013
comment
По соглашению сначала указывается выход, затем входы, а затем управляющий вход. Однако для более сложной логики можно составить собственные правила порядка портов, чтобы наиболее логично представить схему. Всегда сравнивайте экземпляр с его объявлением. - person NoName; 27.06.2017