<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > Qsys與uC/OS學(xué)習筆記2:系統仿真

Qsys與uC/OS學(xué)習筆記2:系統仿真

作者: 時(shí)間:2015-06-11 來(lái)源:網(wǎng)絡(luò ) 收藏

  仿真在FPGA設計過(guò)程中舉足輕重,在板級調試前若不好好花功夫做一些前期的驗證和測試工作,后期肯定要不斷的返工甚至推倒重來(lái),這是FPGA設計的迭代特性所決定的。因此,在設計的前期做足了仿真測試工作,雖然不能完全避免后期問(wèn)題和錯誤的發(fā)生,卻能夠大大減少后期調試和排錯的工作量。

本文引用地址:http://dyxdggzs.com/article/275553.htm

  邏輯設計中需要做仿真,是因為邏輯設計大都是設計者原型開(kāi)發(fā)的,不做仿真的話(huà)設計者肯定心里也沒(méi)底。而用搭建的系統多是由已經(jīng)成熟驗證過(guò)的IP核組成的,還需要仿真否?這是個(gè)仁者見(jiàn)仁智者見(jiàn)智的問(wèn)題,特權同學(xué)也無(wú)意深入其中不能自拔。過(guò)去用SOPC Builder時(shí)還確實(shí)想動(dòng)手做做這類(lèi)帶CPU的系統級仿真,只可惜倒騰半天不是缺這個(gè)就是少那個(gè),大都無(wú)功而返。這回上了,而且ModelSim-Altera對于Quatus II的支持也是做得越來(lái)越“體貼”了,所以今個(gè)再做了一些嘗試,果然成功了,原廠(chǎng)把工具的使用做得越來(lái)越傻瓜便利的同時(shí),工程師們從中大大獲益。

  如圖1所示,首先在Generations的Simulation選項中做好設置。

  

 

  圖1

  Simulation設置選項的具體含義如圖2所示。

  

 

  圖2

  因為都是用Verilog,所以simulation model和testbench simulation model我們都選擇Verilog,話(huà)說(shuō)Altera其實(shí)主打的是Verilog語(yǔ)言,所以各種功能對Verilog的支持都是非常到位的,VHDL就不一定了。也用過(guò)Xilinx的東西,則正好相反。也不能談?wù)撌雰?yōu)孰劣,也是習慣使然。

  Standard和Simple的模型主要差別在于后者只是簡(jiǎn)單的在testbench里產(chǎn)生clock和reset信號,而前者則會(huì )對所有export信號產(chǎn)生激勵或引出便于監視觀(guān)察。

  確定完成Simulation的設置后就可以點(diǎn)擊左下角的Generate重新生成系統。

  系統生成完畢,到“工程目錄myqsystestbenchmyqsys_tbsimulation”這個(gè)路徑下有測試腳本的頂層文件myqsys_tb.v,打開(kāi)后代碼如下:

  `timescale 1 ps / 1 ps

  module myqsys_tb (

  );

  wire myqsys_inst_clk_bfm_clk_clk; // myqsys_inst_clk_bfm:clk -> [myqsys_inst:clk_clk, myqsys_inst_reset_bfm:clk]

  wire myqsys_inst_reset_bfm_reset_reset; // myqsys_inst_reset_bfm:reset -> myqsys_inst:reset_reset_n

  wire [7:0] myqsys_inst_led_pio_external_connection_export; // myqsys_inst:led_pio_external_connection_export -> myqsys_inst_led_pio_external_connection_bfm:sig_export

  myqsys myqsys_inst (

  .clk_clk (myqsys_inst_clk_bfm_clk_clk), // clk.clk

  .reset_reset_n (myqsys_inst_reset_bfm_reset_reset), // reset.reset_n

  .led_pio_external_connection_export (myqsys_inst_led_pio_external_connection_export) // led_pio_external_connection.export

  );

  altera_avalon_clock_source #(

  .CLOCK_RATE (50)

  ) myqsys_inst_clk_bfm (

  .clk (myqsys_inst_clk_bfm_clk_clk) // clk.clk

  );

  altera_avalon_reset_source #(

  .ASSERT_HIGH_RESET (0),

  .INITIAL_RESET_CYCLES (50)

  ) myqsys_inst_reset_bfm (

  .reset (myqsys_inst_reset_bfm_reset_reset), // reset.reset_n

  .clk (myqsys_inst_clk_bfm_clk_clk) // clk.clk

  );

  altera_conduit_bfm myqsys_inst_led_pio_external_connection_bfm (

  .sig_export (myqsys_inst_led_pio_external_connection_export) // conduit.export

  );

  endmodule

  該代碼中首先例化了被測試系統myqsys,將其3個(gè)export信號引出。然后分別針對這3個(gè)export信號產(chǎn)生相應的激勵和響應,即altera_avalon_clock_source用于產(chǎn)生clock,altera_avalon_reset_source用于產(chǎn)生reset信號,altera_conduit_bfm則用于觀(guān)察led_pio輸出。這三個(gè)模塊的詳細代碼都可以在同目錄的submodules子文件夾下找到。

  接下來(lái),我們需要打開(kāi)EDS中的軟件工程并對其進(jìn)行仿真。我們接著(zhù)使用上一個(gè)筆記中創(chuàng )建的countbinary_prj工程進(jìn)行仿真,首先我們需要到BSP Editor里面去重新generate,因為有改動(dòng)并重新生成了。接著(zhù)修改其main函數如下:

  int main(void)

  {

  alt_u16 cnt;

  for(cnt=0;cnt<256;cnt++)

  {

  IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,cnt);

  }

  while(1);

  }

  目前工程代碼執行的意圖是:在上電初始化完成后,led_pio會(huì )從0連續的遞增一直到255,然后停止。保存修改的軟件代碼并重新編譯工程,然后在應用工程上點(diǎn)擊右鍵值并選擇Rus asàNiso II ModelSim,如圖3所示。

  

 

  圖3

  第一次運行通常會(huì )彈出如圖4所示的窗口,需要對仿真選項做一些配置。選擇選擇仿真的工程名(Project name)、仿真的elf可執行文件(Project ELF file name)、ModelSim軟件的安裝路徑(ModelSim path)和Qsys測試腳本封裝描述文件(Qsys Testbench Simulation Package Descriptor File name)存儲位置。設計好后點(diǎn)擊Run即啟動(dòng)ModelSim進(jìn)行仿真。

  

 

  圖4

  彈出ModelSim-Altera后,我們可以講頂層文件的3個(gè)export信號添加的Wave窗口中,然后Run起來(lái),看看仿真時(shí)間有2-3秒后我們可以回放仿真波形(具體的時(shí)間需要看PC的狀況,特權同學(xué)的Pentium E5800跑了應該有半分多鐘),如圖5、圖6和圖7所示。

  如圖5,剛上電0ns開(kāi)始,reset信號有一段時(shí)間的低脈沖,大約50個(gè)clk周期,正如我們的testbench中所設計的。

  

 

  圖5

  如圖6所示,在仿真進(jìn)行到大約1.3s時(shí)刻,led_pio信號有一段變化的波形,初始0值在經(jīng)過(guò)這段變化波形后最終變?yōu)?55,這也是我們軟件代碼里面所設置的最終值。

  

 

  圖6

  再來(lái)看圖7,我們將led_pio的變化段波形放大,果然是我們軟件編程的遞增的值,一直從0遞增到255為止。

  

 

  圖7

  仿真的流程基本就是這樣,很easy,我們只要動(dòng)動(dòng)指尖就可以完成,當然了,如果要做很多個(gè)性化的細致的仿真驗證,那么在testbench里面我們倒是可以動(dòng)些手腳,輸出結果也不光只是看看波形而已。



關(guān)鍵詞: Qsys uC/OS

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>