RTL基本知识:如何正确在敏感信号列表中包含function中的信号

在使用Verilog建模组合逻辑时,经常会使用“@*”的方式实现将进程中素有输入信号隐含加入到敏感信号列表中。但是如果该进程中包含对函数的引用时,尽管使用“@*”,综合前后的仿真结果还是有出现不一致的情况。本文将对此进行示例说明。

1  问题示例

Verilog中可以在always后使用“@*”来代替冗长的敏感信号列表,这样做虽然在一定程度上可以保证仿真和综合的一致性,但是在一些情况下并不完全正确。例如下例,其中的函数引用了全局变量start,期望在start或者value发生变化时分别输出不同的仿真结果和信息:

仿真后的结果和信息如下:

在5ns和7ns处,全局信号start发生变化,且always语句使用了“@*”隐含增加了过程性语句中的所有信号,但是always调用的函数square2并没有执行,导致了仿真结果异常,并没有在start发生变化时输出预期的结果,显然“@*”并没有监测到start的变化。为此,对代码进行小部分修改,如下:

更多资讯,请关注个人公众号:芯光灿烂

原文地址:https://www.cnblogs.com/xgcl-wei/p/9085157.html

时间: 2024-10-07 14:01:05

RTL基本知识:如何正确在敏感信号列表中包含function中的信号的相关文章

RTL基本知识:使用枚举类型表示状态机进入死循环

在定义状态机中的状态时,除了可以使用宏(define)或者参数(parameter)声明定义外,还可以使用枚举类型,但是如果对于枚举类型使用不正确的话,极易出现编译仿真均没有报错,但是仿真时状态机跳转异常的情况.本文将针对这种情况进行示例说明并给出解决方法. 1  数据类型 在Verilog中所有的变量和线网都是4值数据类型,但在SystemVerilog中,对信号类型和数据类型进行了详细的区分,其中信号类型保持与Verilog一样,主要分为变量和线网类型,但是数据类型分为了2值类型(0和1)和

RTL基本知识:线网或变量宽度与端口宽度不匹配

在使用Verilog进行数字设计或者构建验证平台时,如果连接模块端口的线网或变量的宽度与端口定义的宽度不一致,在进行仿真时将有可能出现逻辑功能与期望不一致的情况,本文将对此类情况进行示例分析. 首先,在IEEE 1364-2001中,模块的端口对于信号的传输类似于连续赋值语句对于信号的传递,因此,对于连续赋值语句的要求也适用于信号通过端口的传递过程(对此可以理解,在具体物理实现后的是不存在模块端口的,信号将通过线网在电路中传输).其次,Verilog中,与输入端口(input)和双向端口(ino

RTL基本知识:逻辑强度模型(Logic Strength Model)

本文主要介绍HDL语言中常用的逻辑强度模型,并且以Verilog示例为主,最后介绍VHDL中常用的各种逻辑值系统.Verilog中提供了大量的模型用于模拟具体的硬件电路,例如and,or,nmos等,同时为了更加精确的模拟具体的电路信号强弱变化情况.信号的传输.充放电等行为,依据信号的逻辑强度模型,用不同的信号强度描述信号在电路传输中的状态,用以进一步提高仿真的精确度,特别是对于分析多种驱动来源同时驱动同一线网时产生的赋值冲突问题和被驱动信号的最终属性很有帮助.这种信号强度的变化在Verilog

RTL基本知识:VCD内部解剖

VCD(ValueChange Dump)是用ASCII记录了被选择信号在仿真过程中的变化情况,同时还记录了一些测试向量生成时的仿真信息,例如仿真时间精度等.目前常用的VCD主要有两种格式: 四值格式:记录了信号的数值变化情况,这里的数值仅包含0,1,x,z,不包含相关信号强度的信息; 扩展格式:记录了信号数值变化的所有情况; 本文仅以四值格式VCD为例进行详述. 1 VCD生成常用的系统任务 在Verilog中尝试用以下的系统任务保存测试向量VCD. 1.1 $dumpfile 该任务主要用来

嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B.G多一位,原因是人眼对绿色比较敏感.RAW RGB: sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布.将每一个像素的数据直接输出,即RAW RGB dataJPEG: 有些sensor

Linux信号列表

我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) S

信号在网线和集线器中的传输(《网络是怎样连接的》)

这一章主要是下面四个内容的讲解: "每个包都是独立传输的" "信号衰减的抑制非常重要" "双绞线是为了抑制噪声" "集线器将信号发往所有线路" 1. 每个包都是独立传输的 从计算机中发出来的网络包都会通过集线器.路由器等设备被转发,设备会根据包头部中的控制信息来进行转发,并不会查看数据的内容,因此,所有的包再传输到目的地的过程中都是独立的,相互之间没有任何关联. 网络包从客户端计算机发出之后,要经过集线器.交换机和路由器最终进

2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

 1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默认Term动作 a signal handling function 进程处理信号 A默认处理动作 term   中断 core    core(调试的时候产生) gcc –g file.c ulimit –c 1024 gdb a.out core ign      忽略 stop     停止

压缩感知中常用的待还原信号种类

研究压缩感知的一个基本工作就是生成原始的信号,也就是y=Ax中的x.一般来说,x是一个长度为N的列向量,稀疏度为k,其中x的非零位置组成的集合称作支撑集T. x中的非零元素集合一般独立同分布四种随机分布. 1.Uniform,开区间(0,1)上的均匀分布. 2.Signs,伯努利分布,待选集合为{-1,1},等概率选取. 3.Gaussian,标准正态分布N(0,1) 4.Power,能量法则,1/j,j=1,...,k的某个排列组合. 基于这些生成的向量,我们就可以进一步做算法研究了,比如算法