Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性
相关阅读
Verilog基础
https://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
相关文章:
Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性
相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 信号爆x也许是所有IC人的噩梦,满屏的红色波形常让人头疼不已,但x信号的产生原因却常常只有几种,只要遵循一定的代码规范&#…...
穿越数据的迷宫-数据管理知识介绍
一、权威书籍介绍 《穿越数据的迷宫》 本书分12章重点阐述了数据管理的重要性,数据管理的挑战,DAMA的数据管理原则,数据伦理,数据治理,数据生命周期管理的规划和设计,数据赋能和数据维护,使用…...
3
目录 【任务 3】私有云运维开发[10 分] 【题目 1】Ansible 服务部署:部署 MariaDB 集群[2 分] 【题目 2】Ansible 服务部署:部署ELK 集群服务[2 分] 【题目 3】Python 运维开发:基于OpenStack Restful API 实现镜像上传[1 分] 【题目 4】Pyth…...
【python学习】基础篇-常用模块-multiprocessing模块:多进程
multiprocessing模块是Python标准库中用于实现多进程的模块,它提供了一些工具和类来创建和管理多个进程。 以下是multiprocessing模块的一些常用方法: Process()创建一个新的进程对象,需要传入一个函数作为该进程要执行的任务。 start()启动…...
JAVA SQL
-- /* */ -- 简单查询: -- 查询所有字段: select * from 表名 -- *:通配符,代表所有 select * from employees -- 查询部分字段: select 列名1,列名2,.. from 表名 -- 查询员工ID,员工姓名,员工的工资 select employee_id,salary,first_name from employees -- 查…...
[Linux] 进程入门
💻文章目录 📄前言计算机的结构体系与概念冯诺依曼体系结构操作系统概念目的与定位 进程概念描述进程-PCBtask_struct检查进程利用fork创建子进程 进程状态进程状态查看僵尸进程孤儿进程 📓总结 📄前言 作为一名程序员,…...
深入解析数据结构与算法之堆
文章目录 🥦引言:🥦什么是堆🥦大顶堆与小顶堆🧄大顶堆(Max Heap)🧄小顶堆(Min Heap) 🥦堆的表示🧄数组表示:🧄…...
信息化项目质量保证措施
...
es的优势
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...
sonar对webgoat进行静态扫描
安装sonar并配置 docker安装sonarqube,sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…...
opencv-重点知识
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了大量用于图像处理和计算机视觉任务的工具和算法。以下是一些OpenCV中的重点知识: 图像加载与显示: 使用cv2.imread()加载图像。使用cv2.imshow()显示…...
上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹,黄白二线有所分化,题材热点轮动表现。北证50指数大涨超3%&#…...
2.4G无线收发芯片 XL2400P使用手册
XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射 频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模 式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外…...
ZC序列理论学习及仿真
文章目录 前言一、ZC 序列理论1、基本概念2、表达式3、ZC 序列一些定义①、自相关②、循环移位③、循环自相关④、循环互相关二、ZC 序列性质1、性质 1:恒包络,即等模2、性质 2:零循环自相关3、性质 3:固定循环互相关4、其他性质①、傅里叶变换后仍是 ZC 序列②、低峰均比③…...
利用OpenCV实现图片中导线的识别
下面是一个需求,识别图片中的导线,要在图像中检测导线,我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数,如同它对直线提供的HoughLines或HoughLinesP,检测曲线通常需要更多的图像处理步骤和算法&…...
关于VITS和微软语音合成的效果展示(仙王的日常生活第1-2209章)
目录 说明微软VITS 合成效果展示 说明 自己尝试了VITS和微软这两个语音合成功能。甚至使用了微软的效果来训练VITS,出乎意料,效果居然不错,没有大佐的口音。 微软 微软中最好听的,感情最顺滑的,应该是“云希”莫属。…...
普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会
Hi~ 你有一份邀约请查收 11月22日—26日绵阳科博会 普乐蛙展位号:B馆科技体验区(1) 邀你体验趣味VR科普,探索科技新发展 第十一届中国(绵阳)科技城国际科技博览会 绵阳科博会自2013年创办以来,已连续成功举办十届,已有近7000家单位…...
行情分析——加密货币市场大盘走势(11.22)
大饼昨日晚上打了止损,笔者入场了空单,目前来看上涨乏力,下跌是必然的,昨日的下跌跌破了蓝色上涨趋势线,而今日白天开始反弹,别着急抄底,下跌还没有结束。 空单策略:入场36500 止盈…...
QT--MP3项目数据库数据表设计与实现_歌曲搜索
QSqlQuery类:...
gzip 压缩优化大 XML 响应的处理方法
当处理大型XML响应时,我们经常会面临内存限制和性能问题。 在处理这个问题时,我们可以使用Python的requests库和lxml库来解决。下面是解决方案的步骤: 1. 使用requests库发送HTTP请求获取XML响应。 2. 检查响应的Content-Encoding标头&…...
【无人机三维路径规划】基于星雀算法NOA实现复杂城市地形下无人机航路规划附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 🔥 内容介绍 一、 引…...
M9A:基于图像识别技术的《重返未来:1999》自动化游戏助手
M9A:基于图像识别技术的《重返未来:1999》自动化游戏助手 【免费下载链接】M9A 重返未来:1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A M9A是一款专为《重返未来:1999》设…...
vue基于springboot的广西旅游景点数据分析系统与设计
目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点特色功能设计数据安全措施项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 用户注册与…...
Arm Neoverse CMN S3(AE)错误处理架构与寄存器解析
1. Arm Neoverse CMN S3(AE)错误处理架构概述在现代多核SoC设计中,错误处理机制是确保系统可靠性的基石。Arm Neoverse CMN S3(AE)作为新一代互连架构,其错误处理子系统通过硬件级寄存器实现了从错误检测到恢复的全流程管理。这套机制的核心价值在于&…...
3D机械设计与物理测试集成技术解析
1. 3D机械设计与物理测试的集成分析技术概述在现代机械工程领域,3D设计与物理测试的集成已经成为提升产品开发效率的关键突破口。作为一名长期从事CAE分析的工程师,我深刻体会到传统"设计-分析-测试"串行流程的局限性——设计团队完成CAD建模和…...
Me-LLaMA:基于持续预训练的医学大语言模型构建与应用实践
1. 项目概述:当大语言模型遇上医学,Me-LLaMA如何炼成?在通用大语言模型(LLM)如ChatGPT、LLaMA等席卷全球的浪潮下,一个核心问题逐渐浮出水面:这些“通才”在处理高度专业化、容错率极低的医学领…...
基于OpenClaw与AI的智能错题管理系统:自由标签与间隔重复算法实践
1. 项目概述:一个会“思考”的错题管家备考过GRE、考研或者任何需要大量刷题考试的朋友,应该都经历过这个阶段:错题本越记越厚,但真正要复习的时候却无从下手。要么是题目抄得手酸,要么是拍了一堆照片在相册里吃灰&…...
IAPWS Python库:工业级热力学计算与工程分析的终极解决方案
IAPWS Python库:工业级热力学计算与工程分析的终极解决方案 【免费下载链接】iapws python libray for IAPWS standard calculation of water and steam properties 项目地址: https://gitcode.com/gh_mirrors/ia/iapws 你是否曾为复杂的热力学计算而头疼&am…...
【Redis】Redis——过期键删除策略、内存淘汰8种策略、LRU/LFU实现
文章目录Redis——过期键删除、内存淘汰、LRU/LFU实现一、核心概念前置区分(90%使用者的混淆点)二、Redis 过期键删除策略2.1 过期键的底层存储2.2 行业通用的3种过期删除策略2.3 Redis 实际采用的组合策略(惰性删除 定期删除)2.…...
从Word到LaTeX再回来:我的跨格式论文润色流水线(Pandoc+ChatGPT实战)
从Word到LaTeX再回来:我的跨格式论文润色流水线(PandocChatGPT实战) 学术写作中反复修改与格式调整的繁琐,相信每位研究者都深有体会。特别是当团队需要处理大量论文稿件时,如何在保持严谨格式的同时提升内容质量&…...
