如何在verilog中定义m*n输出

如何在verilog中定义m*n输出,verilog,system-verilog,Verilog,System 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]。

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

。。。是的,你可以在输出端使用2D数组,就像你的第一个例子一样。看看斯图尔特·萨瑟兰自己写的这篇文章的第五部分,这应该会给你一些信心。本节标题为
模块端口

此外,在阐述第一个示例时,为了清晰起见,您可以这样定义模块:

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
模块升档(时钟、复位、a、c);
输入线时钟,复位;
输入线[7:0]a;

输出寄存器[7:0]c[0:3];//谢谢,我试过了,但它给我的“c”还没有宣布;我不知道为什么?你的模拟器可能不支持多维数据ports@user1643699-我用Synopsys VCS尝试了这段代码,效果很好。。合成able和模拟able。