首页 > 其他分享 >verilog 语义理解

verilog 语义理解

时间:2024-05-06 17:13:26浏览次数:17  
标签:assignment 语义 阻塞 理解 verilog always procedural 赋值

在verilog使用过程中,产生以下几个问题

  • wire 和 reg 的语义是什么,有什么不同?
  • 阻塞赋值和非阻塞赋值的语义是什么?
  • assign 和 always 语义是什么?

弄清语义是为了正确的使用,不仅是结果正确,比如有时候可能两种写法得到的结果是一样的但是从语义来看会有一种是更适合当前语境的.
我并不想陷入到这些verilog语句转化成何种可执行代码这种实现原理级别的理解,只是想了解这个语句被设计出来是为了描述何种硬件.

wire 和 reg

  • wire 属于 net类型, reg 属于variable类型.

wire: 表示结构实体之间的物理连接, 其不保存值,其值由其驱动器决定, 默认值是z
reg: 表示数据存储单元, 默认值是x

阻塞赋值和非阻塞赋值

  • continuous assignment 和 procedural assignment.

continuous assignment: 给net赋值
procedural assignment: 给variable赋值

  • 可以看到阻塞赋值和非阻塞赋值都是procedural assignment,也就是说都是给variable赋值.

阻塞赋值(blocking procedural assignment): 块是组合的,就一个触发器来触发这个组合电路,其赋值就类似net之间的赋值.
非阻塞赋值(Nonblocking procedural assignment):块是时序的,每个var都有一个触发器同时接收触发信号触发赋值.用 <= 表示.

两种方式在一个过程中不能混用, 上面的理解在混用时也能用于大部分情况,已知不适用的情况: a = b; b <= a; 这种循环依赖的, 而且b <= a; a=b和它的结果都不一样,目前认为混用是没有语义的,虽然语法上不会报错.

assign 和 always

always 实际上是和 initial task function是一起的属于structured procedures.

  • initial: start of simulation
  • always: 这里就好理解了是对应的initial的,总是可能被执行的流程
  • task 和 function 是结构化代码的方法,暂不研究.

assign: 表示 continuous assignment,

参考资料: IEEE.1364-2005

标签:assignment,语义,阻塞,理解,verilog,always,procedural,赋值
From: https://www.cnblogs.com/tggpx/p/18175417

相关文章

  • STM32F1和STM32F4系列DMA的不同之处——对STM32的DMA的工作机制的一些理解
    喜欢用STM32的DMA功能。一方面STM32的DMA和MPU的DMA一样,可以提高数据传输效率。另一方面,作为一种MCU上的DMA,它可以提高针对外设(peripheral)的数据传输的实时性,改变了传统MCU只能用定时中断实现实时控制的方法。比较STM32F4和STM32F1系列的DMA控制器,可以发现区别主要有三:1)增加了DMA......
  • wchar_t类型理解
    wchar_t(宽字符)类型1、什么是wchar_t(宽字符)char类型通常只有8位,许多语言(如中文、日文、韩文等)的字符集包含的字符数目远超过256个,因此char类型无法直接表示这些字符。其大小通常为16位或32位(具体取决于编译器和平台),wchar_t能够表示更多的字符。2、赋值方法前面多一......
  • Verilog插件:补全模块实例模板
    https://mp.weixin.qq.com/s/tiaXdddID5-hxPtJZOvm8gIntellijIDEA插件VerilogLanguageSupport(插件链接),v2024.2.0版本特性。     https://mp.weixin.qq.com/s/tiaXdddID5-hxPtJZOvm8g ......
  • 深入学习和理解Django模板层:构建动态页面
    title:深入学习和理解Django模板层:构建动态页面date:2024/5/520:53:51updated:2024/5/520:53:51categories:后端开发tags:Django模板表单处理静态文件国际化性能优化安全防护部署实践第一章:模板语法基础Django模板语法介绍Django模板语法是一种简洁而......
  • SystemVerilog -- 3.8 SystemVerilog case
    SystemVerilogcaseSystemVerilog语句检查表达式是否与多个表达式和分支中的一个匹配。该行为与Verilog中的行为相同。caseunique,unique0case所有case语句都可以由or关键字限定,以执行违规检查,就像我们在if-else-if构造中看到的那样。uniqueunique0unique并确保没有重叠的......
  • SystemVerilog -- 3.7 SystemVerilog 'unique' and 'priority' if-else
    SystemVerilog'unique'and'priority'if-else条件语句用于决定是否执行语句。ifelseSystemVerilog引入了一下用于违规检查的构造。ifelseunique-ifunique0-ifpriority-ifunique-if,unique0-ifunique-if按任意顺序评估条件,并执行以下操作:当所有条件都不匹配时,报......
  • SystemVerilog -- 3.6 SystemVerilog 'break' and 'continue'
    breakmoduletb;initialbegin//Thisforloopincrementsifrom0to9andexitfor(inti=0;i<10;i++)begin$display("Iteration[%0d]",i);//Let'screateaconditionsuchthattheforloopexitswheni......
  • SystemVerilog -- 3.5 SystemVerilog repeat
    一组给定的语句可以使用构造执行N次。repeatSyntaxrepeat(<number>)//SingleStatementrepeat(<number>)begin//MultipleStatementsendExample#1moduletb;initialbeginrepeat(5)begin$display("Repeatthisstatement");e......
  • SystemVerilog -- 3.4 SystemVerilog forever loop
    SystemVerilogforeverloop循环永远运行,或者无限时间运行。foreverSyntaxforever//Singlestatementforeverbegin//Multiplestatementsend循环类似于下面Verilog中所示的代码。两者都运行无限的仿真时间,并且在它们内部有一个延迟元件很重要。foreverAn......
  • SystemVerilog -- 3.3 SystemVerilog for loop
    SystemVerilogforloopSystemVerilog中的循环多次重复一组给定的语句,直到不满足给定的表达式。与所有其他过程块一样,循环中需要多个语句被for和forbeginend关键字括起来。SyntaxFor循环使用三步方法控制其语句的执行:初始化影响循环运行次数的变量在执行循环之前,请检查条......