Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性

相关阅读

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        信号爆x也许是所有IC人的噩梦,满屏的红色波形常让人头疼不已,但x信号的产生原因却常常只有几种,只要遵循一定的代码规范,就可以避免产生信号中出现x的问题。

        最常见问题就是使用了未初始化的reg型变量,因为reg型变量在被创建后使用默认值x。如果在初始化变量之前在其他地方提前使用了,便有可能造成x态的传播。为了避免,可以给所有时序逻辑中用到的reg型变量赋初值(不可综合),但更为推荐的是为所有时序逻辑中使用到的reg型变量添加复位逻辑(可综合)并确保复位,如下所示。对于组合逻辑中使用到的reg型变量,只需要确保始终有正确的驱动即可。

reg a = 0;reg b;always@(posedge clk, negedge rst_n)beginif(rst_n)b <= 0;elseb <= ***;
end

        连续赋值语句也可能会导致x信号的产生,在连续赋值语句对wire型线网赋值时,如果出现了多个驱动源同时驱动为不同的值(除z外,因为z看做没有驱动)时,会显示为不定态,直到多个驱动不冲突,如下所示。

//一个很幼稚的例子
assign a = 1'b0;
assign a = 1'b1; //赋值冲突,所以a的值为x//一个依旧很幼稚的例子
initial beginb = 1'b0;c = 1'b1;
endassign a = b;
assign a = c; //同样是赋值冲突,所以a的值为x//一个复杂一点的例子
wire  a;
reg b, c;
initial beginb = 1'b0;c = 1'b0;#5 c = 1'b1;#5 c = 1'b0;#5 c = 1'b1;#5 c = 1'b0;
endassign a = b;
assign a = c; //因为有时冲突,有时不冲突,所以a的值交替为0和x,最后为0//一个迷惑一点的例子
wire  a;
reg b, c;
initial beginb = 1'b0;c = 1'b0;#25;#5 c = 1'b1;#5 c = 1'b0;#5 c = 1'b1;#5 c = 1'b0;
endassign a = b;
assign #20 a  = c; //因为连续赋值有延迟,而25ns后每次c改变的脉冲都小于20ns,所以没有进行赋值,最后的c值为0,因此a的值一直是0

        有些运算也可能会产生x信号,下面简单介绍,但需要注意的是,他们大多只是x信号的传播者,而不是x信号的制造者。

算数操作符+、-、*、/、%、**

        对于算术运算符,当操作符的操作数中出现了x时,无论原本结果是否可能全部或部分确认,结果全为x值。

a = 3'b001;
b = 3'bx01;    
$display("result is %b",a+b);//结果为xxxa = 3'bx01;
b = 3'b000;    
$display("result is %b",a*b);//结果为xxx

比较运算符<、<=、>、>=、===、!==、==、!=

        对于<、<=、>、>=、==、!=,它们的比较结果是0或1,但是如果操作数中存在x,比较结果为x。

        对于===、!==,它们严格比较两个操作数中的x,因此结果只能为0或1。。

b = 3'b111;
c = 3'b0x1;    
$display("result is %b",b<c);//结果为xb = 3'b0x1;
c = 3'b0x1;    
$display("result is %b",b===c);//结果为1

逻辑操作符&&、||、!

        逻辑运算符的运算结果为0或1,但是如果操作数中存在x,结果为x。

b = 3'b0x1;
c = 3'b001;    
$display("result is %b",b&&c);//结果为xc = 3'b0x1;    
$display("result is %b",!c);//结果为x

位运算操作符&、|、^、~^、~

        位运算符按位对操作数进行操作,注意对于这些运算符,某位的x不会影响其他非x位的结果。且x与1为x,x与0为0,x或1为1,x或0为x。对于异或、同或和取反运算,x位的结果是x。

b = 3'b0x1;
c = 3'bx11;    
$display("result is %b",b&c);//结果为0x1b = 3'b0x1;
c = 3'bx11;    
$display("result is %b",b^c);//结果为xx0

规约运算符&、|、^、~&、~&、~^

        规约运算符的运算结果为0或1,对于&,如果操作数中存在0,结果为0(不管是否含有x),对于|,如果操作数中存在1,结果为1(不管是否含有x)。其他情况下,如果操作数中有x,结果为x。

b = 3'bx10;    
$display("result is %b",|b);//结果为1b = 3'bx10;    
$display("result is %b",&b);//结果为0b = 3'bx10;    
$display("result is %b",^b);//结果为x

移位操作符<<、>>、<<<、>>>

        <<、>>为逻辑移位,即补0移位。而<<<、>>>为算数移位,对于有符号的操作数,算数右移>>>时会在左边补符号位(最高位),其他情况下,算数移位和逻辑移位效果一样。

        当移位操作符的右操作数中有x时,结果为x。

b = 3'b1x1;   $display("result is %b",b>>1'bx);//结果为xxxb = 3'b1x1;   $display("result is %b",b<<1);//结果为x10signed reg b;
b = 3'bx01;   $display("result is %b",b>>>1);//结果为xx0

条件运算符?:

        当条件中因为有x无法确定是否为0时,结果会含有x,但不一定全是x。对于这一点,感兴趣的可以看往期文章,有关于表达式位宽和符号拓展的讨论。

b = 3'b0x;   
$display("result is %b",b?2'sb1:2'sb0);//结果为xxb = 3'b1x;   
$display("result is %b",b?1'sb1:2'sb0);//结果为11(符号拓展)b = 3'b0x;   
$display("result is %b",b?2'b1:2'b0);//结果为0x(补零拓展)

连接运算符{}

        对于连接运算符,某一位的x不会影响其他位。

$display("result is %b",{1'bx,3'b111});//结果为x111

向量的位选、域选

         当位选超出界限时,会返回x。当域选超出界限时,超出的部分会用x填充。当数组索引超出界限时,结果全为x。

b = 3'b111;   
$display("result is %b",b[3]);//结果为xb = 3'b111;   
$display("result is %b",b[4:2]);//结果为xx1reg [2:0] c [1:0]
c[0] = 3'b000;
c[1] = 3'b111;
$display("result is %b",c[2]]);//结果为xxx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/189122.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙和Android的开发区别

鸿蒙系统&#xff08;HarmonyOS&#xff09;和Android系统都是移动设备领域的操作系统&#xff0c;但它们有一些重要的区别。以下是鸿蒙系统与Android系统的一些不同点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c…

美国服务器:全面剖析其主要优点与潜在缺点

​  服务器是网站搭建的灵魂。信息化的今天&#xff0c;我们仍需要它来为网站和应用程序提供稳定的运行环境。而美国作为全球信息技术靠前的国家之一&#xff0c;其服务器市场备受关注。那么&#xff0c;美国服务器究竟有哪些主要优点和潜在缺点呢? 优点 数据中心基础设施&a…

笔记54:门控循环单元 GRU

本地笔记地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章&#xff1a;动手学深度学习~现代循环神经网络 a a a a a a a

再学动态规划

先用一张图来理一下动态规划大纲 参考&#xff1a;https://www.zhihu.com/question/291280715/answer/1007691283 动态规划五个步骤 参考&#xff1a;https://www.zhihu.com/question/25814123 ①判断题目能否用动规解法 ②确定状态 最后一步 子问题 ③转移方程 ④确定初始条…

MHA高可用

MHA&#xff1a; 什么是MHA&#xff1a;masterhight availabulity:基于主库的高可用环境下&#xff1a;主从复制&#xff0c;故障恢复 有一个主从的架构。 MHA实验要求&#xff0c;最少有一主两从 Mysql的单点故障问题&#xff0c;一旦主库崩溃&#xff0c;MHA可以在0-30S内…

LabVIEW编程开发NI-USRP

LabVIEW编程开发NI-USRP 可编程性是SDR的关键特性&#xff0c;它使人们能够将无线电外围设备转换为先进的无线系统。USRP是市场上最开放、最通用的SDR&#xff0c;可帮助工程师在主机和FPGA上使用各种软件开发工具构建系统。 有多种选项可用于对基于SDR的系统的主机进行编程。…

nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限&#xff0c;普通员工没有。系统包含新闻功能&#xff0c;最好是有个后台管理&#xff0c;在后台输入新闻标题和内容&#xff0c;插入图片&#xff0c;在网页上就可以展示。最好再有个轮播图。 新闻…

如何创建react项目

可以直接通过react脚手架进行创建 首先确保自己是否安装了create-react-app npm install -g create-react-app 如果安装不成功有可能是有缓存&#xff0c;可以先清除缓存再重新安装 npm cache clean --force 安装成功后就可以使用脚手架创建自己的项目,my-react就是我的项…

echarts 实现分割型柱状图示例

该示例有如下几个特点&#xff1a; ①实现数据过多时滚动展示&#xff08;echarts 数据过多时展示滚动条-CSDN博客&#xff09; ②实现tooltip自定义样式&#xff08;echarts 实现tooltip提示框样式自定义-CSDN博客&#xff09; ③鼠标放置时柱状图颜色更改 代码如下&#xff…

利用邮件营销提升电商营业额的策略与方法

随着电子商务的迅速发展&#xff0c;各种推广和营销手段层出不穷&#xff0c;但在这个信息泛滥的时代&#xff0c;如何有效地吸引用户关注并提升电商的营业额成为了每一个电商人关注的焦点。而邮件营销正是一个被广泛应用且具有潜力的推广方式。通过合理规划和执行邮件营销策略…

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后&#xff0c;生成的一串字符&#xff0c;可用于区分文件。 作用&#xff1a;善用文件的哈希值&#xff0c;解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

各品牌PLC元件在modbus内区域

1台达&#xff1a; 输出在0区&#xff0c; 040961是在 0区 0xA000~0xA0FF 【Y0~Y377】 输入在1区&#xff0c;124577是在 1区 0x6000~0x60FF 【X0~X377】 M寄存器0区&#xff0c;0000001是 0区&#xff0c;0x000~0x1FFF 【M0~M8191】 D寄存器4区&#xff0c;400000…