0

我正在为左移寄存器编写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]

4

1 回答 1

1

...是的,您可以在输出中非常多地使用 2D 数组,就像在您的第一个示例中一样。查看 Stuart Sutherland 本人撰写的本文的第 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_synthesis_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]的低半字节。

... 希望这可以帮助!

于 2012-11-06T06:30:44.290 回答