Verilog 语法小结

Verilog 语法小结

下面的内容是常用的Verilog语法小结。

数据类型语法小结

  1. wire型数据通常用assign关键字进行赋值。wire只能被assign连续赋值,reg只能在initial和always中赋值。input端口只能定义成wire型。如果端口没有声明,则默认是wire线网型,且输入端口只能是wire线网型。
  2. reg是寄存器数据类型的关键字。寄存器是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值,相当于改变触发器存储的值。reg型常用来表示always模块内的指定信号,代表触发器。在always块内被赋值的每一个信号都必须定义为reg型,即赋值操作符的左端变量必须是reg型。
  3. 所谓的always必须用reg的意思是always里面的赋值语句中的被赋值变量为reg型,而不是说在always里面出现的变量都为reg型。
  4. reg型与wire型的区别在于:reg型保持最后一次的赋值,而wire型需要持续的驱动。
  5. memory型通过对reg型变量建立数组以对存储器建模。reg [n-1:0]的存储器名[m-1:0] reg [n-1:0]定义了存储器中每一个存储单元的大小,即该存储器单元是一个n位宽的寄存器,[m-1:0]代表了存储器的大小,即该存储器中有多少个这样的存储器。
  6. 一个n位寄存器可以在一条赋值语句中直接赋值,而一个完整的存储器则不行,如果要对memory型存储单元进行读写,则必须要指定地址。
  7. 用parameter定义常量。

数制表示语法小结

  1. 下划线‘_’可以随意用在整数和实数中,没有实际意义,只是为了提高可读性。例如56等效于5\_6
  2. 整数负数使用补码形式表示,而不能表示为诸如:16'h-9之类的形式。
  3. 在进行基本算数运算时,如果某一操作数有不确定的值X,则运算结果也是不确定值X

赋值过程语法小结

  1. 连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值。一个线网型变量一旦被连续赋值语句赋值之后,赋值语句有段的赋值表达式将持续对被赋值的变量产生连续驱动。只有右端表达式中任一操作数的值发生变化,就会立即触发对被赋值变量的更新操作。
  2. 过程赋值主要用于两种结构化模式(initial模块和always模块)中的赋值语句。在过程块中只能使用过程赋值语句(不能在过程块中出现连续赋值语句),同时过程赋值语句也只能用在过程赋值模块中。
  3. 过程赋值语句只能对寄存器类型的变量(reg、integer、real和time)进行操作,经过赋值后,上面这些变量的取值将保持不变,直道另一条赋值语句对变量重新赋值为止。
  4. memory型只能对制定地址单元的整个字进行赋值,不能对其中的某些位单独赋值。
  5. 在关系运算符中,若某个操作数的值不定,则关系是模糊的,返回的是不定值X
  6. 实例算子===!==可以用于比较含有XZ的操作数,在模块的功能仿真中有着广泛应用。
  7. 对组合逻辑建模采用阻塞赋值;对时序逻辑建模采用非阻塞赋值;用多个always块分别对组合和时序逻辑建模;尽量不要在同一个always块内混合使用阻塞赋值和非阻塞赋值,如果在同一个always块里面既为组合逻辑,又为时序逻辑建模,应使用非阻塞赋值;不要在多个always块中为同一个变量赋值。

结构描述小结

  1. 一个程序可以有多个initial模块、always模块、task模块和function模块。initial模块和always模块都是同事并行执行的,区别在于inital模块只执行一次,而always模块则是不断重复运行,task模块和function模块能被多次调用。initial模块式面向仿真的,是不可综合的。
  2. begin……end块定义语句中的语句是串行执行的,而fork……join语句块中的语句是并行执行的。
  3. 利用always实现组合逻辑时,要将所有的信号放进敏感列表中,而实现时序逻辑时却不一定要将所有的结果放进敏感信号列表中。
  4. 延时控制只能在仿真中使用,是不可综合的,在综合时,所有的延时控制都会被忽略。
  5. if语句中的else不能省,case语句的default分支虽然可以默认,但一般不要默认(这条与笔者的习惯不同,笔者习惯带有默认)。
  6. case语句中的分支是并行执行的,各个分支没有优先级,而if语句的选择分支是串行执行的。
  7. forever循环语句用于连续执行过程语句,必须写在initial模块中。
  8. repeat循环语句执行指定循环数,如果循环计数表达式的值不确定,即为X或Z时,那么循环次数按0处理。

Verilog实现相关小结

  1. 组合逻辑电路在逻辑功能上的特点是:任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。而时序逻辑电路在逻辑功能上的特点是:任意时刻的输出不仅取决于当时的输入信号,而且还取决与电路原来的状态,或者说,还与以前的输入有关。
  2. 状态机一般包括组合逻辑和寄存器逻辑部两部分。组合电路用于状态译码和产生输出信号,寄存器用于存储状态。
  3. 所谓高阻是输出端属于浮空状态,只有很小的漏电流流动,其电平随外部电平高低而定,门电平放弃对输出电路的控制或者可以理解为输出与电路是断开的。双向引脚的输出就是在不使能情况下,输出为高阻,而在使能情况下输出为正常。

参考

本文主要内容来自《通信IC设计》,仅用于学习参考。

2021-04-13.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShareWow丶

前人栽树,分享知识,传播快乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值