как определить вывод m * n в verilog

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

module test(a,b,c);
input a,b;
output [7:0] c [3:0];
endmodule

вместо

module test(a,b,c1,c2,c3,c4);
input a,b;
output [7:0] c1,c2,c3,c4;
endmodule

и для первого способа, как я могу вызвать c[i]


person user1643699    schedule 05.11.2012    source источник


Ответы (1)


... Да, вы можете использовать 2D-массив на выходе, как в вашем первом примере. Ознакомьтесь с разделом 5 этой статьи самого Стюарта Сазерленда, это должно придать вам уверенности. Раздел называется Module Ports.

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.sutherland-hdl.com%2Fpapers%2F2006-SNUG-Europe_SystemVerilog_synchronous_paper.pdf&ei=7KmYUNKPN6GyigKDnoHwDA&usg=AFQjCNGmr3flHrARC-w40xveo8zitcdjfg&cad=rja

Кроме того, развивая свой первый пример, вы можете определить свой модуль для ясности следующим образом:

module lshift(clk, reset, a, c);
input wire clk, reset;
input wire [7:0] a;
output reg [7:0] c [0:3]; // <-- defining the unpacked dimension as [0:3] for clarity

always@(posedge clk) begin
   if(reset) begin
       c[0] <= 8'd0;
       ...
       c[3] <= 8'd0;
   end
   else begin
       c[0] <= a;
       c[1] <= c[0];
       c[2] <= c[1];
       c[3] <= c[2];
   end
end
endmodule

... и теперь вы можете нарезать свой массив. c[0], c[1] .. c[3] каждый представляет байт, а c[0][3:0] будет означать младший полубайт первого байта.

... Надеюсь это поможет!

person Subbdue    schedule 06.11.2012
comment
спасибо, я попробовал, но это дало мне, что 'c' не было объявлено; я не знаю почему? - person user1643699; 06.11.2012
comment
ваш симулятор просто может не поддерживать многомерные порты - person Marty; 06.11.2012
comment
@user1643699 user1643699 - Я попробовал этот фрагмент кода с Synopsys VCS, и он отлично работает. Можно синтезировать и симулировать. - person Subbdue; 06.11.2012