您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > ModelSim-Altera对Nios+II仿真
(原創)如何使用ModelSim-Altera對NiosII仿真?(SOC)(NiosII)(SOPCBuilder)(ModelSim)(DE2)Postedon2008-08-0216:14真OO无双阅读(2869)评论(16)编辑收藏网摘所属分类:SOPCBuilder,SOC,QuartusII,NiosII,ModelSimAbstract在剛學習NiosII時,每次在RunAsNiosIIHardware下方,看到RunAsNiosIIModelSim就覺得很好奇,NiosII明明是嵌入式系統,怎麼能用ModelSim仿真呢?Introduction使用環境:QuartusII7.2SP3+NiosIIEDS7.2SP3+ModelSim-Altera6.1g+DE2(CycloneIIEP2C35F627C6)用ModelSim對數字系統作仿真,這個大家都很熟悉,在(原創)如何解決在QuartusII無法使用ModelSim-Altera模擬的問題?(SOC)(QuartusII)(ModelSim)與(原創)如何做functionalsimulation?(SOC)(QuartusII)(ModelSim)都曾經討論過。NiosII雖然是個嵌入式系統,但畢竟基於FPGA技術,所以比ARM這類hardcore多了使用ModelSim仿真的方式。這也是Altera四大天王(QuartusII、NiosIIEDS、ModelSim-Altera、DSPBuilder)中的三大天王首次同台演出。Altera在SimulatingNiosIIEmbeddedProcessorDesigns文件中,有談到如何用ModelSim-Altera對NiosII作仿真,不過一如以往,Altera的文件要在DE2能動,還是得做不少修改,昨晚弄了一晚也弄不出來,在大家常去的AlteraForum、NiosForum與EDACN的討論中發現,真正做出來的人並不多。今天早上運氣好竟然成功了,趕快將心得記下來。QuartusII與SOPCBuilder部分Step1:建立一個最簡單的NiosII系統文件中的那個系統並不適合DE2,用了一定不能動,所以就自己建立一個最簡單的NiosII系統。為了要簡單,就先使用onchipmemory與ledg與button就好,其他IP都先別用,以減少失敗的變因。Step2:JTAGUART設定使用ModelSim-Altera仿真後,對於C的printf()要怎麼顯示呢?這要對JTAGUART做設定。Step3:對PIO做初始值設定Button本來是在runtime由user去決定,若你想在testbench就模擬user的按鍵,可在此設定,此步驟並非必須,只是demo可藉由此方式設定PIO的初始值。Step4:在SOPCBuilder設定ModelSim-Altera路徑Tools-Options-Category:HDLSimulatorStep5:產生能仿真的NiosII系統記得要將『Simulation.Createprojectsimulatorfiles』打勾。Step6:DE2_NIOS_ModelSim2.v/Verilog1/*2(C)OOMusou2008:QuartusII7.2SP36Description:DemohowtosimulateNiosIIbyModelSim-Altera7Release:08/02/20081.08*/910moduleDE2_NIOS_ModelSim2(11inputCLOCK_50,12input[3:0]KEY,13output[8:0]LEDG14);1516wireCPU_CLK;17wireCPU_RESET;1819Reset_Delaydelay1(20.iRST(KEY[0]),21.iCLK(CLOCK_50),22.oRESET(CPU_RESET)23);2425SDRAM_PLLPLL1(26.inclk0(CLOCK_50),27.c1(CPU_CLK)28);2930nios_iiu0(31.clk(CPU_CLK),32.reset_n(CPU_RESET),33.in_port_to_the_button_pio(KEY),34.out_port_from_the_ledg_pio(LEDG)35);3637endmodule25行SDRAM_PLLPLL1(.inclk0(CLOCK_50),.c1(CPU_CLK));別被SDRAM_PLL嚇到了,只是借用這個PLL產生100Mhz的clock給NiosII用,你也可以自己重新產生一個100Mhz的clock而不用SDRAM_PLL。QuartusII與SOPCBuilder部分已經完成,編譯後可燒進DE2。NiosIIEDS部分Step1:建立HelloWorldprojecthello_world.c/C1#includestdio.h2#includesystem.h3#includealtera_avalon_pio_regs.h45intmain(){6inti;7printf(HellofromNiosII!\n);89for(i=0;i256;i++)10IOWR_ALTERA_AVALON_PIO_DATA(LEDG_PIO_BASE,i);1112return0;13}LEDG_PIO_BASE這個巨集跟文件的不一樣,因為在SOPCBuilder中,我們已經使用了不同的名稱。Step2:修改SystemLibrary設定由於我們使用的onchipmemory只有40K,正常的NiosII是無法執行的,所以必須做些設定,讓codesize變小。在Altera原廠文件並沒有這一步,因為它用的是SDRAM夠大,根本不用考慮codesize的問題。選擇不支援C++會讓codesize小一點,另外要勾選ModelSimonly,nohardware。設定讓gcc編譯出的codesize小一點,若你對codesize最佳化有興趣,建議參考(原創)如何有效減少NiosIIEDS所編譯程式碼大小?(ICDesign)(NiosII)。Step3:編譯HelloWorld且RunAsNiosIIModelSim。NiosIIEDS部分已經完成,接著會出現ModelSim-Altera。ModelSim-Altera部分Step1:編譯VerilogQuartusII已經產生好ModelSim的macro,你只要打s就可重新編譯,這是最危險的時刻,若會失敗都是出在這個時候,我之前曾經使用友晶的NiosIIReferenceDesign來做仿真,但有些module無法編譯成功,目前原因還不明。若成功編譯,會有以下的結果:#ReadingC:/altera/72/modelsim_ae/tcl/vsim/pref.tcl#ReadingD:/0Clare/DE2/DE2_NIOS_ModelSim2/nios_ii_sim/modelsim.tcl#c:/altera/72/quartus//sopc_builder#c:/altera/72/quartus//bin/perl#Sopc_BuilderDirectory:c:/altera/72/quartus//sopc_builder#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@#@@setup_sim.do#@@#@@Definedaliases:#@@#@@s--Loadalldesign(HDL)files.#@@re-vlog/re-vcomandre-vsimthedesign.#@@#@@c--Re-compilememorycontents.#@@BuildsC-andassembly-languageprograms#@@(andassociatedsimulationdata-files#@@suchasUARTsimulationstrings)for#@@refreshingmemorycontents.#@@DoesNOTre-generatehardware(HDL)files#@@ONLYWORKSWITHLEGACYSDK(NottheNiosIDE)#@@#@@w--Sets-upwaveformsforthisdesign#@@EachSOPC-Buildercomponentmayhave#@@signals'marked'fordisplayduring#@@simulation.Thiscommandopensawave-#@@windowcontainingallsuchsignals.#@@#@@l--Sets-uplistwaveformsforthisdesign#@@EachSOPC-Buildercomponentmayhave#@@signals'marked'forlistingduring#@@simulation.Thiscommandopensalist-#@@windowcontainingallsuchsignals.#@@#@@jtag_uart_drive--displayinteractiveinputwindowforjtag_uart#@@#@@h--printthismessage#@@#@@#OpenFilenios_ii_sim.mpf#Loadingprojectnios_ii_sims#ModelTechnologyModelSimALTERAvlog6.1gCompiler2006.08Aug122006#--Compilingmodulebutton_pio_s1_arbitrator#--Compilingmodulecpu_jtag_debug_module_arbitrator#--Compilingmodulecpu_data_master_arbitrator#--Compilingmodulecpu_instruction_master_arbitrator#--Compilingmodulejtag_uart_avalon_jtag_slave_arbitrator#--Compilingmoduleledg_pio_s1_arbitrator#--Compilingmoduleonchip_mem_s1_arbitrator#--Compilingmodulesysid_control_slave_arbitrator#--Compilingmodulenios_ii_reset_clk_domain_synch_module#--Compilingmodulenios_ii#--Compilingmodulelcell#--CompilingmoduleALTERA_MF_MEMORY_INITIALIZATION#--CompilingmoduleALTERA_MF_HINT_EVALUATION#--CompilingmoduleALTERA_DEVICE_FAMILIES#--Compilingmoduledffp#--Compilingmodulepll_iobuf#--Compilingmodulestx_m_cntr#--Compilingmodulestx_n_cntr#--Compilingmodulestx_scale_cntr#--CompilingmoduleMF_pll_reg#--CompilingmoduleMF_stratix_pll#--Compilingmodulearm_m_cntr#--Compilingmodulearm_n_cntr#--Compilingmodulearm
本文标题:ModelSim-Altera对Nios+II仿真
链接地址:https://www.777doc.com/doc-4706650 .html