Я ищу логический ИЛИ шины.Verilog: Большой автобус ИЛИ синтез
Рабочий код:
parameter Width = 8;
wire my_bus [Width-1:0];
wire bus_or = (my_bus[0] || my_bus[1] || ... || my_bus[Width-1])
Это работает отлично, но совершенно не подходит для больших автобусов (т.е. 64 бит)
Я видел: (от here)
wire bus_or = |my_bus;
Однако это просто жалуется на ошибку: Незаконный операнд унарного оператора '|' и Незаконная правая сторона непрерывного назначения.
Интересно синтаксис:
wire bus_or = |{my_bus[0], my_bus[1], ..., my_bus[Width-1]}
работает отлично, несмотря на конкатенацию создания шины, с оригинальным не-разделенным объектом автобус, чтобы начать с ...
Мы используем генерировать блоки для создания различных сигналов, проводов, регистров и т. д. с целью расширения расширяемого параметризованного кода. Кажется, позор, если синтаксис для шины ИЛИ настолько подвержен ошибкам.
То, что я бы хотел, было так просто, как wire bus_or = | my_bus;
Извините. Очень простой ответ !!!
Обозначение wire bus_or = |my_bus;
прекрасно работает, когда автобус объявлен как вектор, НО НЕ когда его массив: см. here.