,我很容易做到這一點:途徑在VHDL初始化常數值可合成2D陣列以Verilog
constant cmdbytes : bytearray(0 to Total) := (x"05", x"00", x...};
欲合成的常數,使得FPGA開始時,這個陣列具有我提供的數據。這些寄存器連接到VCC或接地表示1或0.然後我可以使用它們來產生波形。另外我想在Verilog世界中有2D字節數組。
,我很容易做到這一點:途徑在VHDL初始化常數值可合成2D陣列以Verilog
constant cmdbytes : bytearray(0 to Total) := (x"05", x"00", x...};
欲合成的常數,使得FPGA開始時,這個陣列具有我提供的數據。這些寄存器連接到VCC或接地表示1或0.然後我可以使用它們來產生波形。另外我想在Verilog世界中有2D字節數組。
如果你只是使用數組來抽出一個值,那麼使用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 '{
Verilog 2005不允許數組初始化。儘管您的FPGA供應商應該有辦法生成ROM。
工作的呢?
reg [31:0] array2d[3:0]
....
array2d[3:0] = {{32'd0}};
或
array2d[3:0] = {32'd0, 32'd0, 32'd0, 32'd0}
對不起它是{4 {32'd0}} – grevanth