2014-10-11 5 views
2

Я хотел определить большое количество шин с шиной шириной 32 бит.Как определить N шину шириной 32 бит

, например

input [31:0] a0, a1, a2, .... aN; 
input [31:0] b0, b1, b2, .... bN; 
output [31:0] c0, c1, c2, .... cN; 

c0 = a0 + b0; 
c1 = a1 + b1; 
. 
. 
cN = aN + bN; 

как я могу реализовать этот код итерации?

+0

Как насчет использования массивов и их сглаживания? http://stackoverflow.com/questions/16369698/how-to-pass-array-structure-between-two-verilog-modules –

ответ

1

Verilog Generates предназначены для решения этой проблемы. Было бы проще, если бы вы могли использовать распакованные массивы для портов.

заявление должно содержаться в initial или always, подразумевает выход является использованием always @(posedge clk) триггера для использования комбинаторной схемы always @*.

module example (
    parameter N = 10 
)(
input    clk, 
input  [31:0] a [0:N], 
input  [31:0] b [0:N], 
output reg [31:0] c [0:N] 
); 

genvar i; 
generate 
for(i=0; i<=N; i++) begin 
    always @(posedge clk) begin 
     c[i] <= a[i] + b[i]; 
    end 
end 
endgenerate 

endmodule 

Генерации хороши, когда вам нужно параметризовать экземпляр модуля, приведенное выше можно переписать с помощью простого цикла.

integer i; 

always @(posedge clk) begin 
    for(i=0; i<=N; i++) begin 
    c[i] <= a[i] + b[i]; 
    end 
end 

Для синтезируемого кода цикл for должен быть подвержен статической развертке.

Смежные вопросы