实名网站空间,山东正元建设网站,衙门口网站建设,网站设计排行榜相关阅读
Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、强度建模基础 Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式#xff0c;这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行… 相关阅读
Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、强度建模基础 Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行为。 强度建模可以在两个地方使用一个是连续赋值语句另一个是门级建模。一个强度由两部分组成一部分表示信号0的强度称为strength0一部分表示信号1的强度称为strength1。 strength0包括以下几种supply0供电级低电平strong0强驱动级低电平pull0上下拉级低电平weak0弱驱动级低电平以及highz0高阻级低电平。 strength1包括以下几种supply1供电级高电平strong1强驱动级高电平pull1上下拉级高电平weak1弱驱动级高电平以及highz1高阻级高电平。 需要特别注意的是(highz0, highz1)以及它的等效表示(highz1, highz0)是非法的原因也会很简单这会导致输出永远是高阻。 尽管对强度进行了这种划分但为了预测信号组合的结果可以将强度视为几个连续区域的组合。表1就展示了强度的连续性左侧列出了用于指定强度名。右侧给出了相关的强度水平。
表1 线网型信号的强度水平
强度名强度等级supply07strong06pull05large04weak03medium02small01highz00highz10small11medium12weak13large14pull15strong16supply17 在表1中有四类驱动强度 supply、strong、pull、weak这些强度是门级建模的输出net信号和连续赋值语句的左值net信号所拥有的。 在表1中还存在三类电荷储存强度large、medium、small只有在声明trireg线网型变量时能指定。 注意这里我们没有讨论highz类这是因为其比较特殊后面会进行详细说明。 可以将表1写成下面图1的比例尺形式这也是后面讨论强度建模细节的方式。 图1 强度比例尺 如果net型信号拥有确定的值1则其强度应该全部由strength1部分的强度水平组成不能包括highz1。如果net型信号拥有确定的值0则其强度应该全部由strength0部分的强度水平组成不能包括highz0。如果一个net型信号的值是x则其部分拥有strength0的强度部分拥有strength1的强度比如一个Stx信号指的是一个强度范围从strong0到strong1的信号。如果net型信号拥有值z则代表其强度一定是highz类至于是highz0还是highz1我们一般不做区分。另外还有两种特殊的信号值H和L这会在后面进行说明。 二、门级建模和连续赋值语句引入的强度 在上一节我们介绍了强度建模的引入方式下面进行详细阐述。首先给出门级建模和连续赋值语句语法的BNF范式如图2和图3所示。有关BNF范式的相关内容可以看笔者的以往文章。 图2 门级建模语法的BNF范式 图3 连续赋值语句语法的BNF范式 在图2和图3中我们可以看到驱动强度[drive_strength]是门级建模和连续赋值语句的可选项如果不指定驱动强度[drive_strength]则默认驱动强度为(strong0, strong1)。还要注意的是对于net声明连续赋值语句同样可以使用驱动强度[drive_strength]这与普通的连续赋值语句没有区别。 有了语法的基础下面就可以举例说明驱动强度的基本概念了。
wire a, b, c, d, e;
assign a 1; //net型信号a拥有单个强度strong拥有信号值1用St1表示
assign (strong1, strong0) a 1; //与上面的形式等价
assign (strong0, strong1) a 1; //与上面的形式等价
assign (weak0, strong1) a 0; //net型信号a拥有单个强度weak拥有信号值0用We0表示
assign b 1bx; //net型信号b拥有强度范围strong0到strong1拥有信号值x用Stx表示
assign (weak0, pull1) b 1bx; //net型信号b拥有强度范围weak0到pull1拥有信号值x用35x表示
assign c 1bz; //net型信号c拥有强度hignz拥有信号值z用HiZ表示
not (pull0, weak1) (d, 1b0); //net型信号d拥有单个强度pull拥有信号值0用Pu0表示
wire (weak0, supply1) e 1b0; //net型信号e拥有单个强度weak拥有信号值0用We0表示//尽管我们的例子全部是变量net但是对于矢量net同样适用 这里要注意的是不管是连续赋值的左值net型信号还是门级建模的输出信号信号的值是由输出决定的而和输入或指定的驱动强度无关这很好理解因为输入可以是没有驱动强度的variable型信号比如reg型信号而指定的强度相当于只是给结果附上了一个属性而不影响结果的值下面举例说明。
wire a, b;
assign (pull1, supply0) b 1b0; //b的强度是supply值是0用Su0表示
assign (pull0, supply1) a b; //a的强度是pull值是0用Pu0表示a的强度与b的强度无关a的值与b的值有关 下一章
Verilog基础强度建模二-CSDN博客首先来说明一下什么叫信号拥有单个强度和确定值其实如果一个net型信号拥有单个强度那它一定拥有确定值。首先我们把上一章中的比例尺给出如图4所示。下面举例说明单个强度和确定值的定义。https://blog.csdn.net/weixin_45791458/article/details/135704743?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135704743%22%2C%22source%22%3A%22weixin_45791458%22%7D