版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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数字电路元件din
4、0din1doutdin0din1doutt按照特定的分辨率对时间轴作细划分,调用funct。继承了传统电子系统(模拟,平滑系统)的仿真思想。缺点:调用频繁,仿真时cpu负担过重。时间方案(调用方案)2数字电路元件din0din1doutdin0din1doutt(理想数字系统仿真)只需要对输入跳变点调用Funct。缺点:只适合于理想数字波形。电子科技大学ASIC仿真时间方案 基本上是采用第二种方案。 以下的仿真讨论均使用第二种方案。波形记录举例数字电路din0din1doutdin0din1doutttDin0 din1001t011t110t201t0t1t2电子科技大学仿真算法流程读取波
5、形文件中时间st时的输入值(din0, din1)调用Funct往波形文件记录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修补
6、:根据信号流向来确定调度顺序。问题:当存在信号反馈的时候又如何处理?电子科技大学进程调度(方案2)u1u3u2abcefg方案2: 对每一个模块,只有当该模块的输入发生变化时,该模块才被调用。问题:当模块的输入发生变化,但是又没有引起模块的硬件动作时,这种方法会有什么缺点?例子:寄存器的时钟发生变化时,寄存器才会产生硬件动作,而数据输入发生变化时,寄存器并不产生任何动作。电子科技大学VHDL中process的定义 ModuleName:Process( 敏感信号列表 ) Begin - 进程描述语句。 End process;当敏感信号列表中的任何一个信号发生变化,该进程都会被调度电子科技大学
7、Process例子 假设假设U2为非门,则例子程序如下:为非门,则例子程序如下: U2: process( c ) Begin if( c = 1 ) then f = 0; else f = 1; end if; End process;当c发生变化时,该进程被调度.表示信号赋值。电子科技大学VHDL的进程调度u1u3u2abcefgabcef电子科技大学VHDL的进程调度u1u3u2abcefgabcef进入一个新的进入一个新的仿真周期仿真周期U1_process被调度的进程:一个一个子仿真周期子仿真周期电子科技大学VHDL的进程调度u1u3u2abcefgabcef被调度的进程:进入一个
8、新的进入一个新的仿真周期仿真周期U1_processU3_process子仿真周期1子仿真周期2VHDL的进程调度u1u3u2abcefgabcef进入一个新进入一个新的的仿真周期仿真周期被调度的进程:U1_processU2_processU3_process子仿真周期1子仿真周期2电子科技大学联想:SARS隔离检测隔离子周期1隔离子周期2隔离子周期3电子科技大学VHDL进程调度算法 1.如果仿真事件如果仿真事件(有信号发生变化有信号发生变化)搜索完,搜索完,则结束仿真;否则,跳到下一个信号事则结束仿真;否则,跳到下一个信号事件点,此时进入一个新的件点,此时进入一个新的仿真周期仿真周期; 2
9、.找出所有对发生变化的信号敏感的进程,找出所有对发生变化的信号敏感的进程,进入一个新的进入一个新的子仿真周期子仿真周期,依次对这些,依次对这些进程调度一次;进程调度一次; 3.如果进程调度后出现新的事件,则回到如果进程调度后出现新的事件,则回到第第2步;否则回到第步;否则回到第1步。步。电子科技大学VHDL仿真思想 子仿真周期子仿真周期的时间就是一个的时间就是一个Delta延时,而延时,而Delta延时为延时为0延时。延时。 显然,一个显然,一个仿真周期仿真周期可以包含多个可以包含多个子仿真周期子仿真周期,也就是包含多个也就是包含多个Delta延时。延时。 Delta延时数目的增加,延时数目的
10、增加,并不会并不会推进仿真时钟。推进仿真时钟。也即也即“微观时间增量不改变宏观时间微观时间增量不改变宏观时间”;只有;只有仿真周期的增加才会推进仿真时钟。仿真周期的增加才会推进仿真时钟。 硬件模块的运行之间是硬件模块的运行之间是并行并行的关系;软件进程的关系;软件进程的调度之间是的调度之间是并发并发的关系。硬件的的关系。硬件的并行并行是通过是通过软件的软件的并发并发来仿真。来仿真。电子科技大学补充:并发与并行 并发:电子科技大学补充:并发与并行 并行就是真正的同时,在任何时刻(瞬间),多个进程都在同时地运行。电子科技大学VHDL软件体系硬件电路逻辑综合器process();process();
11、process();编译器进程调度器(仿真器)仿真结果VHDL源代码源代码EDA工具工具综合形成的源码形式网表电子科技大学 进程结构体(即vhdl源代码)里已经描述了整个硬件的形态,所以它可以被综合器综合成硬件; 并不是所有描述方式的vhdl代码都可以被综合成硬件。太抽象的描述只适合做系统建模和仿真。电子科技大学 显然综合器是不会去关心敏感信号量的,因为它不存在进程调度的问题,而是直接根据进程体内的代码来形成硬件电路。电子科技大学 但是要注意,即使编写的是面向综合的代码,敏感信号量仍然需要补全。因为敏感信号的缺漏对于仿真器来说是一个错误,会导致仿真时应该被调度的进程没有得到调度。 而综合器形成
12、的综合后仿真用的网表源文件,是保证不丢失敏感信号的。 如果设计者丢失了敏感信号,就会造成设计级别的代码和综合后的代码之间仿真结果不相符。电子科技大学对于敏感信号 一个模块,并非所有的输入都必须作为一个模块,并非所有的输入都必须作为敏感信号,只有引起硬件动作的信号才敏感信号,只有引起硬件动作的信号才必须作为敏感信号。必须作为敏感信号。电子科技大学对于敏感信号 将所有的输入信号将所有的输入信号放入进程的敏感信放入进程的敏感信号表中,在逻辑上号表中,在逻辑上并没有什么错误,并没有什么错误,但是会引起进程调但是会引起进程调度频繁而导致仿真度频繁而导致仿真效率降低效率降低(cpu负担负担太重太重)。事情
13、结束了吗?U1U2abc 假设u1和u2都是“直连逻辑”(在数字逻辑设计中,叫做缓冲器元件),则它们的进程描述(用c语言)如为:/*敏感信号量为(a) */Void functU1() b = a;/* 敏感信号量为(b) */Void functU2() c = b;很显然,当a的值发生变化时,会激活两个仿真子周期,functU1和functU2依次得到调度,从而a的值得能够可靠地传播到c。用另外的方式建立敏感信号表,这里省略。事情结束了吗?U1U2abc 假设u1和u2都是“直连逻辑”(在数字逻辑设计中,叫做缓冲器元件),则它们的进程描述(用VHDL语言)如为:Process(a)Begi
14、n b = a;End process;Process(b)Begin c = b;End process;很显然,当a的值发生变化时,会激活两个仿真子周期,functU1和functU2依次得到调度,从而a的值得能够可靠地传播到c。尝试加上时钟变成时序电路U1U2abcclkVoid functU1() if(rising_edge(clk) b = a;C语言描述的进程如下:Void functU2() if(rising_edge(clk) c = b;注意这两个进程的敏感信号量都是clk。尝试加上时钟变成时序电路U1U2abcclkVoid functU1() if(rising_ed
15、ge(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;如果首先调度functU2,再调度functU1 ,则仿真结果能够符合实际的硬件行为。尝试加上时钟变成时序电路U1U2abcclkVoid functU1() if
16、(rising_edge(clk) b = a;C语言描述的进程如下:Void functU2() if(rising_edge(clk) c = b;而如果首先调度functU1,再调度functU2,则仿真结果与实际的硬件行为不符!电子科技大学问题 我们发现,调度顺序的不同,会导致截然不同的仿真结果; 以下是这个问题的另外一种形式的表述电子科技大学U3U1U2abc/* 敏感信号量为(a, b)*/functU3() b = a; c = b;显然,两种方式中,a的值都能够可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描述/* 敏感信号量为(a, b) */funct
17、U3() c = b; b = a;元件合并方式1:方式2:电子科技大学U3U1U2abc/* 敏感信号量为(a, b)*/functU3() b = a; c = b;显然,两种方式中,a的值都能够可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描述/* 敏感信号量为(a, b) */functU3() c = b; b = a;值得注意的是,这种纯组合电路的进程函数中,被读的被读的信号应该都加入敏感信号表中电子科技大学U3U1U2abc/* 敏感信号量为(a, b)*/Process(a,b)begin b = a; c = b;End process;显然,两种方式中
18、,a的值都能够可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描述/* 敏感信号量为(a, b) */Process( a,b)begin c = b; b = a;End process;值得注意的是,这种纯组合电路的进程函数中,被读的被读的信号应该都加入敏感信号表中电子科技大学U3U1U2abc/* 敏感信号量为(a, b)*/Process(a,b)begin b = a; c = b;End process;显然,两种方式中,a的值都能够可靠地传输到c。将u1和u2合并成新的元件u3,并且只用一个进程函数描述/* 敏感信号量为(a, b) */Process( a,
19、b)begin c = b; b = a;End process;这样在a发生变化时,导致进程被调度两次,从而保证了a的值顺利地在一个仿真周期内“立即”地传输到c。电子科技大学U1U2abcclk/* 敏感信号为(clk) */FunctU3() if( rising_edge(clk) ) c = b; b = a; 此时仿真没问题给这个系统加上时钟,变成时序电路电子科技大学U1U2abcclk/* 敏感信号为(clk) */FunctU3() if( rising_edge(clk) ) b = a; c = b; 此时仿真出错,与实际不符!交换顺序!电子科技大学 这是为什么?如何解决?电子科技大学作业(挑战免考题的基础) 以下是一个数字硬件系统的模块框图。u1u2u3abcd要求 1. 为输入输出信号定义一种波形记录文件格式,编写函数,能够根据文件自动画出信号波形; 2. 编写rising_edge函数: bool rising_edge(std_logic clk ); 其中std_logic为自定义类型,其在数字逻
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现场应急处置方案编制实施指南
- 睡眠质量监测评估指南
- 产后骨盆修复护理标准
- 面诊望闻问切四诊合参操作流程
- 高浓度复合肥采购验收与使用标准
- 辣椒连作障碍综合防治方案
- 季节养生膳食制作手册
- 飞机播种作业技术标准质量验收规范
- 冷鲜肉冷链存储技术标准
- 护士资格证外科护理试题及解析
- 煤矿安全培训课件郑玉龙
- 2025年上海入团考试试题及答案
- 泉室施工方案
- 报联商培训课件
- 学堂在线 中国传统艺术-篆刻、书法、水墨画体验与欣赏 章节测试答案
- 民航安保业务知识培训课件
- DB37-2374-2018 锅炉大气污染物排放标准
- 广师大环境学概论课件第4章 自然资源的利用与保护
- 玉米施肥技术课件
- 护理礼仪与人际沟通说课
- 酒店业务外包服务方案投标文件(技术方案)
评论
0/150
提交评论