2012-01-09 21 views
3

ファイルからROMをロードする必要があります。 Quartusは.mifのファイルを直接使用することができ、シミュレータ用には、(高速で汚れた).mifファイルパーサをtextioの助けを借りて作成しました。シンセサイザツール(私の場合はQuartus)を検出し、シンセサイザツールでコンパイルされていない場合にのみ、textioファイルローダプロセスを生成する方法はありますか?コンパイラの検出方法

the source question

+0

多くの感謝!要約すると:私はプラグマ/合成translate_offと - synthesis/pragma translate_onをコードの周りに追加しました。そのonluはSimulatorで使用する必要があります。 http://code.google.com/p/pakorobiol/source/browse/trunk/c25Board.vhd – nulleight

答えて

3

あなたのコードからROMを推測しようとしていますか? LPM機能を使用している場合、すべてが「うまくいく」べきです。

私はQuartusとModelSimのROMを問題なく使用します。 MegaWizardプラグインを使用してROM用のカスタムVHDLファイルを作成し、適切な初期化ファイルに指示するか、altsyncramコンポーネントを直接インスタンス化し、init_fileジェネリックをインクルードします。

通常と同じようにコンパイルまたはシミュレートします。 ModelSim(アルテラ・バージョンまたはスタンドアロン・バージョン)を使用して初期化されたROMでシミュレーションを実行するのに問題はなく、* .mifまたは* .hexファイルを読み取るための初期化コードを書く必要もありませんでした。参考のため

は、ここでのModelSim(INIT_FILEジェネリックに注意してください)に適切にシミュレートし、私のコードのビットから直接インスタンスROMメガファンクションです:

-- Sine lookup table 
sine_lut : altsyncram 
generic map (
    clock_enable_input_a => "BYPASS", 
    clock_enable_output_a => "BYPASS", 
    init_file    => "./video/sine_rom-512x8.mif", 
    intended_device_family => "Arria GX ", 
    lpm_hint    => "ENABLE_RUNTIME_MOD=NO", 
    lpm_type    => "altsyncram", 
    numwords_a    => 512, 
    operation_mode   => "ROM", 
    outdata_aclr_a   => "NONE", 
    outdata_reg_a   => "UNREGISTERED", 
    widthad_a    => 9, 
    width_a     => 8, 
    width_byteena_a   => 1 
) 
port map (
    -- Read port 
    clock0  => clk, 
    address_a => sine_addr, 
    q_a   => sine_do 
); 

あなたが本当に対をシミュレートするときに別の何かをする必要がある場合それを合成するにはいくつかの方法があります。あなたはインターネット検索を通じてこれらのディレクティブの実例をたくさん見つけることができるはず、と私は含まれてきた

--synthesis translate-off 
<code for simulation only> 
--synthesis translate-on 

http://quartushelp.altera.com/11.1/master.htm#mergedProjects/hdl/vhdl/vhdl_file_dir_translate.htm?GSA_pos=5&WT.oss_r=1&WT.oss=--%20synthesis%20translate_off

:シンプルなものについては、次のディレクティブのようなものを使用することができます以下の1つの例です(実際のハードウェアで実行している場合とシミュレーションした場合のパワーオンリセットは短い)。一部の人々は、合成/シミュレーションの前に予備のビルドステップとしてCプリプロセッサ、M4マクロ言語、または類似のものを使用します。私はMakefileとスクリプトをFileName.sim.vhdl(シミュレーション用)をFileName.vhdl(合成用)に変換し、いくつかのテキストユーティリティで処理して、ルールに基づいてさまざまなコードブロックをコメント/非コメントにします。両方のバージョンを1つのファイルにまとめました(VHDLで使用するために強化されたCプリプロセッサのようなものを考えてください)。あなたのワークフローやチームのダイナミックス/文化に合った何かを行うだけです。

4

特定の合成ツールでのみ使用できるプラグマを使用して、合成ツールを検出できます。たとえば、次のように書くことができます:あなたは、この使用して、アルテラのQuartusを合成する場合にのみ

constant isQuartus : std_logic := '1' 
-- altera translate_off 
and '0' 
-- altera translate_on 
; 

この定数は'1'になります。

様々なVHDLのメタコメントプラグマの時についての詳細:助けをhttp://www.sigasi.com/content/list-known-vhdl-metacomment-pragmas

+0

ありがとう、それは私が必要とするものです! – nulleight

+0

@nulleightあなたはウェルメイです。これがあなたの問題を解決すれば、あなたは答えを "受け入れる"ことができれば素晴らしいでしょう。 – Philippe