私は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番目のエラーに問題が判明スクリプト; 'mem_char_disp'モジュールのテストベンチは動作していましたが、' mem_char_disp_lib'モジュールにはありませんでした。ありがとうございました! –