好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数字系统的验证.ppt

37页
  • 卖家[上传人]:xiao****1972
  • 文档编号:73062390
  • 上传时间:2019-01-24
  • 文档格式:PPT
  • 文档大小:1.06MB
  • / 37 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第五章 数字系统的验证,任务:,设计一个具有“百分秒、秒、分”计时功能的数字跑表,可以实现一个小时以内精确百分之一秒的计时,具有复位、暂停功能,其设计方案框图如图5.1所示要求复位信号高电平有效,对系统异步清零,暂停信号高电平有效,即高电平停止计数,低电平继续计数,百分秒、秒、分钟计数均采用BCD码计数方式逻辑设计,`timescale 1ns/1ns Module paobiao(clk,reset,pause,ms_h,ms_l,s_h,s_l,m_h,m_l);,3. Testbench设计,在数字系统设计完成后,就要对设计电路进行功能仿真,以验证设计的正确性,这是本任务的核心步骤编写Testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符module tb_paobiao; reg clk,reset,pause; wire [3:0] ms_h,ms_l,s_h,s_l,m_h,m_l; paobiao u_paobiao(clk,reset,pause,ms_h,ms_l,s_h,s_l,m_h,m_l); //时钟产生模块 initial begin clk = 1'b0; end always #5 clk = ~clk; //复位信号产生 initial begin reset = 1'b0; #100 reset = 1'b1; #10 reset = 1'b0;,end //暂停信号产生 initial begin pause = 1'b1; #300 pause = 1'b0; #119905 pause = 1'b1; #30 pause = 1'b0; end initial $monitor($stime,, reset,, clk,,, pause,, ms_h,, ms_l,, s_h,, s_l,, m_h,, m_l); endmodule,Modelsim仿真,1)新建project,(1)选择菜单File/new/project,弹出Create Project对话框,如图5.2所示。

      Modelsim仿真,1)新建project,(2)添加文件到Project中在弹出的Create Project对话框中点击OK,弹出Add items to the Project对话框,选择Add Existing File,弹出Create Project File对话框,如图5.3所示Modelsim仿真,1)新建project,(3)在Add file as Type 栏中选择Verilog,点击Browse,添加文件后的对话框,如图5.4所示Modelsim仿真,2)编译源代码,点击菜单Compile/Compile all,编译后的文件状态如图5.5所示Modelsim仿真,3)启动仿真器,点击Start Simulation,启动仿真器,如图5.6所示Modelsim仿真,3)启动仿真器,在work工作库下找到testbench文件,并选中,然后点击OK,如图5.7所示Modelsim仿真,4)执行仿真,将仿真信号添加到仿真波形窗口,用鼠标选中仿真信号,选择菜单Add/Wave/Selected Signals,如图5.8所示Modelsim仿真,4)执行仿真,选择菜单Simulation/Run/Run All,执行仿真,仿真波形如图5.9所示。

      Modelsim,Modelsim是Mentor公司开发的HDL硬件描述语言仿真软件,该软件可以用来实现对用户设计的VHDL、Verilog或者两种语言混合的程序进行仿真,同时也支持IEEE常见的各种硬件描述语言标准使用Modelsim进行功能仿真,1.新建工程,在Modelsim软件中选择“File”菜单下的“New”选项, 选择“Project”选项,打开如图5.16所示的新建工程对话框在该对话框中填写工程名称,路径和库单击“OK”按钮,弹出如图5.17所示的添加工程项目对话框 选择向工程添加的项目类型,然后单击“Close”按钮完成工程的建立这里选择“Add Exiting File”项目使用Modelsim进行功能仿真,2.加入文件,在新建工程时,也可以不选择添加的项目种类,而是在project栏里面单击右键,在弹出的菜单中选择“Add to Project→Existing File”,如图5.18所示使用Modelsim进行功能仿真,3.编译源代码,Verilog 源文件的GUI模式的编译方法是:直接执行主窗口中“Compile”菜单下的各种不同的编译命令,如图5.20所示。

      使用Modelsim进行功能仿真,3.编译源代码,当文件窗口中“Status”栏的“﹖”图标变成一个“√”的图标时,说明文件编译成功,如图5.21所示使用Modelsim进行功能仿真,4.启动仿真器并加载顶层设计,这一步骤的GUI操作方法:执行主菜单中的Simulate/Simulate命令打开开始仿真对话框,如图5.24所示,选择顶层模块,如图5.25所示使用Modelsim进行功能仿真,5.执行仿真,查看波形,右键单击test,选择“Add”选项下面的“Add to Wave”选项,为波形窗口添加信号,如图5.26所示使用Modelsim进行功能仿真,5.执行仿真,查看波形,此时即可在新弹出的窗口中看到已添加的信号,如图5.27所示使用Modelsim进行功能仿真,5.执行仿真,查看波形,单击工具栏中的图标就能看见仿真结果了,如图5.28所示5.3 Testbench设计方法,通常Testbench没有输入与输出端口,通常应包括信号或变量定义,产生激励波形语句,例化设计模块,监控和比较响应输出语句5.3.1 Testbench基本结构,module test_bench; 信号或变量定义声明 使用initial或always语句来产生激励波形 例化设计模块 监控和比较输出响应 endmodule,5.3 Testbench设计方法,HDL用于描述硬件电路,同样也可以用于描述仿真激励的产生。

      HDL描述可以产生所需要的控制信号,以及一些简单的数据5.3.2 简单CPU接口激励产生方式,initial begin cs_n = 1; // CPU接口初始状态 wr_n = 1; rd_n = 1; addr = 8’hxx; data = 8’hzz; #1000; // 一次写操作 cs_n = 0; wr_n = 0; addr = 8’h80; data = 8’h00; #100; cs_n = 1; wr_n = 1; #10; addr = 8’hxx; data = 8’hzz; end,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,1)产生时钟的几种方式,(1)使用initial方式产生占空比为50%的时钟,initial begin clk = 0; #delay; forever #(period/2) clk = ~ clk; end,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,1)产生时钟的几种方式,(2)使用always方式,initial clk = 0; always #(period/2) clk = ~ clk;,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,1)产生时钟的几种方式,(3)使用repeat方式产生确定数目的时钟脉冲,initial begin clk = 0; repeat(6) #(period/2) clk = ~ clk; end,,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,1)产生时钟的几种方式,(4)产生占空比非50%的时钟,initial clk = 0; always begin # 3 clk = ~ clk; # 2 clk = ~ clk; end,,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,2)产生复位信号的几种方式,(1)异步复位,initial begin rst = 1; #100; rst = 0; #500; rst = 1; end,,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,2)产生复位信号的几种方式,(2)同步复位1,initial begin rst = 1; @(negedge clk); //等待时钟下降沿 rst = 0; #30; @(negedge clk); //等待时钟下降沿 rst = 1; end,,,,5.3 Testbench设计方法,5.3.4 常用产生激励描述方式,2)产生复位信号的几种方式,(3)同步复位2,initial begin rst = 1; @(negedge clk); //等待时钟下降沿 repeat(3) @(negedge clk); //经过3个时钟下降沿 rst = 1; end,,,,,5.4 常用的Verilog测试语句,1. $display/$monitor,//在终端上打印信号的ASCII值 initial begin $timeformat (-9,1, “ns”,12); //设置输出时钟格式 $display(“stime clk rst pause ms_h ms_l s_h s_l m_h m_l”); //显示输入的字符串 $monitor(“%t %b %b %b %b %b %b %b %b”, //设置输出信号格式 $realtime,clock,reset,pause,ms_h,ms_l,s_h,s_l,m_h,m_l); //指定输出的信号 end,,,,,$display是将函数内部双引号中的字符串输出在终端上。

      而$monitor则不同,它的输出是事件驱动的在例子中,$monitor信号列表中的$realtime信号变化会触发终端显示事件的发生,该信号被设计者对应到仿真时间中,每次$monitor的触发将会把信号列表中的信号值显示在终端中 $monitor语句中的“%”用于定义信号列表中信号的输出格式例如,%t将信号按照时间格式输出,%b将信号按照二进制格式输出另外Verilog HDL语言还提供了其它的输出格式,比如%h为十六进制输出,%d为十进制输出,%o为八进制输出等5.4 常用的Verilog测试语句,2. timescales,'timescale 1ns/1ps //度量参考为1ns,精度为1ps module testbench; … initial begin #10 rst = 1; //10个仿真时间延时,相当于10x1ns=10ns的仿真时间 … end initial begin //display语句将在每一个仿真推进布进中执行,也就是1ps执行一次 $display (''%d, rst = %b“m $time, rst); end endmodule,,,,,'timescale reference_time/precision 其中reference_time是单位时间的度量,precision决定了仿真的推进延迟精度,同时也设置了仿真的推进步进单位。

      5.4 常用的Verilog测试语句,3. force/release,module testbench; . initial begin rst = 1; //在仿真时间零点将rst赋值1 force data = 101; //在仿真时间零点强制使data为101,并保持 #30 rst = 0; //在仿。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.