2015-01-06 73 views
0

我有多維輸出一些的Verilog模塊(以7段LED我DE1的SoC的圖)。我想要輸出註冊。爲了測試它,我給了一些LED數字的虛擬代碼。它的RTL仿真通過了OK,它甚至被Quartus編譯,但實際上它不起作用。的Verilog:多維寄存輸出

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 

難道你不能告訴我,如何正確地做到這一點,我的錯誤在哪裏?

回答

3

正如你所說的發佈代碼模擬罰款(在EDA Playground),但ANSI風格的端口列表後支持多維端口,所以我建議將reg放在端口列表中。

module Top 
(
    input   CLK50, 
    output reg [6:0] HEX [5:0] 
); 

它是一種相對較新的功能,並同時由模擬器支持可能不是綜合工具的一部分。我認爲它是在2009年SystemVerilog LRM中推出的。

至少要確保您的工具集支持此版本的語言,並且它正在將它們解釋爲系統verilog文件,文件擴展名爲.sv或命令行-sv標誌。

我之前和當時已經嘗試了本跑進問題與sysnthesis工具進行拆包和重新包裝的陣列方式,位全部得到周圍連接走錯了路。在EDA board周圍提到

一個工作涉及打包和拆包他們口的兩側。

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