版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、可编程ASIC模块化硬件与进程模型 目的目的 第三部分第三部分(模块化硬件与进程模型模块化硬件与进程模型)与第四部分与第四部分(信号传输模型信号传输模型)均是讲述均是讲述vhdl硬件描画言语的硬件描画言语的原理原理 这两部分的学习目的是为了让大家了解硬件描这两部分的学习目的是为了让大家了解硬件描画言语的运转机制,了解硬件仿真的原理,有画言语的运转机制,了解硬件仿真的原理,有利于在以后的设计中运用多言语进展各种级别利于在以后的设计中运用多言语进展各种级别的建模;的建模; 对于方案从事对于方案从事EDA工具软件设计的学员也有一工具软件设计的学员也有一定的参考价值。定的参考价值。数字电路的信号跳变特
2、点数字电路din0din1dout输出(dout)的值只需在输入(din0,din1)发生变化的时候才会变化(可以有所延迟)理想情况下是瞬间变化,没有过渡时间。din0din1dout数字电路的信号跳变特点数字电路din0din1dout输出(dout)的值只需在输入(din0,din1)发生变化的时候才会变化(可以有所延迟)理想情况下是瞬间变化,没有过渡时间。din0din1dout本节假设 为了问题分析的方便,本节暂时假设,输出的跳变与输入的跳变之间无延迟,跳变无过渡。用软件方法来仿真硬件行为数字电路元件din0din1doutdin0din1dout问题:如何用软件的方法来仿真这个硬件元
3、件的行为?用软件方法来仿真硬件行为数字电路元件din0din1doutdin0din1doutFunct() if(din0 和 din1满足某种条件) dout = 0; Else dout = 1; / 在这里假设din0,din1和dout为全局量用软件方法来仿真硬件行为数字电路元件din0din1doutdin0din1dout问题:何时调用Funct?Funct() if(din0 和 din1满足某种条件) dout = 0; Else dout = 1; / 在这里假设din0,din1和dout为全局量时间方案(调用方案)1数字电路元件din0din1doutdin0din1d
4、outt按照特定的分辨率对时间轴作细划分,调用funct。承袭了传统电子系统(模拟,平滑系统)的仿真思想。缺陷:调用频繁,仿真时cpu负担过重。时间方案(调用方案)2数字电路元件din0din1doutdin0din1doutt(理想数字系统仿真)只需求对输入跳变点调用Funct。缺陷:只适宜于理想数字波形。ASIC仿真时间方案 根本上是采用第二种方案。 以下的仿真讨论均运用第二种方案。波形记录举例数字电路din0din1doutdin0din1doutttDin0 din1001t011t110t201t0t1t2仿真算法流程读取波形文件中时间st时的输入值(din0, din1)调用Fun
5、ct往波形文件记录St时的输出值(dout, )st为仿真时间指针时间t终了?St指向波形文件中的下一个时间点退出St指向波形文件中的起始时间点YN思索复杂的情况:多元件(多模块)u1u3u2abcefgVHDL处置方案:一个硬件模块对应一个软件进程。U1: process(a, b)U2: process(c)U3: process(e, f)进程调度(方案1)u1u3u2abcefg方案1: 偷懒方法。 当任何一个输入(a,b,c)发生变化时,均将一切的进程调度一次。问题:用什么来决议调度的顺序?方案1修补:根据信号流向来确定调度顺序。问题:当存在信号反响的时候又如何处置?进程调度(方案2
6、)u1u3u2abcefg方案2: 对每一个模块,只需当该模块的输入发生变化时,该模块才被调用。问题:当模块的输入发生变化,但是又没有引起模块的硬件动作时,这种方法会有什么缺陷?例子:存放器的时钟发生变化时,存放器才会产生硬件动作,而数据输入发生变化时,存放器并不产生任何动作。VHDL中process的定义 ModuleName:Process( 敏感信号列表 ) Begin - 进程描画语句。 End process;当敏感信号列表中的任何一个信号发生变化,该进程都会被调度Process例子 假设假设U2为非门,那么例子程序如下:为非门,那么例子程序如下: U2: process( c )
7、Begin if( c = 1 ) then f = 0; else f = 1; end if; End process;当c发生变化时,该进程被调度.表示信号赋值。VHDL的进程调度u1u3u2abcefgabcefVHDL的进程调度u1u3u2abcefgabcef进入一个新的进入一个新的仿真周期仿真周期U1_process被调度的进程:一个一个子仿真周期子仿真周期VHDL的进程调度u1u3u2abcefgabcef被调度的进程:进入一个新的进入一个新的仿真周期仿真周期U1_processU3_process子仿真周期1子仿真周期2VHDL的进程调度u1u3u2abcefgabcef进入
8、一个新进入一个新的仿真周期的仿真周期被调度的进程:U1_processU2_processU3_process子仿真周期1子仿真周期2联想:SARS隔离检测隔离子周期1隔离子周期2隔离子周期3VHDL进程调度算法 1.假设仿真事件假设仿真事件(有信号发生变化有信号发生变化)搜索完,搜索完,那么终了仿真;否那么,跳到下一个信那么终了仿真;否那么,跳到下一个信号事件点,此时进入一个新的仿真周期;号事件点,此时进入一个新的仿真周期; 2.找出一切对发生变化的信号敏感的进程,找出一切对发生变化的信号敏感的进程,进入一个新的子仿真周期,依次对这些进入一个新的子仿真周期,依次对这些进程调度一次;进程调度一
9、次; 3.假设进程调度后出现新的事件,那么回假设进程调度后出现新的事件,那么回到第到第2步;否那么回到第步;否那么回到第1步。步。VHDL仿真思想 子仿真周期的时间就是一个子仿真周期的时间就是一个Delta延时,而延时,而Delta延时为延时为0延时。延时。 显然,一个仿真周期可以包含多个子仿真周期,显然,一个仿真周期可以包含多个子仿真周期,也就是包含多个也就是包含多个Delta延时。延时。 Delta延时数目的添加,并不会推进仿真时钟。延时数目的添加,并不会推进仿真时钟。也即也即“微观时间增量不改动宏观时间;只需微观时间增量不改动宏观时间;只需仿真周期的添加才会推进仿真时钟。仿真周期的添加才
10、会推进仿真时钟。 硬件模块的运转之间是并行的关系;软件进程硬件模块的运转之间是并行的关系;软件进程的调度之间是并发的关系。硬件的并行是经过的调度之间是并发的关系。硬件的并行是经过软件的并发来仿真。软件的并发来仿真。补充:并发与并行 并发:补充:并发与并行 并行就是真正的同时,在任何时辰(瞬间),多个进程都在同时地运转。VHDL软件体系硬件电路process();process();process();编译器进程调度器(仿真器)仿真结果VHDL源代码源代码EDA工具工具综合构成的源码方式网表 进程构造体(即vhdl源代码)里曾经描画了整个硬件的外形,所以它可以被综合器综合成硬件; 并不是一切描画
11、方式的vhdl代码都可以被综合成硬件。太笼统的描画只适宜做系统建模和仿真。 显然综合器是不会去关怀敏感信号量的,由于它不存在进程调度的问题,而是直接根据进程体内的代码来构成硬件电路。 但是要留意,即使编写的是面向综合的代码,敏感信号量依然需求补全。由于敏感信号的缺漏对于仿真器来说是一个错误,会导致仿真时应该被调度的进程没有得到调度。 而综合器构成的综合后仿真用的网表源文件,是保证不丧失敏感信号的。 假设设计者丧失了敏感信号,就会呵斥设计级别的代码和综合后的代码之间仿真结果不相符。对于敏感信号 一个模块,并非一切的输入都必需作为一个模块,并非一切的输入都必需作为敏感信号,只需引起硬件动作的信号才
12、敏感信号,只需引起硬件动作的信号才必需作为敏感信号。必需作为敏感信号。对于敏感信号 将一切的输入信号将一切的输入信号放入进程的敏感信放入进程的敏感信号表中,在逻辑上号表中,在逻辑上并没有什么错误,并没有什么错误,但是会引起进程调但是会引起进程调度频繁而导致仿真度频繁而导致仿真效率降低效率降低(cpu负担负担太重太重)。事情终了了吗?U1U2abc 假设u1和u2都是“直连逻辑(在数字逻辑设计中,叫做缓冲器元件),那么它们的进程描画(用c言语)如为:/*敏感信号量为(a) */Void functU1() b = a;/* 敏感信号量为(b) */Void functU2() c = b;很显然
13、,当a的值发生变化时,会激活两个仿真子周期,functU1和functU2依次得到调度,从而a的值得可以可靠地传播到c。用另外的方式建立敏感信号表,这里省略。事情终了了吗?U1U2abc 假设u1和u2都是“直连逻辑(在数字逻辑设计中,叫做缓冲器元件),那么它们的进程描画(用VHDL言语)如为:Process(a)Begin b = a;End process;Process(b)Begin c = b;End process;很显然,当a的值发生变化时,会激活两个仿真子周期,functU1和functU2依次得到调度,从而a的值得可以可靠地传播到c。尝试加上时钟变成时序电路U1U2abccl
14、kVoid functU1() if(rising_edge(clk) b = a;C言语描画的进程如下:Void functU2() if(rising_edge(clk) c = b;留意这两个进程的敏感信号量都是clk。尝试加上时钟变成时序电路U1U2abcclkVoid functU1() if(rising_edge(clk) b = a;C言语描画的进程如下:Void functU2() if(rising_edge(clk) c = b;当clk发生变化时,这两个进程会被激活,并且依次在一个子仿真周期内被调度。尝试加上时钟变成时序电路U1U2abcclkVoid functU1(
15、) if(rising_edge(clk) b = a;C言语描画的进程如下:Void functU2() if(rising_edge(clk) c = b;假设首先调度functU2,再调度functU1 ,那么仿真结果可以符合实际的硬件行为。尝试加上时钟变成时序电路U1U2abcclkVoid functU1() if(rising_edge(clk) b = a;C言语描画的进程如下:Void functU2() if(rising_edge(clk) c = b;而假设首先调度functU1,再调度functU2,那么仿真结果与实际的硬件行为不符!问题 我们发现,调度顺序的不同,会导
16、致截然不同的仿真结果; 以下是这个问题的另外一种方式的表述U3U1U2abc/* 敏感信号量为(a, b)*/functU3() b = a; c = b;显然,两种方式中,a的值都可以可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描画/* 敏感信号量为(a, b) */functU3() c = b; b = a;元件合并方式1:方式2:U3U1U2abc/* 敏感信号量为(a, b)*/functU3() b = a; c = b;显然,两种方式中,a的值都可以可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描画/* 敏感信号量为(a, b) */
17、functU3() c = b; b = a;值得留意的是,这种纯组合电路的进程函数中,被读的信号应该都参与敏感信号表中U3U1U2abc/* 敏感信号量为(a, b)*/Process(a,b)begin b = a; c = b;End process;显然,两种方式中,a的值都可以可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描画/* 敏感信号量为(a, b) */Process( a,b)begin c = b; b = a;End process;值得留意的是,这种纯组合电路的进程函数中,被读的信号应该都参与敏感信号表中U3U1U2abc/* 敏感信号量为(a,
18、 b)*/Process(a,b)begin b = a; c = b;End process;显然,两种方式中,a的值都可以可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描画/* 敏感信号量为(a, b) */Process( a,b)begin c = b; b = a;End process;这样在a发生变化时,导致进程被调度两次,从而保证了a的值顺利地在一个仿真周期内“立刻地传输到c。U1U2abcclk/* 敏感信号为(clk) */FunctU3() if( rising_edge(clk) ) c = b; b = a; 此时仿真没问题给这个系统加上时钟,变
19、成时序电路U1U2abcclk/* 敏感信号为(clk) */FunctU3() if( rising_edge(clk) ) b = a; c = b; 此时仿真出错,与实际不符!交换顺序! 这是为什么?如何处置?作业(挑战免考题的根底) 以下是一个数字硬件系统的模块框图。u1u2u3abcd要求 1. 为输入输出信号定义一种波形记录文件格式,编写函数,可以根据文件自动画出信号波形; 2. 编写rising_edge函数: bool rising_edge(std_logic clk ); 其中std_logic为自定义类型,其在数字逻辑上的值暂时为(0, 1)。要求 3. 假设曾经有工程师利用c言语编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度购房贷款合同范本
- 二零二四年度租赁合同之租赁物描述与租赁期限3篇
- 2024年度工程招投标居间合作合同版B版
- 二零二四年度加盟商激励合同:连锁便利店加盟业绩奖励2篇
- 2024年度石膏材料行业大数据分析购销合同2篇
- 2024年塔吊临时出让合同3篇
- 2024年叉车租赁协议含维护与服务细节
- 2024年度宠物托管合同
- 2024年个人等额本息贷款合同范本
- 2024年度大连市住宅租赁合同(个人版)
- 电梯维保服务维保服务质量保障措施
- 多图中华民族共同体概论课件第十一讲 中华一家与中华民族格局底定(清前中期)根据高等教育出版社教材制作
- 装修墙角新工艺
- 小学三年级一位数乘两位数的乘法练习题(500道)
- 医院物业年度总结与计划书
- 浙江省杭州市萧山区2023-2024学年五年级上学期期末英语试卷
- 科技兴国创新有我-科技创新主题班会
- 生物教学问题研究报告
- 波音公司案例分析课件
- 《化解冲突收获友谊》心理健康课件
- 针式打印机研究报告-中国针式打印机市场深度调查研究报告(2024年)
评论
0/150
提交评论