7

VHDLでは、これを簡単に行うことができます。

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

FPGAの起動時に、この配列に指定したデータが含まれるように、合成可能な定数が必要です。これらのレジスタは、1または0を表すためにVCCまたはグランドに配線されています。次に、それらを使用して波形を生成できます。また、Verilogの世界では3Dである2Dバイト配列が欲しいです。

4

4 に答える 4

10

配列を使用して一度に1つの値を引き出すだけの場合は、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 '{
于 2013-01-03T10:15:25.030 に答える
0
module test (

   input [7:0]   p1_sa,            // i
   input [7:0]   p1_sb,            // i
   output [7:0]   p3,            // o
   output [7:0]   p3b            // o
);

logic [7:0] array2d [7:0] = {99,124,119,123,242,107,111,197};

   assign p3    = array2d[p1_sa];
   assign p3b   = array2d[p1_sb];

endmodule

上記のシステムVerilogコードを試しましたが、modelsimとVivadoで正常に動作しています。

于 2020-11-24T06:21:07.623 に答える
0

caseステートメントアプローチの代わりに、を使用しfunctionて値にアクセスすることもできます。

8ビット定数を含むサイズ4の「配列」の例:

function [7:0] cmdbytes;
        input    [1:0] index;
        reg      [7:0] t[0:3];
    begin
        {   
             t[0],t[1],t[2],t[3]
        } = {   
             8'h05, 8'h00, 8'h5b, 8'h45
        };

        cmdbytes = t[index];
    end
endfunction

次のように定数にアクセスできます。

wire [7:0] value0;
wire [7:0] value1;
wire [7:0] value2;
wire [7:0] value3;

assign value0 = cmdbytes(2'd0);
assign value1 = cmdbytes(2'd1);
assign value2 = cmdbytes(2'd2);
assign value3 = cmdbytes(2'd3);
于 2021-05-31T12:05:35.610 に答える
-1

Verilog 2005では、アレイの初期化は許可されていません。ただし、FPGAベンダーにはROMを生成する手段が必要です。

于 2013-01-03T06:00:18.330 に答える