Verilog:多维注册输出

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

我有一些具有多维输出的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 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