Verilog:多维注册输出
我有一些具有多维输出的Verilog模块(到我的DE1 SoC的7段LED面板)。我想注册输出。为了测试它,我给其中一个LED数字一些伪代码。它的RTL模拟通过了,它甚至由Quartus编译,但实际上它不工作Verilog:多维注册输出,verilog,fpga,system-verilog,intel-fpga,Verilog,Fpga,System Verilog,Intel Fpga,我有一些具有多维输出的Verilog模块(到我的DE1 SoC的7段LED面板)。我想注册输出。为了测试它,我给其中一个LED数字一些伪代码。它的RTL模拟通过了,它甚至由Quartus编译,但实际上它不工作 module Top ( input CLK50, output [6:0] HEX[5:0] ); reg[6:0] hex_regs[5:0]; //assign HEX[0][6:0] = 7'b010_1010; //if use assign, it assi
module Top
(
input CLK50,
output [6:0] HEX[5:0]
);
reg[6:0] hex_regs[5:0];
//assign HEX[0][6:0] = 7'b010_1010; //if use assign, it assigns value to output, but I want it registered
initial
begin
hex_regs[5][6:0] = 7'b101_0101;
end
assign HEX = hex_regs;
endmodule
您不能告诉我,如何正确执行此操作以及我的错误在哪里吗?正如您所说,发布的代码模拟良好(打开),但在ANSI样式端口列表之后支持多维端口,因此我建议将
reg
放在端口列表中
module Top
(
input CLK50,
output reg [6:0] HEX [5:0]
);
这是一个相对较新的功能,虽然受模拟器支持,但可能不是合成工具的一部分。我认为它是在2009年SystemVerilog LRM中引入的
至少确保您的工具集支持此版本的语言,并通过文件扩展名.sv
或命令行-sv
标志将其解释为系统verilog文件
我以前试过这个方法,当时Synthesis工具解包和重新打包阵列的方式出现了问题,所有的位都以错误的方式连接
上面提到的一个解决方法是在港口的每一侧对其进行包装和拆包
module top (in, out);
input [31:0] in;
wire [7:0] array [0:3];
output [31:0] out;
assign {array[3],array[2],array[1],array[0]} = in;
assign out = {array[3],array[2],array[1],array[0]};
endmodule
正如您所说,发布的代码模拟良好(on),但在ANSI样式的端口列表之后支持多维端口,因此我建议将
reg
放在端口列表中
module Top
(
input CLK50,
output reg [6:0] HEX [5:0]
);
这是一个相对较新的功能,虽然受模拟器支持,但可能不是合成工具的一部分。我认为它是在2009年SystemVerilog LRM中引入的
至少确保您的工具集支持此版本的语言,并通过文件扩展名.sv
或命令行-sv
标志将其解释为系统verilog文件
我以前试过这个方法,当时Synthesis工具解包和重新打包阵列的方式出现了问题,所有的位都以错误的方式连接
上面提到的一个解决方法是在港口的每一侧对其进行包装和拆包
module top (in, out);
input [31:0] in;
wire [7:0] array [0:3];
output [31:0] out;
assign {array[3],array[2],array[1],array[0]} = in;
assign out = {array[3],array[2],array[1],array[0]};
endmodule
正如您所说,发布的代码模拟良好(on),但在ANSI样式的端口列表之后支持多维端口,因此我建议将
reg
放在端口列表中
module Top
(
input CLK50,
output reg [6:0] HEX [5:0]
);
这是一个相对较新的功能,虽然受模拟器支持,但可能不是合成工具的一部分。我认为它是在2009年SystemVerilog LRM中引入的
至少确保您的工具集支持此版本的语言,并通过文件扩展名.sv
或命令行-sv
标志将其解释为系统verilog文件
我以前试过这个方法,当时Synthesis工具解包和重新打包阵列的方式出现了问题,所有的位都以错误的方式连接
上面提到的一个解决方法是在港口的每一侧对其进行包装和拆包
module top (in, out);
input [31:0] in;
wire [7:0] array [0:3];
output [31:0] out;
assign {array[3],array[2],array[1],array[0]} = in;
assign out = {array[3],array[2],array[1],array[0]};
endmodule
正如您所说,发布的代码模拟良好(on),但在ANSI样式的端口列表之后支持多维端口,因此我建议将
reg
放在端口列表中
module Top
(
input CLK50,
output reg [6:0] HEX [5:0]
);
这是一个相对较新的功能,虽然受模拟器支持,但可能不是合成工具的一部分。我认为它是在2009年SystemVerilog LRM中引入的
至少确保您的工具集支持此版本的语言,并通过文件扩展名.sv
或命令行-sv
标志将其解释为系统verilog文件
我以前试过这个方法,当时Synthesis工具解包和重新打包阵列的方式出现了问题,所有的位都以错误的方式连接
上面提到的一个解决方法是在港口的每一侧对其进行包装和拆包
module top (in, out);
input [31:0] in;
wire [7:0] array [0:3];
output [31:0] out;
assign {array[3],array[2],array[1],array[0]} = in;
assign out = {array[3],array[2],array[1],array[0]};
endmodule