可编程ASIC设计及应用 [李广军]模块化硬件与进程模型

上传人:ca****in 文档编号:232295934 上传时间:2023-09-16 格式:PPT 页数:52 大小:380KB
收藏 版权申诉 举报 下载
可编程ASIC设计及应用 [李广军]模块化硬件与进程模型_第1页
第1页 / 共52页
可编程ASIC设计及应用 [李广军]模块化硬件与进程模型_第2页
第2页 / 共52页
可编程ASIC设计及应用 [李广军]模块化硬件与进程模型_第3页
第3页 / 共52页
资源描述:

《可编程ASIC设计及应用 [李广军]模块化硬件与进程模型》由会员分享,可在线阅读,更多相关《可编程ASIC设计及应用 [李广军]模块化硬件与进程模型(52页珍藏版)》请在装配图网上搜索。

1、可编程ASIC模块化硬件与进程模型 电子科技大学目的目的第三部分第三部分(模块化硬件与进程模型模块化硬件与进程模型)与第四部分与第四部分(信号传输模型信号传输模型)均是讲述均是讲述vhdl硬件描述语言的硬件描述语言的原理原理这两部分的学习目的是为了让大家了解硬件描这两部分的学习目的是为了让大家了解硬件描述语言的运行机制,了解硬件仿真的原理,有述语言的运行机制,了解硬件仿真的原理,有利于在以后的设计中使用多语言进行各种级别利于在以后的设计中使用多语言进行各种级别的建模;的建模;对于打算从事对于打算从事EDA工具软件设计的学员也有一工具软件设计的学员也有一定的参考价值。定的参考价值。电子科技大学数

2、字电路的信号跳变特点数字电路din0din1dout输出(dout)的值只有在输入(din0,din1)发生变化的时候才会变化(可能有所延迟)理想情况下是瞬间变化,没有过渡时间。din0din1dout电子科技大学数字电路的信号跳变特点数字电路din0din1dout输出(dout)的值只有在输入(din0,din1)发生变化的时候才会变化(可能有所延迟)理想情况下是瞬间变化,没有过渡时间。din0din1dout电子科技大学本节假设为了问题分析的方便,本节暂时假设,输出的跳变与输入的跳变之间无延迟,跳变无过渡。电子科技大学用软件方法来仿真硬件行为数字电路元件din0din1doutdin0d

3、in1dout问题:如何用软件的方法来仿真这个硬件元件的行为?电子科技大学用软件方法来仿真硬件行为数字电路元件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数

4、字电路元件din0din1doutdin0din1doutt按照特定的分辨率对时间轴作细划分,调用funct。继承了传统电子系统(模拟,平滑系统)的仿真思想。缺点:调用频繁,仿真时cpu负担过重。电子科技大学时间方案(调用方案)2数字电路元件din0din1doutdin0din1doutt(理想数字系统仿真)只需要对输入跳变点调用Funct。缺点:只适合于理想数字波形。电子科技大学ASIC仿真时间方案基本上是采用第二种方案。以下的仿真讨论均使用第二种方案。电子科技大学波形记录举例数字电路din0din1doutdin0din1doutttDin0 din1001t011t110t201t0t

5、1t2电子科技大学仿真算法流程读取波形文件中时间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)发生变化时,均将所有的进程调度一次。问题:用什么来决定调度

6、的顺序?方案1修补:根据信号流向来确定调度顺序。问题:当存在信号反馈的时候又如何处理?电子科技大学进程调度(方案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子仿真周期2电子科技大学VHDL的进程调度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软件体系VHDL源代码源代码EDA工具工具综合形成的源码形式网表电子科技大学进程结构体(即vhdl源代码

11、)里已经描述了整个硬件的形态,所以它可以被综合器综合成硬件;并不是所有描述方式的vhdl代码都可以被综合成硬件。太抽象的描述只适合做系统建模和仿真。电子科技大学显然综合器是不会去关心敏感信号量的,因为它不存在进程调度的问题,而是直接根据进程体内的代码来形成硬件电路。电子科技大学但是要注意,即使编写的是面向综合的代码,敏感信号量仍然需要补全。因为敏感信号的缺漏对于仿真器来说是一个错误,会导致仿真时应该被调度的进程没有得到调度。而综合器形成的综合后仿真用的网表源文件,是保证不丢失敏感信号的。如果设计者丢失了敏感信号,就会造成设计级别的代码和综合后的代码之间仿真结果不相符。电子科技大学对于敏感信号

12、一个模块,并非所有的输入都必须作为一个模块,并非所有的输入都必须作为敏感信号,只有引起硬件动作的信号才敏感信号,只有引起硬件动作的信号才必须作为敏感信号。必须作为敏感信号。电子科技大学对于敏感信号将所有的输入信号将所有的输入信号放入进程的敏感信放入进程的敏感信号表中,在逻辑上号表中,在逻辑上并没有什么错误,并没有什么错误,但是会引起进程调但是会引起进程调度频繁而导致仿真度频繁而导致仿真效率降低效率降低(cpu负担负担太重太重)。电子科技大学事情结束了吗?U1U2abc 假设u1和u2都是“直连逻辑”(在数字逻辑设计中,叫做缓冲器元件),则它们的进程描述(用c语言)如为:/*敏感信号量为(a)*

13、/Void functU1()b=a;/*敏感信号量为(b)*/Void functU2()c=b;很显然,当a的值发生变化时,会激活两个仿真子周期,functU1和functU2依次得到调度,从而a的值得能够可靠地传播到c。用另外的方式建立敏感信号表,这里省略。电子科技大学事情结束了吗?U1U2abc 假设u1和u2都是“直连逻辑”(在数字逻辑设计中,叫做缓冲器元件),则它们的进程描述(用VHDL语言)如为:Process(a)Begin b=a;End process;Process(b)Begin c=b;End process;很显然,当a的值发生变化时,会激活两个仿真子周期,func

14、tU1和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_edge(clk)b=a;C语言描述的进程如下:Void functU2()if(rising_edge(clk)c =b;当clk发生变化时,这两个进程会被激活

15、,并且依次在一个子仿真周期内被调度。电子科技大学尝试加上时钟变成时序电路U1U2abcclkVoid functU1()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;而如果首先调度funct

16、U1,再调度functU2,则仿真结果与实际的硬件行为不符!电子科技大学问题我们发现,调度顺序的不同,会导致截然不同的仿真结果;以下是这个问题的另外一种形式的表述电子科技大学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合

17、并成新的元件u3,并且只用一个进程函数描述/*敏感信号量为(a,b)*/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;值得注意的是,这种纯组合电路的进程函数中,被读的被读的信号应该都加入敏

18、感信号表中电子科技大学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;这样在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)。电子

20、科技大学要求3.假设已经有工程师利用c语言编写了这三个模块的设计函数(进程函数):void FunctU1();void FunctU1();void FunctU3();请你在上述基础下,编写完整的仿真程序或函数(要求c语言),对这些进程函数进行合理地调度,正确地对这个硬件系统进行仿真,并自动画出整个仿真的输入输出波形。4.自己维护好设计文档。电子科技大学要求代码注释例子:代码注释例子:/*#function:bool rising_edge(std_logic clk);#description:#parameters:#clk:the clk signal to be tested.#r

21、eturn value:#true:.#false:.#author:Riyu Su#*/电子科技大学另外的说明你可以自己设定你可以自己设定u1,u2,u3的逻辑的逻辑(即即FunctUn),并且把程序画出的波形和自并且把程序画出的波形和自己设想的波形相对比,看是否一致。己设想的波形相对比,看是否一致。编译器可以用编译器可以用turboC或者或者VC。这道作业是本门课的第一道免考题的基这道作业是本门课的第一道免考题的基础,如果你能正确的完成,那么你就有础,如果你能正确的完成,那么你就有可能具备了挑战完整的免考题的实力。可能具备了挑战完整的免考题的实力。完整的免考题将出现在完整的免考题将出现在“信号传输模型信号传输模型”这一节之后。这一节之后。电子科技大学

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!