2016-07-03 135 views
1

VDHLとVerilogをミキシングする際に、大文字と小文字の区別が問題になりました。VHDLでVerilogモジュールを使用しているときの大文字と小文字の区別

パラメータ「APB_ADDR」は大文字で、ワイヤ「apb_addr」は小文字で記述します。 Verilogは大文字と小文字を区別するため、2つの式が異なる場合があります。

module verilog_module #(
... 
parameter APB_ADDR    = 32, 
... 
) (
... 
input wire [APB_ADDR-1:0] apb_addr, 
input wire     apb_sel, 
input wire     apb_enable, 
input wire     apb_write 
.... 
); 

今私はVDHLでモジュールをインスタンス化したい:

inst0: entity work.verilog_module 
GENERIC MAP (
    APB_ADDR => APB_ADDR_WIDTH 
) 
PORT MAP(
    ... 
    apb_addr => apb_addr, 
    ... 
); 

合成は失敗します。一般的な "apb_addr"は知られていません。 VHDLは大文字と小文字を区別しません。

一般的なAPB_ADDRにはどうすればアクセスできますか?私はVerilogで書かれたIPコアを変更したくありません。

+1

名前の衝突です。 IPコアの汎用ポートまたはポートの名前を変更します。アドレスバスはアドレスバスなので、その名前が適切です。しかし、ジェネリックは幅なので、その名前は不適切で混乱します。だから、名前をAPB_ADDR_WIDTHに変更します。 –

+0

したがって、IPコアを変更する以外の方法はありませんか? – Timm

+0

総称を無視することができます。私が見る限り、それは冗長です。その値を 'apb_addr'ポート属性から導出し、あなたが一人で放置したい部分を書いた人がジェネリックとバスを正しくステップしてくれることを願ってください。 –

答えて

5

IPコアを変更できない場合は、コアをインスタンス化し、APB_ADDRパラメータを設定し、apb_addrと他の信号をコアとVHDLエンティティ間で渡すラッパー(Verilog)を作成することもできます。

+0

"素晴らしい"解決策ではありませんが、うまくいくはずです。ありがとう。 – Timm

+0

同意。エレガントではありませんが、ラッパーは、混在HDLデザインでは事実です。 http://stackoverflow.com/questions/36423219/defining-parameters-from-command-line-in-systemverilog-simulationのように、コマンドラインからパラメータを定義してみることもできますが、HDLのすべてを移植性と不一致の問題を避けてください。 – Teajay

関連する問題