2013-01-02 30 views
3

,我很容易做到這一點:途徑在VHDL初始化常數值可合成2D陣列以Verilog

constant cmdbytes  : bytearray(0 to Total) := (x"05", x"00", x...}; 

欲合成的常數,使得FPGA開始時,這個陣列具有我提供的數據。這些寄存器連接到VCC或接地表示1或0.然後我可以使用它們來產生波形。另外我想在Verilog世界中有2D字節數組。

回答

6

如果你只是使用數組來抽出一個值,那麼使用case語句怎麼樣?誠然,這是一種囉嗦的做法,但你總是可以寫一個腳本來爲你寫RTL。

reg [7:0] value; 
reg [7:0] i; 

always @(posedge clk or negedge rst_n) begin 
    if(!rst_n) 
     i <= 8'd0; 
    else 
     i <= i + 1; 
end 

always @(*) begin 
    case(i) 
     8'h00: value = 8'd0; 
     8'h01: value = 8'd34; 
     ... 
    endcase 
endcase 

另一種方法是使用initial語句。就我所知,FPGA綜合工具將允許您按照以下方式爲陣列設置初始值。再一次,編寫這個腳本可能是要走的路。

reg [0:35][7:0] my_array; 

initial begin 
    my_array[0] = 8'd45; 
    my_array[1] = 8'd26; 
    ... 
end 

如果你的FGPA的綜合工具支持SystemVerilog的部分,你就可以初始化數組,像這樣:

reg [0:34][7:0] my_array = '{ 8'd90, 8'd34, ... }; // note the '{ 
0

Verilog 2005不允許數組初始化。儘管您的FPGA供應商應該有辦法生成ROM。

-2

工作的呢?

reg [31:0] array2d[3:0] 
.... 
array2d[3:0] = {{32'd0}}; 

array2d[3:0] = {32'd0, 32'd0, 32'd0, 32'd0} 
+0

對不起它是{4 {32'd0}} – grevanth