第六章EDA-Verilog的逻辑综合电子版本_第1页
第六章EDA-Verilog的逻辑综合电子版本_第2页
第六章EDA-Verilog的逻辑综合电子版本_第3页
第六章EDA-Verilog的逻辑综合电子版本_第4页
第六章EDA-Verilog的逻辑综合电子版本_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog的逻辑的逻辑(lu j)综合综合学习目标学习目标对逻辑综合的概念进行定义,解释逻辑综合的优对逻辑综合的概念进行定义,解释逻辑综合的优点。点。弄清楚哪些弄清楚哪些Verilog HDL结构和操作符能用于逻结构和操作符能用于逻辑综合,理解辑综合,理解(lji)逻辑综合工具如何解释这些结逻辑综合工具如何解释这些结构。构。解释使用逻辑综合进行设计的典型流程,描述基解释使用逻辑综合进行设计的典型流程,描述基于逻辑综合设计流程的主要组成部分。于逻辑综合设计流程的主要组成部分。描述如何验证由逻辑综合生成的门级网表。描述如何验证由逻辑综合生成的门级网表。了解编写高效率了解编写高效率RTL描述的各

2、种技巧。描述的各种技巧。描述能为逻辑综合提供最佳门级网表的分割技术。描述能为逻辑综合提供最佳门级网表的分割技术。使用逻辑综合的方法进行组合电路和时序电路的使用逻辑综合的方法进行组合电路和时序电路的设计。设计。 第一页,共63页。 什么什么(shn me)是逻辑综合是逻辑综合逻辑综合是在标准单元库和逻辑综合是在标准单元库和特定的设计约束的基础上,特定的设计约束的基础上,把设计的高层次描述转换成把设计的高层次描述转换成优化的门级网表的过程。优化的门级网表的过程。标准单元库标准单元库:与门、或门、非门与门、或门、非门(fi mn)等基本逻辑门;加等基本逻辑门;加法器、多路选择器和特殊的法器、多路选择

3、器和特殊的触发器。触发器。设计约束:时序、面积、可设计约束:时序、面积、可 测试性和功耗等方面。测试性和功耗等方面。将设计者的大脑用作逻辑综合将设计者的大脑用作逻辑综合(zngh)工工具具第二页,共63页。 什么(shn me)是逻辑综合计算机辅助逻辑综合工具的计算机辅助逻辑综合工具的出现把高层次描述向逻辑门出现把高层次描述向逻辑门的转化过程的转化过程(guchng)自动自动化了。化了。该综合工具在内部进行几次该综合工具在内部进行几次反复,生成最优化的门级描反复,生成最优化的门级描述。述。基本基本(jbn)的计算机辅的计算机辅助逻辑综合过程助逻辑综合过程第三页,共63页。逻辑综合对数字逻辑综合

4、对数字(shz)设计行业的设计行业的影响影响手动设计的限制:手动设计的限制:手动转换更容易带来人为的错误。手动转换更容易带来人为的错误。把高层次设计转换成逻辑门占去整个设计周期的大部分时间。把高层次设计转换成逻辑门占去整个设计周期的大部分时间。推测难以验证。如,设计者设计了一个推测难以验证。如,设计者设计了一个20 ns时钟周期工作的时钟周期工作的门级模块。如果分析该电路是否能优化到以门级模块。如果分析该电路是否能优化到以15 ns。为验证。为验证这种推测,重新设计。这种推测,重新设计。不同设计者设计风格缺乏一致性。不同设计者设计风格缺乏一致性。最终门级设计中发现了一个错误,需要重新设计数以千

5、计的逻最终门级设计中发现了一个错误,需要重新设计数以千计的逻辑门。辑门。库单元的时序、面积和功耗是与特定制造工艺库单元的时序、面积和功耗是与特定制造工艺(gngy)相关的。相关的。如果改变如果改变IC制造商,可能意味着重新设计整个电路,还可能制造商,可能意味着重新设计整个电路,还可能要改变设计方法。要改变设计方法。设计技术是不能重用的。设计是特定于工艺设计技术是不能重用的。设计是特定于工艺(gngy)的,难以的,难以改变,也难以重用。改变,也难以重用。 第四页,共63页。自动逻辑综合工具解决方式:自动逻辑综合工具解决方式:采用高层次设计方法,人为错误会更少。采用高层次设计方法,人为错误会更少。

6、高层次设计无需过多高层次设计无需过多(u du)关注设计约束。逻辑综合工具确保满关注设计约束。逻辑综合工具确保满足所有的约束。足所有的约束。从高层次设计到逻辑门的转换非常迅速。从高层次设计到逻辑门的转换非常迅速。模块重新设计仅需在寄存器传输级完成,重新综合获得门级网表。模块重新设计仅需在寄存器传输级完成,重新综合获得门级网表。推测容易验证。高层描述不变,只把时序约束从推测容易验证。高层描述不变,只把时序约束从20 ns变到变到15 ns,重新综合。重新综合。逻辑综合工具在整体上优化了设计。逻辑综合工具在整体上优化了设计。如果发现门级设计中有错误,设计者回头修改高层次描述以消除错如果发现门级设计

7、中有错误,设计者回头修改高层次描述以消除错误。误。在不考虑在不考虑IC制造工艺的情况下编写高层次描述。改变工艺或者制造工艺的情况下编写高层次描述。改变工艺或者IC制制造商,设计者只需在新工艺的标准单元库的基础上使用逻辑综合,造商,设计者只需在新工艺的标准单元库的基础上使用逻辑综合,重新综合到逻辑门。重新综合到逻辑门。设计重用变成了可能。设计重用变成了可能。逻辑综合对数字设计行业(hngy)的影响第五页,共63页。Verilog HDL综合综合(zngh)RTL级风格级风格寄存器传输级层次用硬件寄存器传输级层次用硬件(yn jin)描述语言(描述语言(HDL)编写设)编写设计计该风格的该风格的H

8、DL描述采用了数据流和行为结构相结合的方式。描述采用了数据流和行为结构相结合的方式。基于基于RTL的综合的综合逻辑综合工具接受寄存器传输级逻辑综合工具接受寄存器传输级HDL描述并把它转化为优化的描述并把它转化为优化的门级网表。门级网表。用于把行为描述转换成用于把行为描述转换成RTL描述的行为综合工具发展缓慢描述的行为综合工具发展缓慢第六页,共63页。可综合的可综合的verilog结构如下所示,使用结构如下所示,使用(shyng)时有一定的限时有一定的限制。制。 Verilog结构结构(jigu) Verilog HDL综合(zngh)第七页,共63页。 强制具有周期到周期的行为,避免组合(zh

9、)反馈 逻辑综合忽略所有由#指定的延迟 用复位机制取代initial结构,进行电路信号初始化中国科学技术大学软件(run jin)学院 School of Software Engineering of USTC Verilog HDL综合(zngh)第八页,共63页。 Verilog中几乎所有的操作符都可用于逻辑综合。中几乎所有的操作符都可用于逻辑综合。 只有只有(zhyu) = 和和 != 这种与这种与x和和z相关的操作符不能用于相关的操作符不能用于逻辑综合。逻辑综合。 编写表达式时,推荐使用圆括号来使逻辑更清晰,达到预期编写表达式时,推荐使用圆括号来使逻辑更清晰,达到预期的目的。的目的。

10、 如果依赖操作符的优先级,逻辑综合工具有可能产生不尽人如果依赖操作符的优先级,逻辑综合工具有可能产生不尽人意的逻辑结构。意的逻辑结构。 Verilog操作符操作符 Verilog HDL综合(zngh)第九页,共63页。部分部分Verilog结构结构(jigu)的解释的解释 赋值语句赋值语句 赋值结构是在赋值结构是在RTLRTL级用于描述组合逻辑级用于描述组合逻辑(lu j)(lu j)的最基本的结构。的最基本的结构。 转换成的门级电路实现:转换成的门级电路实现: 如果如果a a,b b,c c和和outout是两位的向量是两位的向量1:01:0,上面的赋值语句会,上面的赋值语句会被转换成两个

11、完全相同的电路,分别对应其中一位。被转换成两个完全相同的电路,分别对应其中一位。 第十页,共63页。 用到算术操作符用到算术操作符 例如设计一个一位全加器,假设逻辑综合工具内部有一位全例如设计一个一位全加器,假设逻辑综合工具内部有一位全 加器可用,逻辑综合工具直接调用内部全加器模块,如果综加器可用,逻辑综合工具直接调用内部全加器模块,如果综 合多位加法器,会进行优化,可能得到一个不同的结果合多位加法器,会进行优化,可能得到一个不同的结果(ji gu)(ji gu)。 使用条件操作符(多路选择器)使用条件操作符(多路选择器) 综合后:综合后:部分(b fen)Verilog结构的解释第十一页,共

12、63页。 if-else语句语句 单个单个if-else语句被转换成多路选择器,控制信号是语句被转换成多路选择器,控制信号是if子句中的信子句中的信号或者变量。号或者变量。 多个多个if-else-if语句不会综合成庞大的多路选择器。语句不会综合成庞大的多路选择器。 case语句语句 case语句用于生成多路选择器。语句用于生成多路选择器。 庞大的庞大的case语句可以用来生成庞大的多路选择器。语句可以用来生成庞大的多路选择器。 for循环语句循环语句 for循环可用于产生循环可用于产生(chnshng)级联的链式组合逻辑。级联的链式组合逻辑。 always语句语句 always语句可用于生成

13、时序和组合逻辑。对于时序逻辑来说,语句可用于生成时序和组合逻辑。对于时序逻辑来说,always语句必须由时钟信号语句必须由时钟信号clk的变化所控制。的变化所控制。部分Verilog结构(jigu)的解释第十二页,共63页。 例:例: 对于组合逻辑来说,对于组合逻辑来说,always语句语句(yj)必须由必须由clk,reset或者或者preset之外的其他信号触发(所有的触之外的其他信号触发(所有的触发信号都必须写在敏感列表中)。发信号都必须写在敏感列表中)。 部分(b fen)Verilog结构的解释第十三页,共63页。 函数语句函数语句 函数综合成具有函数综合成具有(jyu)一个输出变量

14、的组合模块。输出变量可一个输出变量的组合模块。输出变量可以是标量或者向量。以是标量或者向量。 中国科学技术大学(dxu)软件学院 School of Software Engineering of USTC 部分Verilog结构(jigu)的解释第十四页,共63页。逻辑综合逻辑综合(zngh)流程流程设计者在高层次使用设计者在高层次使用(shyng)RTL描述设计。功能正确后输描述设计。功能正确后输入到逻辑综合工具入到逻辑综合工具RTL描述被逻辑综合工具描述被逻辑综合工具转换为一个未经优化的内转换为一个未经优化的内部中间表示。部中间表示。不考虑面积不考虑面积(min j)、时序、时序和功耗等

15、设计约束,仅完和功耗等设计约束,仅完成简单的内部资源分配。成简单的内部资源分配。逻辑综合工具根据内部的数据逻辑综合工具根据内部的数据结构在内部表示设计。结构在内部表示设计。删除冗余逻辑,大量使删除冗余逻辑,大量使用与工艺无关用与工艺无关的布尔逻辑优化技术,的布尔逻辑优化技术,产生该设计产生该设计优化后的内部表示。优化后的内部表示。 设计被映射到需设计被映射到需要的目标工艺,要的目标工艺,满足约束要求满足约束要求 生成由目标工艺部件所描述的优化后的门生成由目标工艺部件所描述的优化后的门级网表。如果该网表满足要求的约束,就级网表。如果该网表满足要求的约束,就制作最终版图。否则,修改制作最终版图。否

16、则,修改RTL描述或约描述或约束束第十五页,共63页。工艺库工艺库 单元的集合称为工艺库。单元的集合称为工艺库。 单元描述信息:功能、版图面积、时序信息、单元描述信息:功能、版图面积、时序信息、功耗功耗设计约束设计约束 设计约束通常包含下列内容:设计约束通常包含下列内容: 1. 时序。电路必须时序。电路必须(bx)满足一定的时序要求。满足一定的时序要求。一个内部的静态时序分析器会检查时序。一个内部的静态时序分析器会检查时序。 2. 面积。最终的版图面积不能超过一定的限制。面积。最终的版图面积不能超过一定的限制。 3. 功耗。电路功耗不能超过一定的界限。功耗。电路功耗不能超过一定的界限。 一般来

17、说,面积和时序约束之间有一个相反的一般来说,面积和时序约束之间有一个相反的关系。关系。 逻辑综合(zngh)流程第十六页,共63页。设计说明设计说明设计一个具有设计一个具有(jyu)如下说明的四位数值比较器如下说明的四位数值比较器IC芯片:芯片: 设计名称是设计名称是magnitude_comparator。 输入输入A和和B是是4位输入,输入端位输入,输入端A和和B不会出现不会出现x或者或者z值。值。 如果如果A大于大于B,那么输出,那么输出A_gt_B为真。为真。 如果如果A小于小于B,那么输出,那么输出A_lt_B为真。为真。 如果如果A等于等于B,那么输出,那么输出A_eq_B为真。为

18、真。 数值比较器电路必须尽可能快,为提高速度,数值比较器电路必须尽可能快,为提高速度,可以牺牲面积。可以牺牲面积。 逻辑综合(zngh)流程第十七页,共63页。RTL描述描述(mio sh)工艺库工艺库每个单元的功能每个单元的功能(gngnng)、时序、时序、面积和功耗都在工艺面积和功耗都在工艺库中说明库中说明逻辑(lu j)综合流程第十八页,共63页。设计约束设计约束 只有一个设计约束:优化最终电路只有一个设计约束:优化最终电路(dinl),获,获得最快时序得最快时序逻辑综合逻辑综合 逻辑综合工具读取数值比较器的逻辑综合工具读取数值比较器的RTL描述。把描述。把针对目标工艺针对目标工艺abc

19、_100的设计约束和工艺库提供的设计约束和工艺库提供给逻辑综合工具。逻辑综合工具进行必要的优化,给逻辑综合工具。逻辑综合工具进行必要的优化,并产生针对并产生针对abc_100工艺优化后的门级描述。工艺优化后的门级描述。最终优化后的门级描述最终优化后的门级描述 逻辑综合工具产生最终的门级描述。门级电路逻辑综合工具产生最终的门级描述。门级电路(dinl)的逻辑图的逻辑图 逻辑综合工具为该电路逻辑综合工具为该电路(dinl)生成的门级生成的门级Verilog描述。描述。IC制造制造 逻辑综合(zngh)流程第十九页,共63页。门级网表的验证门级网表的验证(ynzhng) 功能验证:功能验证: 最初编

20、写的最初编写的RTL模块和其综合后的门级模块用同一个测试激模块和其综合后的门级模块用同一个测试激励模块进行测试。比较它们的输出结果,找出其中的不一致。励模块进行测试。比较它们的输出结果,找出其中的不一致。 对于门级描述,必须有一个由工艺厂商提供的仿真库支持对于门级描述,必须有一个由工艺厂商提供的仿真库支持(zhch)。 时序验证:时序验证: 通常使用时序仿真或者静态时序验证工具来检查门级网表的通常使用时序仿真或者静态时序验证工具来检查门级网表的时序。如果违反任何时序约束,设计者必须重新设计时序。如果违反任何时序约束,设计者必须重新设计RTL模块模块或者改变设计约束。循环反复,直到满足时序要求为

21、止。或者改变设计约束。循环反复,直到满足时序要求为止。 第二十页,共63页。逻辑综合建模技巧逻辑综合建模技巧(jqio):Verilog编码编码风格风格 使用有意义的信号和变量名称使用有意义的信号和变量名称 信号和变量的命名应具有意义,使代码自身有清晰的注释信信号和变量的命名应具有意义,使代码自身有清晰的注释信息。息。 避免混合使用上升沿和下降沿触发的触发器避免混合使用上升沿和下降沿触发的触发器 混合使用上升沿和下降沿触发的触发器可能在时钟树中引入混合使用上升沿和下降沿触发的触发器可能在时钟树中引入反向器和缓冲器。这将在电路中引入时钟偏斜。反向器和缓冲器。这将在电路中引入时钟偏斜。 使用基本构

22、造模块与使用连续赋值语句的对比使用基本构造模块与使用连续赋值语句的对比 连续连续assign语句非常简洁的表示功能,通常能生成性能语句非常简洁的表示功能,通常能生成性能很好的随机逻辑电路。但最终的逻辑结构不一定对称。很好的随机逻辑电路。但最终的逻辑结构不一定对称。 调用基本构造模块可以产生对称的设计,且逻辑综合工调用基本构造模块可以产生对称的设计,且逻辑综合工具能更高效地优化小模块。但不太简洁,制约具能更高效地优化小模块。但不太简洁,制约(zhyu)了针对了针对变化工艺的重定向,并且通常会降低仿真器性能。变化工艺的重定向,并且通常会降低仿真器性能。 第二十一页,共63页。 调用多路选择器与使用

23、调用多路选择器与使用if-else或者或者case语句的对比语句的对比 结构化的实现,最好直接使用多路选择器,更容易控制,综结构化的实现,最好直接使用多路选择器,更容易控制,综合速度更快,但依赖于工艺,且表达代码比较长。合速度更快,但依赖于工艺,且表达代码比较长。 if-else和和case常用于建立不依赖工艺的常用于建立不依赖工艺的RTL描述。描述。 使用圆括号优化逻辑使用圆括号优化逻辑(lu j)结构结构 设计者可以使用圆括号将逻辑设计者可以使用圆括号将逻辑(lu j)组合起来,以便于控制组合起来,以便于控制最终的结构,也提高了最终的结构,也提高了Verilog描述的可读性。描述的可读性。

24、 逻辑(lu j)综合建模技巧:Verilog编码风格 第二十二页,共63页。 使用算术操作符使用算术操作符*,/和和%与使用现有构造模块的对比与使用现有构造模块的对比 乘、除、取模操作在逻辑和面积上实现代价高,但不依赖于工乘、除、取模操作在逻辑和面积上实现代价高,但不依赖于工艺;设计自定义模块完成乘、除和取模操作,可能要花费大量的艺;设计自定义模块完成乘、除和取模操作,可能要花费大量的时间,并且时间,并且RTL描述会变得与工艺相关。描述会变得与工艺相关。 注意多条赋值语句对同一个变量赋值的情况注意多条赋值语句对同一个变量赋值的情况 多条赋值语句对同一个变量赋值可能导致生成意料之外的电路。多条

25、赋值语句对同一个变量赋值可能导致生成意料之外的电路。前面的赋值可能被忽略,只最后一次赋值起作用。前面的赋值可能被忽略,只最后一次赋值起作用。 显式地定义显式地定义if-else或者或者case语句语句 在在if-else或者或者case语句中必须说明各种可能的条件分支,否则语句中必须说明各种可能的条件分支,否则可能产生可能产生(chnshng)电平敏感的锁存器,而不是多路选择器。电平敏感的锁存器,而不是多路选择器。逻辑综合建模技巧:Verilog编码(bin m)风格 第二十三页,共63页。设计设计(shj)划分划分 水平划分水平划分 使用位划分方式为逻辑使用位划分方式为逻辑(lu j)综合工

26、具提供更小的模块进行优综合工具提供更小的模块进行优化,这种方式称为水平划分。化,这种方式称为水平划分。 降低了问题的降低了问题的复杂度,为每复杂度,为每个模块产生了个模块产生了更为更为(n wi)优化的结果。优化的结果。第二十四页,共63页。 垂直划分(编写的大模块垂直划分(编写的大模块(m kui)包含多种功能)包含多种功能) 把模块把模块(m kui)按功能划分成更小的子模块按功能划分成更小的子模块(m kui)。 设计(shj)划分第二十五页,共63页。 并行化设计结构并行化设计结构 用更多的资源来生成运行速度更快的设计。用更多的资源来生成运行速度更快的设计。 将顺序将顺序(shnx)操

27、作转换成并行操作,以提高运行速操作转换成并行操作,以提高运行速度。度。 超前进位加法器超前进位加法器 比较比较 脉动进位加法器脉动进位加法器 设计(shj)划分第二十六页,共63页。 小结小结(xioji) 逻辑综合:把设计的高层次描述转换成优化的、使用工艺库中单逻辑综合:把设计的高层次描述转换成优化的、使用工艺库中单元描述的门级描述。元描述的门级描述。 并非所有的并非所有的Verilog结构都能被逻辑综合工具接受。结构都能被逻辑综合工具接受。 逻辑综合工具接受逻辑综合工具接受RTL描述、设计约束和工艺库,产生优化的门描述、设计约束和工艺库,产生优化的门级网表。级网表。 翻译、逻辑优化和工艺映

28、射是逻辑综合工具内部的过程翻译、逻辑优化和工艺映射是逻辑综合工具内部的过程(guchng),它们对用户通常是不可见的。,它们对用户通常是不可见的。第二十七页,共63页。 通过把相同的激励应用到通过把相同的激励应用到RTL描述和门级网表并比较输出描述和门级网表并比较输出结果,验证优化后的门级网表的功能。结果,验证优化后的门级网表的功能。 必须使用适当的必须使用适当的Verilog编码技术编写高效的编码技术编写高效的RTL模块。必模块。必须评估设计的各种选择须评估设计的各种选择(xunz)方案。方案。 设计划分是用于将设计分割成更小模块的重要技术。更小设计划分是用于将设计分割成更小模块的重要技术。

29、更小的模块减少了综合工具优化的复杂度。的模块减少了综合工具优化的复杂度。 精确的设计约束指定是逻辑综合的重要组成部分。精确的设计约束指定是逻辑综合的重要组成部分。 小结小结(xioji) 第二十八页,共63页。返回(fnhu)第二十九页,共63页。返回(fnhu)第三十页,共63页。第三十一页,共63页。本章学习本章学习(xux)目标目标解释在解释在Verilog仿真仿真(fn zhn)中如何使用中如何使用PLI子程子程序。序。定义用户自定义系统任务和函数以及用户自定义定义用户自定义系统任务和函数以及用户自定义C子程序。子程序。理解用户自定义系统任务的连接和调用。理解用户自定义系统任务的连接和

30、调用。从概念上解释在从概念上解释在Verilog仿真仿真(fn zhn)器内部如器内部如何表示何表示PLI。区别并描述怎样使用两类区别并描述怎样使用两类PLI库子程序:库子程序:access子子程序和程序和utility子程序。子程序。学习如何创建用户自定义系统任务和函数,并学习学习如何创建用户自定义系统任务和函数,并学习如何在仿真如何在仿真(fn zhn)中使用它们。中使用它们。第三十二页,共63页。概述概述(i sh) 在设计时,经常会遇到一些特殊情况,需要通过定义自己的系统在设计时,经常会遇到一些特殊情况,需要通过定义自己的系统任务和函数才能实现设计目标。编程语言接口提供了一组接口子任务

31、和函数才能实现设计目标。编程语言接口提供了一组接口子程序,用于访问程序,用于访问(fngwn)内部的数据表示,并可以提取仿真环境内部的数据表示,并可以提取仿真环境信息。信息。 用户自定义的系统任务和函数可以通过这组预定义的用户自定义的系统任务和函数可以通过这组预定义的PLI接口子程接口子程序来创建。序来创建。第三十三页,共63页。 Verilog PLI的发展经历了三代。的发展经历了三代。 1任务任务/函数(函数(tf_)子程序(又称实用子程序)。主要)子程序(又称实用子程序)。主要用于:用户自定义的任务和函数、实用函数、回调机制和用于:用户自定义的任务和函数、实用函数、回调机制和把数据写到输

32、出设备。把数据写到输出设备。 2存取(存取(acc_)子程序。可直接)子程序。可直接(zhji)在在Verilog HDL内部数据结构中进行面向对象的数据存取。这些子程内部数据结构中进行面向对象的数据存取。这些子程序能用于访问和修改序能用于访问和修改Verilog HDL描述的多种对象。描述的多种对象。 3Verilog过程接口(过程接口(vpi_)子程序。这些子程序是)子程序。这些子程序是acc_和和tf_子程序功能扩展的集合。子程序功能扩展的集合。概述概述(i sh)第三十四页,共63页。 难以用标准的难以用标准的Verilog结构实现系统任务和函数结构实现系统任务和函数:监控任务、监控任

33、务、激励任务、调试任务和复杂操作等。激励任务、调试任务和复杂操作等。 提取设计信息,比如层次、互连、扇出等。提取设计信息,比如层次、互连、扇出等。 编写专用或自定义的输出显示子程序。编写专用或自定义的输出显示子程序。 为仿真提供激励的子程序也可以用为仿真提供激励的子程序也可以用PLI编写。编写。 普通的基于普通的基于Verilog的应用软件的应用软件,可以与任何可以与任何Verilog仿真器一仿真器一起工作,因为起工作,因为PLI接口提供了统一接口提供了统一(tngy)的存取方式。的存取方式。概述(i sh)第三十五页,共63页。使用使用(shyng)PLI子程序的规范仿子程序的规范仿真流程真

34、流程用户自定义系用户自定义系统统(xtng)任任务连接到一个务连接到一个用户自定义用户自定义C子程序子程序以以PLIPLI接口子接口子程序标准程序标准(biozhn)(biozhn)库的方式实现库的方式实现PLI接口允许用户:接口允许用户:读取读取/ /修改内部数据结修改内部数据结构、存取仿真环境构、存取仿真环境第三十六页,共63页。PLI任务任务(rn wu)的连接和调用的连接和调用功能功能: :当系统任务当系统任务$hello_verilog$hello_verilog被调用时,输出一条消息被调用时,输出一条消息“Hello Verilog World”“Hello Verilog Wor

35、ld”。首先,实现首先,实现(shxin)(shxin)该任务的该任务的CC子程序必须用子程序必须用PLIPLI库子程序定库子程序定义。义。hello_verilog.chello_verilog.c中的子程序中的子程序hello_veriloghello_verilog如下:如下:io_printf是是PLI库子程序,其功能库子程序,其功能(gngnng)类似于类似于printf。hello_verilog是用户自定义是用户自定义C子程序子程序$hello_verilog是用户自定义系统任务是用户自定义系统任务第三十七页,共63页。 仿真器要连接到仿真器要连接到C子程序子程序hello_ve

36、rilog, 意识到存在意识到存在(cnzi)一个一个名为名为$hello_verilog的新系统任务。的新系统任务。 生成一个包含生成一个包含$hello_verilog新系统任务的特殊的二进制可执行文新系统任务的特殊的二进制可执行文件件,设文件名为设文件名为hverilog,这已不是惯用的运行仿真器的二进制可,这已不是惯用的运行仿真器的二进制可执行文件。仿真时,不要运行惯用的仿真器可执行文件(如执行文件。仿真时,不要运行惯用的仿真器可执行文件(如Verilog-XL),只需要运行),只需要运行hverilog就可以。就可以。 用户自定义任务被连接到用户自定义任务被连接到Verilog仿真器

37、中,可以像任何其他仿真器中,可以像任何其他Verilog系统任务,通过关键字系统任务,通过关键字$hello_verilog来调用。来调用。 PLI任务任务(rn wu)的连接的连接PLI任务的连接任务的连接(linji)和调用和调用第三十八页,共63页。 hello.v中定义了一个名为中定义了一个名为hello_top的的Verilog模块模块(m kui),该模块该模块(m kui)调用了用户自定义任务调用了用户自定义任务$hello_verilog: 输出结果:输出结果: PLI任务任务(rn wu)的调用的调用PLI任务的连接任务的连接(linji)和调用和调用第三十九页,共63页。P

38、LI任务任务(rn wu)的连接和调用的连接和调用 添加和调用添加和调用(dioyng)PLI任务的典型流程任务的典型流程第四十页,共63页。PLI内部内部(nib)数据表示数据表示1. 每个模块被看做一组对象类型每个模块被看做一组对象类型,对象类型是对象类型是Verilog中定义的元中定义的元素,如:素,如:2. 模块实例、模块端口、模块的端到端路径以及模块之间的路模块实例、模块端口、模块的端到端路径以及模块之间的路径径3. 顶层模块顶层模块4. 原语实例和原语端口(原语实例和原语端口(terminal)5. 线网类型(线网类型(net)、寄存器类型()、寄存器类型(register)、参数

39、类型)、参数类型(parameter和和 specparam)6. 整型、时间型和实型变量整型、时间型和实型变量7. 时序检查时序检查8. 名事件名事件 9. 每种对象类型都有一个相应集合,包含每种对象类型都有一个相应集合,包含(bohn)模块中所有该模块中所有该类型的类型的10.对象对象,所有对象类型的集合互连在一起。所有对象类型的集合互连在一起。第四十一页,共63页。PLI内部内部(nib)数据表示数据表示双向双向第四十二页,共63页。PLI内部内部(nib)数据表示数据表示包括原语实例、原语实例端口包括原语实例、原语实例端口(terminalterminal)、模块端口和网络)、模块端口

40、和网络(wnglu)(wnglu)。其他对象类型在本模块中没有出现其他对象类型在本模块中没有出现 第四十三页,共63页。第四十四页,共63页。PLI库子程序库子程序1. PLI库子程序提供了对表示设计的内部数据结构进行存取的标准库子程序提供了对表示设计的内部数据结构进行存取的标准接口接口,用户自定义用户自定义C子程序是用子程序是用PLI库子程序编写库子程序编写(binxi)的。的。2. PLI库子程序有两大类:库子程序有两大类:3. 存取子程序存取子程序-提供了对内部数据结构访问的接口,它允许用户提供了对内部数据结构访问的接口,它允许用户的的C子程序遍历数据结构并提取与设计有关的信息。子程序遍

41、历数据结构并提取与设计有关的信息。4. 5. 实用子程序实用子程序-主要用于在主要用于在Verilog和编程语言的边界之间传送和编程语言的边界之间传送数据并做一些日常管理维护工作。数据并做一些日常管理维护工作。 第四十五页,共63页。PLI库子程序库子程序详细参见详细参见Verilog HDL数字设计数字设计(shj)与综合(第二版)的附录与综合(第二版)的附录B第四十六页,共63页。PLI库子程序库子程序存取子程序通常也称为存取子程序通常也称为acc子程序。可以完成下列工作:子程序。可以完成下列工作: 1. 从内部数据结构的有关项读取特定对象的信息从内部数据结构的有关项读取特定对象的信息 2

42、. 把特定对象的信息写入内部数据结构的有关项把特定对象的信息写入内部数据结构的有关项可以读取设计中的对象的类型:可以读取设计中的对象的类型: 1.模块实例模块实例(shl)、模块端口、模块的端到端路径以及模块之、模块端口、模块的端到端路径以及模块之间的路径间的路径 2.顶层模块顶层模块 3.原语实例原语实例(shl)和原语端口和原语端口 4.网络类型(网络类型(net)、寄存器类型()、寄存器类型(register)、参数类型)、参数类型(parameter和和specparam)、整型、时间型和实型变量)、整型、时间型和实型变量 5.时序检查时序检查 6.命名事件命名事件 存取子程序存取子程

43、序第四十七页,共63页。PLI库子程序库子程序 存取子程序的特征存取子程序的特征 存取子程序总是以前缀存取子程序总是以前缀acc_开头。开头。 使用存取子程序的用户使用存取子程序的用户(yngh)自定义自定义C子程序必子程序必须调用子程序须调用子程序acc_initialize( ),以初始化环境。退出时,以初始化环境。退出时,用户用户(yngh)自定义子程序必须调用自定义子程序必须调用acc_close( )。 如果一个文件中用到存取子程序,那么必须包含头如果一个文件中用到存取子程序,那么必须包含头文件文件acc_user.h。所有存取子程序的数据类型和常量都预。所有存取子程序的数据类型和常

44、量都预定义在文件定义在文件acc_user.h中。中。 存取子程序使用句柄的概念来访问对象。对象句柄存取子程序使用句柄的概念来访问对象。对象句柄标识符由关键字标识符由关键字handle声明。声明。第四十八页,共63页。PLI库子程序库子程序 存取子程序的分类存取子程序的分类 句柄子程序。返回句柄给设计中对象,名字以前缀句柄子程序。返回句柄给设计中对象,名字以前缀acc_handle_开头。开头。 后继子程序。返回句柄给设计中特定类型对象集合中的下一个对后继子程序。返回句柄给设计中特定类型对象集合中的下一个对象。以前缀象。以前缀acc_next_开头,以引用的对象作为参数。开头,以引用的对象作为

45、参数。 值变链接(值变链接(VCL)子程序。从监视对象值变化的对象列表中添加)子程序。从监视对象值变化的对象列表中添加和删除对象。以前缀和删除对象。以前缀acc_vcl_开头,没有返回值。开头,没有返回值。 取值(取值(fetch)子程序。提取各种对象信息,比如完整的层次)子程序。提取各种对象信息,比如完整的层次(cngc)路径名、相对名以及其他属性信息。以前缀路径名、相对名以及其他属性信息。以前缀acc_fetch_开开头。头。 实用存取子程序。执行与存取子程序相关的杂项操作。如,实用存取子程序。执行与存取子程序相关的杂项操作。如,acc_initialize( )和和acc_close(

46、)都是实用子程序。都是实用子程序。 修改子程序。修改内部数据结构。可参考修改子程序。修改内部数据结构。可参考IEEE Standard Verilog Hardware Description Language文档。文档。第四十九页,共63页。PLI库子程序库子程序 存取子程序例存取子程序例1:获取:获取(huq)模块端口列表模块端口列表 功能描述:写一个用户自定义系统任务功能描述:写一个用户自定义系统任务$get_ports 寻找模块中的所有寻找模块中的所有input,output和和inout端口的完整层次名称;端口的完整层次名称;计算计算input,output和和inout端口的数目。

47、端口的数目。 这个用户自定义系统任务在这个用户自定义系统任务在Verilog中以中以$get_ports (“”)的形式调用。的形式调用。 文件文件get_ports.c的用户自定义的用户自定义C子程序子程序get_ports:第五十页,共63页。第五十一页,共63页。PLI库子程序库子程序顶层顶层(dn cn)模块:模块:仿真输出:仿真输出:第五十二页,共63页。PLI库子程序库子程序 实用子程序实用子程序实用子程序的特征实用子程序的特征 1. 实用子程序总是以前缀实用子程序总是以前缀tf_开头。开头。 2. 文件使用实用子程序,必须包含头文件文件使用实用子程序,必须包含头文件veriuse

48、r.h。实用子程序的类型实用子程序的类型 1. 获取获取Verilog系统调用任务的信息系统调用任务的信息 2. 获取参数列表信息获取参数列表信息 3. 获取参数值获取参数值 4. 把参数新值回传给调用它的系统任务把参数新值回传给调用它的系统任务 5. 监视参数值的改变监视参数值的改变 6. 获取仿真时间和被调度事件的信息获取仿真时间和被调度事件的信息 7. 执行日常执行日常(rchng)管理维护任务,例如保存工作区,管理维护任务,例如保存工作区,保存任务指针保存任务指针 8. 执行执行long类型的算术运算类型的算术运算 9. 显示信息显示信息 10. 挂起、终止、保存和恢复仿真挂起、终止、

49、保存和恢复仿真 第五十三页,共63页。PLI库子程序库子程序 实用子程序举例实用子程序举例 功能描述:定义自己的系统功能描述:定义自己的系统(xtng)任务任务$my_stop_finish,根据,根据不同的参数值,分别完成挂起和终止两项任务,如下表所示。不同的参数值,分别完成挂起和终止两项任务,如下表所示。 第五十四页,共63页。PLI库子程序库子程序1. 程序源码:见书程序源码:见书Verilog HDL数字设计与综合(第二数字设计与综合(第二版)版)P197-P1982. 顶层模块:顶层模块:3. 仿真仿真(fn zhn)输出:输出:第五十五页,共63页。实例实例(shl)(计数器)(计数器)第五十六页,共63页。第五十七页,共63页。第五十八页,共63页。models

温馨提示

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

评论

0/150

提交评论