- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章仿真与逻辑综合讲解
第八章 仿真与逻辑综合 8.1 系统仿真及可测试设计 系统仿真的重要性: 项目成功的关键,仿真时间占整个设计的90%。 在逻辑综合和布线之前对VHDL模型的逻辑功能进行仿真,可提高效率。 仿真的手段: 软硬件协同验证方式。 仿真的两个目的: 功能仿真 时序仿真 仿真方法 功能仿真验证设计模块的逻辑功能 时序仿真验证设计模块的时序关系 不论是功能仿真还是时序仿真,仿真的方法有两种: 交互式仿真方法 测试平台法 利用测试平台(testbench)对被测试单元输入信号测试矢量,通过波形输出,文件记录输出,或与测试平台中的设定输出矢量来进行比较,可以验证仿真结果。 仿真输入信息的产生(1) 程序直接产生法: 由设计者设计一段VHDL语言,由该程序直接产生仿真的输入信息。 例: 对例7-41的带允许端的十二进制计数器进行仿真。 十二进制计数器输入信号实例 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test_count12en is end test_count12en; 构造体描述部分 architecture siml of test_count12en is component count12en port(clk,clr,en:in std_logic; qa,qb,qc,qd:out std_logic); end component; constant clk_cycle:time:=20 ns; signal test_clk,test_clr,test_en:std_logic; signal t_qa,t_qb,t_qc,t_qd:std_logic; 产生clk输入的进程 process begin test_clk=1; wait for clk_cycle/2; test_clk=0; wait for clk_cycle/2; end process; 产生初始复位信号和计数允许信号 process begin test_clr=0; test_en =1; wait for clk_cycle/4; test_clr=1; wait for clk_cycle; test_clr=0; 仿真输入信息的产生(2) 读TEXTIO文件产生法: 仿真输入数据按定时要求按行存于一个文件中,在仿真时,根据定时要求按行读出,并赋予相应的输入信号。 例8-2 library ieee; library std; use ieee.std_logic_1164.all; use ieee.std_logic_textio.all; use std.textio.all; 仿真延时 : 仿真 延时的作用: 使零延时事件得到适当的排队次序,以便在仿真过程中得到一致的结果。 两种不同情况的q输出波形 输入信号A的变化,要在Q输出表现出来需要三个仿真 延时,由于有限个延时 认为是可忽略的,所以a,c,d,q值的跳变被认为是发生在同一仿真时刻0 ns处。 引入延时 的目的是为了便于排出仿真计算的次序,在仿真波形中是不反映计算过程的,而只反映最终的计算结果。 这样处理以后,使得仿真结果和硬件动作就完全一致起来了。 仿真程序模块的书写(1) 可简化实体描述 程序中包含输出错误信息的语句: 在仿真中往往要对波形、定时关系进行检查,如不满足要求,应输出仿真错误信息,以引起设计人员的注意。在VHDL语言中ASSERT语句就专门用于错误验证及错误信息输出。 语句书写格式: assert 条件 [report 输出错误信息] [severity 出错级别]; 条件为检查内容,如果条件不满足,就输出错误信息和出错级别(note,warning,error,failure) 仿真程序模块的书写(2) 如建立时间的检查程序: process(wr) --write operation Begin if(wrevent and wr=1) then if(cs=1 and wr=1) then sram(adr_in)=din after 2 ns; end if; end if; wr_rise=now; --the time signal wr is rising
文档评论(0)