您的位置 首页 技术

Qsys与uC/OS学习笔记2:体系仿真

仿真在FPGA设计过程中举足轻重,在板级调试前若不好好花功夫做一些前期的验证和测试工作,后期肯定要不断的返工甚至推倒重来,这是FPGA设计的迭代特性所决定的。因此,在设计的前期做足了仿真测试工作,

  仿真在FPGA规划过程中无足轻重,在板级调试前若不好好花功夫做一些前期的验证和测验作业,后期必定要不断的返工乃至推倒重来,这是FPGA规划的迭代特性所决议的。因而,在规划的前期做足了仿真测验作业,尽管不能完全避免后期问题和过错的发生,却能够大大削减后期调试和排错的作业量。

  逻辑规划中需求做仿真,是由于逻辑规划大都是规划者原型开发的,不做仿真的话规划者必定心里也没底。而用Qsys建立的体系多是由现已老练验证过的IP核组成的,还需求仿真否?这是个仁者见仁智者见智的问题,特权同学也无意深化其间不能自拔。曩昔用SOPC Builder时还的确想着手做做这类带CPU的体系级仿真,只可惜倒腾半响不是缺这个便是少那个,大都无功而返。这回上了Qsys,并且ModelSim-Altera关于Quatus II的支撑也是做得越来越“关心”了,所以今个再做了一些测验,公然成功了,原厂把东西的运用做得越来越傻瓜便当的一起,工程师们从中大大获益。

  如图1所示,首要在Generations的Simulation选项中做好设置。

  

 

  图1

  Simulation设置选项的详细意义如图2所示。

  

 

  图2

  由于都是用Verilog,所以simulation model和testbench simulation model咱们都挑选Verilog,话说Altera其实主打的是Verilog言语,所以各种功能对Verilog的支撑都是十分到位的,VHDL就不必定了。也用过Xilinx的东西,则正好相反。也不能议论孰优孰劣,也是习气使然。

  Standard和Simple的模型首要不同在于后者仅仅简略的在testbench里发生clock和reset信号,而前者则会对一切export信号发生鼓励或引出便于监督调查。

  确认完结Simulation的设置后就能够点击左下角的Generate从头生成体系。

  体系生成结束,到“工程目录\myqsys\testbench\myqsys_tb\simulation”这个途径下有测验脚本的顶层文件myqsys_tb.v,翻开后代码如下:

  `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个export信号引出。然后别离针对这3个export信号发生相应的鼓励和呼应,即altera_avalon_clock_source用于发生clock,altera_avalon_reset_source用于发生reset信号,altera_conduit_bfm则用于调查led_pio输出。这三个模块的详细代码都能够在同目录的submodules子文件夹下找到。

  接下来,咱们需求翻开EDS中的软件工程并对其进行仿真。咱们接着运用上一个笔记中创立的countbinary_prj工程进行仿真,首要咱们需求到BSP Editor里边去从头generate,由于Qsys有改动并从头生成了。接着修正其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会从0接连的递加一向到255,然后中止。保存修正的软件代码并从头编译工程,然后在使用工程上点击右键值并挑选Rus asàNiso II ModelSim,如图3所示。

  

 

  图3

  第一次运转通常会弹出如图4所示的窗口,需求对仿真选项做一些装备。挑选挑选仿真的工程名(Project name)、仿真的elf可履行文件(Project ELF file name)、ModelSim软件的装置途径(ModelSim path)和Qsys测验脚本封装描绘文件(Qsys Testbench Simulation Package Descriptor File name)存储方位。规划好后点击Run即发动ModelSim进行仿真。

  

 

  图4

  弹出ModelSim-Altera后,咱们能够讲顶层文件的3个export信号增加的Wave窗口中,然后Run起来,看看仿真时间有2-3秒后咱们能够回放仿真波形(详细的时间需求看PC的情况,特权同学的Pentium E5800跑了应该有半分多钟),如图5、图6和图7所示。

  如图5,刚上电0ns开端,reset信号有一段时间的低脉冲,大约50个clk周期,正如咱们的testbench中所规划的。

  

 

  图5

  如图6所示,在仿真进行到大约1.3s时间,led_pio信号有一段改变的波形,初始0值在通过这段改变波形后终究变为255,这也是咱们软件代码里边所设置的终究值。

  

 

  图6

  再来看图7,咱们将led_pio的改变段波形扩大,公然是咱们软件编程的递加的值,一向从0递加到255停止。

  

 

  图7

  仿真的流程根本便是这样,很easy,咱们只需动动指尖就能够完结,当然了,假如要做许多个性化的详尽的仿真验证,那么在testbench里边咱们却是能够动些四肢,输出成果也不但仅仅看看波形罢了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/116399.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部