16 marca 2016

ModelSim – symulacja Altera Megacore FIR II

Na początku trudne może być przebrnięcie przez wszystkie konfiguracje IP Core’ów. W tym tutorialu zaprezentuję jak zacząć z symulacją IP Core od Altery.

Poradnik wiąże się i jest niejako rozwinięciem tutoriala „Quartus II i ModelSim Tutorial”.

Aby rozpocząć należy otworzyć przykładowy pusty projekt. Następnie przejść do generowania IP Core:

fir2_select

Możemy sobie zdefiniować wiele IP Core-ów. Z tego, w oknie “Save IP Variation” wpisujemy nazwę identyfikującą konkretny filtr – w tym przypadku „fir2_test”. Po kliknięciu OK następuje uruchomienie kreatora, w którym wypełniamy swoje wartości i kończymy przyciskiem „Finish”.

fir2_wizard_empty

Po zakończeniu kreatora pojawia się okno z pytaniem czy dodać plik Quartus IP do projektu – akceptujemy

fir2_ip_question

Aby dodać moduł do projektu klikamy w oknie schematu projektu prawy przycisk myszy, wybieramy Insert->symbol a następnie Project->fir2_test:

fir2_symbol

Pozostaje wytworzyć przykładowe połączenia na diagramie, wykonać syntezę “Analysis & Synthesis” oraz szablon testbencha (jak to zrobić było poruszone w „Quartus II i ModelSim -tutorial”)

fir2_diag

Utworzony testbench jest w katalogu “simulation/modelsim”.

W tej chwili okazało się, że nie ma sensu zostawać przy starej wersji Quartusa – 14.1. Problemem było brak licencji Modelsima na symulację Veriloga i VHDLa jednocześnie – co wymagane było przez symulację filtra. Zainstalowano najnowszą wersję: Quartus Prime 15.1 Lite wraz z Modelsim 10.4b.

Kontynuując, dodajemy testbench do opcji NativeLink (Settings-Simulation-Compile test bench) a następnie uruchamiamy symulację z NativeLink (Tools-Run Simulation Tool-RTL).

Modelsim uruchamia się i jednocześnie wyskakuje błąd:

fir2_modelsim_error1

Jest on związany ze skryptem „.do”, który został wygenerowany przez Quartusa dla Modelsima. Należy usunąć linijkę, która chce skompilować testbench w tym skrypcie. Znajduje się on w katalogu simulation/modelsim, nazwany tak jak napisane w błędzie „test_fir_ii_megacore_run_msim_rtl_verilog.do”:

transcript on
if ![file isdirectory test_fir_ii_megacore_iputf_libs] {
	file mkdir test_fir_ii_megacore_iputf_libs
}

if {[file exists rtl_work]} {
	vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work

###### Libraries for IPUTF cores 
###### End libraries for IPUTF cores 
###### MIF file copy and HDL compilation commands for IPUTF cores 


vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/dspba_library_package.vhd"                      
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/dspba_library.vhd"                              
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_math_pkg_hpfir.vhd"                   
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_lib_pkg_hpfir.vhd"                    
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_avalon_streaming_controller_hpfir.vhd"
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_avalon_streaming_sink_hpfir.vhd"      
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_avalon_streaming_source_hpfir.vhd"    
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/auk_dspip_roundsat_hpfir.vhd"                   
vlog "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/altera_avalon_sc_fifo.v"                        
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/fir2_test_rtl.vhd"                              
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/fir2_test_ast.vhd"                              
vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/fir2_test.vhd"                                  
#vcom "C:/dev/projects/test_fir_ii_megacore/fir2_test_sim/fir2_test_tb.vhd"                               


vlog -vlog01compat -work work +incdir+C:/dev/projects/test_fir_ii_megacore/simulation/modelsim {C:/dev/projects/test_fir_ii_megacore/simulation/modelsim/test_fir_ii_megacore_top.vt}
vlog -vlog01compat -work work +incdir+C:/dev/projects/test_fir_ii_megacore/src {C:/dev/projects/test_fir_ii_megacore/src/test_fir_ii_megacore_top.v}

vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneive_ver -L rtl_work -L work -voptargs="+acc"  test_fir_ii_megacore_top_vlg_tst

add wave *
view structure
view signals
run -all

W zaznaczonej linii zakomentowana została linia z kompilacją skryptu testbench.
Pozostał jeszcze jeden błąd – projekt główny jest w wersji diagramu „.bdf” co powoduje błąd:
fir2_modelsim_error2
Należy wygenerować plik Verilog z diagramu – w Quartusie przejść do schematu głównego i wybrać „File-Create/Update-Create HDL design from current file”. Wygenerowany plik trzeba dodać do skryptu, co zaznaczono drugą linią w powyższym skrypcie.

Niestety, przy każdym uruchomieniu Modelsima z poziomu Quartusa plik skryptu „.do” zostaje nadpisany – są dwie możliwości obejścia problemu:

  1. edytować plik „fir2_test.spd” – odpowiedzialny za generowanie skryptów symulacji.1 Należy w nim usunąć linijkę:
    <file path="fir2_test_sim/fir2_test_tb.vhd" type="VHDL" />

    a dodać linijkę z modułem głównym:

    <file path="src/test_fir_ii_megacore_top.v" type="VERILOG" />

    Uwaga – jeśli wcześniej, w opcjach gdzie dodawaliśmy testbench w Quartusie nie ustawiliśmy po jakim czasie ma się skończyć symulacja będzie ona generowana w nieskończoność

  2. na początku wygenerować go z Quartusa, nanieść poprawki i później uruchamiać tylko z samego Modelsima (np. poleceniem „do C:/dev/projects/test_fir_ii_megacore/src/testbench/testbench_file.tcl” – uwaga na odwrotne niż w Windowsie ukośniki!) – to samo co powyżej, ale ręcznie.

 

Pliki projektów

Projekt przed utworzeniem IP Core

Projekt po utworzeniu IP Core’a

  1. Quartus II Handbook vol.1 Design and Synthesis, str. 21 „Files generated for Altera IP Core”

TrackBack

TrackBack URL dla tej wiadomości:
https://blog.kkthx.pl/2016/03/modelsim-symulacja-altera-megacore-fir-ii/trackback/

Napisz komentarz