如何在verilog中定义m*n输出
我正在为左移位寄存器编写verilog代码,它在子寄存器中的每次移位后存储其值。我可以像这样将输出寄存器定义为数组吗?提供的代码只是一个简单的示例,用于说明概念,而不是我的代码如何在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]。
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。