つづきです。
ModelSimを使うようにQuartusに設定します。
こうします。
QuartusでTools-->Run Simulation Tool-->RTL Simulationと選ぶと、
ModelSimが立ち上がる。
File-->New-->Source-->VHDL
で、テストベンチをつくる。
LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY TB IS END TB; ARCHITECTURE SIM OF TB IS component FPGA IS PORT ( NSEND : IN STD_LOGIC_VECTOR(2 DOWNTO 0); NCLKDIV : IN STD_LOGIC_VECTOR(2 DOWNTO 0); BUSY : OUT STD_LOGIC; INIT : IN STD_LOGIC; WDATA : IN STD_LOGIC_VECTOR(7 DOWNTO 0); RDATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); EN : IN STD_LOGIC; SCK : OUT STD_LOGIC; MOSI : OUT STD_LOGIC; MISO : IN STD_LOGIC; clk48 : IN STD_LOGIC ); end component FPGA; SIGNAL NSEND : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL NCLKDIV : STD_LOGIC_VECTOR(2 DOWNTO 0); signal BUSY : std_logic; signal INIT : std_logic; signal WDATA : std_logic_vector(7 downto 0); signal RDATA : std_logic_vector(7 downto 0); signal EN : std_logic; signal SCK : std_logic; signal MOSI : std_logic; signal MISO : std_logic; signal CLK48 : std_logic; CONSTANT STEP48 : TIME := 20.83 ns; BEGIN FPGA_inst : COMPONENT FPGA PORT MAP( NSEND=>NSEND, NCLKDIV=>NCLKDIV, BUSY=>BUSY, INIT=>INIT, WDATA=>WDATA, RDATA=>RDATA, EN=>EN, SCK=>SCK, MOSI=>MOSI, MISO=>MISO, clk48=>CLK48 ); MISO<=MOSI; PROCESS BEGIN CLK48 <= '1'; WAIT FOR STEP48/2; CLK48 <= '0'; WAIT FOR STEP48/2; END PROCESS; PROCESS BEGIN wait for STEP48*128; NSEND<="111"; NCLKDIV<="001"; WDATA<="01111010"; EN<='1'; INIT<='1'; wait for 20 ns; INIT<='0'; wait for 20 ns; INIT<='1'; wait for 25 us; EN<='0'; wait for 1 us; NSEND<="010"; NCLKDIV<="000"; WDATA<="01011111"; EN<='1'; INIT<='1'; wait for 20 ns; INIT<='0'; wait for 20 ns; INIT<='1'; wait for 15 us; EN<='0'; wait for 1 us; NSEND<="111"; NCLKDIV<="000"; WDATA<="01011010"; EN<='1'; INIT<='1'; wait for 20 ns; INIT<='0'; wait for 20 ns; INIT<='1'; wait for 20 us; EN<='0'; wait for 1 us; assert (false) report "Simulation End!" severity failure; END PROCESS; END;
まぁ、こんなもんで。
入力したので、名前を付けて保存。
たいへん安易な名前で保存。
doファイルが勝手にできているので開く。
doファイルがあるので、開く。
こんな感じで、もともとのプロジェクトについて論理合成するようにできている。
transcript on
if {[file exists rtl_work]} {
vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work
vlog -vlog01compat -work work +incdir+C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/db {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/db/pll_altpll.v}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/MySPI/writer.vhdl}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/MySPI/reader.vhdl}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/MySPI/myspi.vhdl}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/MySPI/clkgen.vhdl}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/FPGA.vhd}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/PLL.vhd}
vcom -93 -work work {C:/Users/<ユーザ名>/Documents/Quartus/work_Prime18.1/niosii_swd_study5_logicsim/FPGA/simulation/modelsim/tb.vhd}
vsim -L altera_mf_ver -c work.tb
add wave -hex sim:/tb/clk48
log -r *
run -all
赤い部分を追加して上書き保存。
そして、do実行
シーンとなっちゃうけど、この辺にちゃんとやってるぜ的な表示が出ている。
終わった。シミュレーションを止めるためにテストベンチにseverity failureでassertしているので、Failureとかいうドキッとする表現が出るけど、VHDLではこれしか止める方法がないらしいのでしょうがないらしい。Verilogだと$stopとかいう命令で止まるらしい。
で、波形ウィンドウがでているので、表示する。
波形の横軸を調整したりするには、こちら。
テストベンチの中のインスタンスを選んで信号をずりずりっとやると波形を追加することができる。
まぁうまくいっている。
add wave -hex sim:/tb/FPGA_inst/clk100
add wave -hex sim:/tb/FPGA_inst/clk2
add wave -hex sim:/tb/FPGA_inst/NSEND
add wave -hex sim:/tb/FPGA_inst/NCLKDIV
add wave -hex sim:/tb/FPGA_inst/WDATA
add wave -hex sim:/tb/FPGA_inst/RDATA
add wave -hex sim:/tb/FPGA_inst/EN
add wave -hex sim:/tb/FPGA_inst/INIT
add wave -hex sim:/tb/FPGA_inst/SCK
add wave -hex sim:/tb/FPGA_inst/MOSI
これらをdoファイルに追記しておくと後でテストベンチ修正してもう一度シミュレーションするときにラク。
GHDL+GtkWaveがどんだけラクなのかがわかる長い道のりでした。Quartusでやる意義は、、、Quartusで論理合成が通ることの確証が取れること、、、
ここまで結局モノを扱わずに机上だけでした。モノでやってこそエンジニアなのでそろそろ実際のFPGAでやります。
コメントをお書きください