FC2カウンター FPGAの部屋 2010年04月13日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ISimでOVLのVHDL, Verilog混在シミュレーション(OVLライブラリのコンパイルと登録)

OVLのVHDL, Verilog混在シミュレーションはフリーのModelSimでは不可能だった。フリーのシミュレータではISimがVHDL, Verilog混在シミュレーションに対応している。そこで、OVLのVHDL, Verilog混在シミュレーションをISimでやってみることにした。また、フリーのシミュレータでは、ISimでしかSpartan-6のMCBやPCIeなどをシミュレーションすることが出来ないはずだ。
ISimの事を勉強するにあたっては、ISE11.5のHelpのContentsタブのデザインのシミュレーションの下のISimヘルプを参照した。
まずは、”フォルダのファイル名をリストにして、コマンドバッチファイルを作る”の方法で、コンパイル用のバッチファイルを作り、OVLライブラリをコンパイルして登録する。

1. OVL Verilogのライブラリをコンパイルするバッチファイル (OVL_Verilog_Lib_Comp.bat) を実行して、OVL Verilogのコンパイルを行う。
下に、OVL_Verilog_Lib_Comp.batのリストを示す。

vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_always.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_always_on_edge.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_arbiter.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_bits.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_change.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_code_distance.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_cycle_sequence.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_decrement.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_delta.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_even_parity.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_fifo.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_fifo_index.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_frame.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_handshake.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_hold_value.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_implication.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_increment.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_memory_async.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_memory_sync.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_multiport_fifo.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_mutex.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_never.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_never_unknown.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_never_unknown_async.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_next.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_next_state.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_no_contention.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_no_overflow.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_no_transition.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_no_underflow.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_odd_parity.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_one_cold.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_one_hot.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_proposition.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_quiescent_state.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_range.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_reg_loaded.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_req_ack_unique.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_req_requires.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_stack.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_time.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_transition.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_unchange.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_valid_id.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_value.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_width.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_window.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_win_change.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_win_unchange.v
vlogcomp -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i H:\HDL\OVL\std_ovl -work accellera_ovl_vlog H:\HDL\OVL\std_ovl\ovl_zero_one_hot.v


実行後に、カレントフォルダにisimフォルダが生成され、その下にaccellera_ovl_vlogフォルダが生成された。accellera_ovl_vlogフォルダの中身を下に示す。
ISim_OVL_1_100413.png

2. OVL VHDLのライブラリをコンパイルするバッチファイル (OVL_VHDL_Lib_Comp.bat) を実行して、OVL VHDLのコンパイルを行う。
下に、OVL_VHDL_Lib_Comp.batのリストを示す。

vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\std_ovl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\std_ovl_procs.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\std_ovl_components_vlog.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\std_ovl_clock_gating.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\std_ovl_reset_gating.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_always.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_cycle_sequence.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_implication.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_never.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_never_unknown.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_never_unknown_async.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_next.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_one_hot.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_range.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\std_ovl\ovl_zero_one_hot.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_always_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_cycle_sequence_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_implication_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_never_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_never_unknown_async_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_never_unknown_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_next_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_one_hot_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_range_rtl.vhd
vhpcomp -work accellera_ovl_vhdl H:\HDL\OVL\vhdl93\ovl_zero_one_hot_rtl.vhd


実行後に、isimフォルダの下に、accellera_ovl_vhdlフォルダが生成された。accellera_ovl_vhdlフォルダの中身を下に示す。
ISim_OVL_2_100413.png

3. コンパイルした2つのライブラリを登録する。まずはライブラリのコピーから。私のパソコンで言うと、H:\HDL\Xilinx\11.1\ISE\verilog\hdp\nt フォルダに accellera_ovl_vlog ファルダをコピーする。

4. H:\HDL\Xilinx\11.1\ISE\vhdl\hdp\nt フォルダに accellera_ovl_vhdl フォルダをコピーする。

5. H:\HDL\Xilinx\11.1\ISE\vhdl\hdp\nt に xilinxsim.ini があるので、これに、accellera_ovl_vlogとaccellera_ovl_vhdl のエントリを追加する。

accellera_ovl_vlog=$XILINX/verilog/hdp/nt/accellera_ovl_vlog
accellera_ovl_vhdl=$XILINX/vhdl/hdp/nt/accellera_ovl_vhdl


これでライブラリの準備は終了のはず。。。
  1. 2010年04月13日 05:19 |
  2. ISim
  3. | トラックバック:0
  4. | コメント:0