Передача массивов в модули Verilog - PullRequest
1 голос
/ 12 июля 2011

У меня есть 2D-массив для передачи в модуль. Я сплющил его в 1D-массив и хочу отправить его в какой-то модуль для обработки. Для этого я объявил 32-разрядный провод шириной и попытался передать значения 32-разрядного.через него регистрируется в других модулях. Это дало мне ошибку «Процедурное присвоение незарегистрированным не разрешено».Я хотел знать, есть ли другой способ сделать это?И как я могу исправить ошибку?


@ Марти Спасибо еще раз. Это работает. Мне нужно вычислить среднее значение для 1000 выборочных значений с плавающей запятой. У меня есть 4 отдельных модуля для арифметики сложения с плавающей запятой. Я хочу отправить каждое из этих значений по одномупо одному модулю. Для этого я использую цикл for. Я могу отправить его для

Float_Add dummyinstance(fpvalue[k]);

Где k - некоторая константа.

Но не для

for(..)
  for(..)
     Mean[i]=Float_Add dummyinstance(fpvalue[i][j])

Как я могу это сделать?

1 Ответ

2 голосов
/ 12 июля 2011

Похоже, вы пытаетесь присвоить wire в блоке always или initial.Используйте assign, если вы хотите изменить значение на wire.Если вы предпочитаете использовать процедурный блок (initial или always), вам нужно изменить тип порта на reg.т.е.:

module processor (
    input wire [31:0] flattened_bus_i,
    output wire [31:0] flattened_bus_w,
    output reg  [31:0] flattened_bus_r
);

    initial begin 
       flattened_bus_r = flattened_bus_i + 32'd1; 
    end

    assign flattened_bus_w = flattened_bus_i + 32'd1;

endmodule

В SystemVerilog вы должны иметь возможность иметь 2D-массивы в качестве портов.

...