2017-01-27 27 views
0

define statements into a single定義文を複数連結してcase文で使用する方法を探しています。Verilog - 複数の定義を1つの定義に連結する

例として、ヘッダーファイルで定義されているメモリアドレスがあります。私はアドレスに応じてLUTRAMまたはブロックRAMに値を書き込むべきかどうかを決定するcase文を持っています。

私は、次の定義があります:実際の設計には、いくつかのアドレスとケースのこのタイプを持っている

case(sys_mgr_address) 
    `PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD : begin // Values for block RAM 
     ram_a_din    <= sys_mgr_write_data; 
     ram_a_addr    <= sys_mgr_address; 
     ram_a_wr_enable   <= 1'b1; 
     sys_mgr_write_ok  <= 1'b1; 
     update_available  <= 1'b1; 
    end 
endcase 

:私はこのようになりますcase文を持っている私のコード内

`define PWM_REPEAT_REG      (6'h10)   // Number of times to repeat a PWM Pulse 
`define PWM_WIDTH_REG      (6'h14)   // Pulse width in timebase counts 
`define PWM_PULSE_PERIOD     (6'h1c)   // PWM pulse period in timebase counts. 

をステートメントは数回繰り返されます。それぞれのために何度も、すべての定義を入力するのではなく、私は別のことを次のようになります定義、作成したいと思います:

`define PWM_MODULE_BLOCK_RAM_ADDRESSES ({`PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD}) 

    case(sys_mgr_address) 
    PWM_MODULE_BLOCK_RAM_ADDRESSES : begin // Values for block RAM 
     ram_a_din    <= sys_mgr_write_data; 
     ram_a_addr    <= sys_mgr_address; 
     ram_a_wr_enable   <= 1'b1; 
     sys_mgr_write_ok  <= 1'b1; 
     update_available  <= 1'b1; 
    end 
endcase 

それはかなりの中に数字を連結していますので、上記のコードは動作しません^^大きなベクトル。私はいくつかのバリエーションを試しました。連結括弧{}を使わずにテキストとして定義し、いくつかのバリエーションを ``(しかし、私は正確に何がそうしているのかは分かりません。

コンパイルする前に展開されたマクロを表示する方法はありますか?今は、トラブルシューティングを簡単にしていない私が試したほとんどのものに対して、私にエラーを与えています。

ありがとうございます!

答えて

1

あなたはあまりにも難しいと思っています。あなたがする必要があるのは、コンマのマクロを置くことだけです。

`define PWM_MODULE_BLOCK_RAM_ADDRESSES `PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD 

定義マクロは単純なテキストの拡張です。

+0

私はこれを実際に試しましたが、定義の周りに括弧を使用していました。そのため、PWM_MODULE_BLOCK_RAM_ADDRESSES( 'PWM_REPEAT_REG、' PWM_WIDTH_REG、 'PWM_PULSE_PERIOD')でした。かっこなしのあなたの方法は、なぜそうなるでしょうか? –

+0

括弧はcase文項目の正当な構文ではないためです。マクロは正当な構文に拡張する必要があります。 –

+0

ありがとう、それはすべてをクリア!今すぐ完璧に動作します。 –

関連する問題