Altifigence Academy

20 / 37 · Теория

generate: построение статических схем циклами

Используйте genvar и generate-if для именованной иерархии и проверьте размещение каналов.

Цикл создаёт экземпляры, а не такты

genvar/generate повторяет статическую структуру до выполнения. Цикл always_comb задаёт процедурный расчёт, аппаратуру которого определяет синтез. Ни один автоматически не означает итерацию за такт; последовательная обработка требует состояния и контроллера. packed-шина делится на LANES слов шириной W бит, с чётностью каждого. Оба параметра положительные.

SystemVerilog
module lane_parity #(
  parameter integer W = 8,
  parameter integer LANES = 3
) (
  input  logic [W*LANES-1:0] data,
  output logic [LANES-1:0] parity
);
  genvar lane;
  generate
    for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
      wire [W-1:0] word_data;
      assign word_data = data[lane*W +: W];
      assign parity[lane] = ^word_data;
    end
  endgenerate
endmodule

data[base +: W] выбирает W бит от base в сторону возрастающих индексов; W постоянен. W=8, LANES=3 соединяет 7:0 с каналом 0,15:8 с 1,23:16 с 2. g_lane создаёт устойчивую иерархию, например g_lane[1].word_data.

Читайте порядок каналов

data=24'h03_01_80 содержит 80,01,03 начиная с канала 0. Чётности 1,1,0 дают parity[2:0]=011. Левый байт — канал 2. Разделяйте индекс, отображение и передачу. Все считают одновременно без регистровой задержки. Больше LANES увеличивает логику, не такты; нагрузку, трассировку и физические временные параметры проверяют отдельно.

generate-if выбирает фиксированную структуру

Условие постоянно, например параметр включения регистра. Динамический сигнал относится к комбинационному или тактовому блоку. Добавление регистра меняет достоверность, поэтому измените контракт и проверяющий блок. Не отключайте шину размером ноль:[−1:0] не является безопасным объектом нулевой ширины. Отклоняйте конфигурацию или сохраняйте определённый интерфейс в статической ветви.

Практика: обнаружьте перестановку каналов

Проверьте пример, затем включайте один бит в каждом канале: меняется только соответствующая чётность. Две единицы дают чётность 0. Одинаковые данные всех каналов скрывают перепутанные срезы. Выделяйте каналы численно в эталоне и считайте единицы. Проверьте W=1,8 и LANES=1,3 для минимумов, байтов и иерархии. Затем зарегистрируйте чётность и задайте сброс, enable и сравнение с текущей шиной или данными предыдущего фронта.

Выбор действует в этом браузере. Его можно изменить внизу страницы.