2016-10-27 18 views
0

私はmoduleを持っています。異なる文字のビットマップが格納されています。これは、マトリックス上にテキストを表示するために使用する予定です。現在、ビットマップにはメモリ初期化ファイルが格納されており、このファイルはparameterとして渡されます(これはQuartusおよびModelSimで動作することを確認しています)。パラメータの配列を使用してモジュールを生成する

すべての文字のルックアップテーブルを実際に作成するには、すべてのビットマップのインスタンス化を持つ別のmoduleを作成し、文字コードに基づいて正しいものを選択する必要がありました。これらのビットマップインスタンシエーションはgenerateブロックで作成され、配列から正しいファイル名が使用されます。しかし、ModelSimはこれを好まない。

module mem_char_disp_lib(
    output logic pixel, 
    input logic [4:0] x, 
    input logic [5:0] y, 
    input logic [6:0] code, 
    input logic clk 
); 
    localparam CHAR_NUM = 26; 
    logic [CHAR_NUM-1:0] alphabet; 

    const var [CHAR_NUM-1:0] BITMAPS = { 
     "/mem/char/A.hex", 
     "/mem/char/B.hex", 
     "/mem/char/C.hex", 
     // ... a lot more declarations here... 
     "/mem/char/X.hex", 
     "/mem/char/Y.hex", 
     "/mem/char/Z.hex" 
    }; 

    genvar i; 
    generate 
     for (i=0; i<CHAR_NUM; i=i+1) begin : mem_char_disp_blocks 
      mem_char_disp #(.BITMAP(BITMAPS[i])) block (
       .pixel(alphabet[i]), 
       .x, .y, .clk, 
       .code(i), 
       .data(1'b0), 
       .write_en(1'b0) 
      ); 
     end 
    endgenerate 

    always_comb 
     pixel = alphabet[code]; 

endmodule 

ModelSimのは私が与えているエラー:
The expression for a parameter actual associated with the parameter name ('BITMAP') for the module instance ('block') must be constant.forループ内の行を参照)

私はこれが動作しない理由はわからないが、次のように私のコードです。ハードウェアレベルでは、私はモジュールのコピーをたくさん作成し、コンパイル時に知られている定数パラメータでそれぞれを微調整するようです。私が紛失している基本的な構文がいくつかありますか?


編集:私はまた、ランタイムエラーを与えると思われる次のコードを試みた:

for (i=0; i<CHAR_NUM; i=i+1) begin : mem_char_disp_blocks 
    parameter [CHAR_NUM-1:0] BITMAPS = { 
     "/mem/char/A.hex", 
     // more elements... 
     "/mem/char/Z.hex" 
    }; 
    mem_char_disp #(.BITMAP(BITMAPS[i])) block (
     .pixel(alphabet[i]), 
     .x, .y, .clk, 
     .code(i), 
     .data(1'b0), 
     .write_en(1'b0)); 
end 

エラーがModule parameter 'BITMAP' not found for override.(生成された各モジュールのためにこれらのエラーのいずれかです。 CHAR_NUM合計)これは私には分かりません。単一のインスタンスを直接インスタンス化すると、うまく動作します(例:mem_char_disp #(.BITMAP("/mem/char/A.hex") block /* ... */)。

答えて

2

const変数は定数ではありません。変数が割り当てられると、実行時に初期化される追記型変数です。アップデートで見つけたときに別のパラメータに割り当てるには、parameterまたはlocalparamが必要です。あなたはまた、配列の次元を修正する必要が

parameter bit [1:15*8] BITMAPS[26] = { 
     "/mem/char/A.hex", // 15 8-bit chars 
     // more elements... 
     "/mem/char/Z.hex" // 26 elements 
    }; 

モジュールの宣言を見ることなく、あなたの最後のエラーであなたを助けることができないmem_char_disp

+0

それは私のコンパイルをした2番目のエラーに問題が判明スクリプト; 'mem_char_disp'モジュールのテストベンチは動作していましたが、' mem_char_disp_lib'モジュールにはありませんでした。ありがとうございました! –

関連する問題