Verilog_汇总_1

Verilog HDL设计方法

行为级:直接赋值;
RTL级:定义寄存器;
门电路级:定义模块,使用模块。

模块分为两种:定义的电路和测试。

Verilog常用语法

模块的结构

引入

请添加图片描述

  1. 端口定义,module-end module及其括号中的内容,对于测试文件来说,不存在括号;
  2. IO说明,对端口中的变量指定input、output以及位宽,其实也可以在端口定义中写这些内容;
  3. 内部信号声明,在这里可定义一些常量和变量;
  4. 功能定义。

端口定义

端口的连接方式有两种:

  1. blk(.a(q),.b(w),.sel(e),.out(t)):这样就不用在乎顺序了;
  2. blk(q,w,e,t):务必对应输入。

IO格式说明与内部信号声明

IO格式说明的格式为input/output [位宽-1:0] 端口名

内部信号声明常见的有reg和wire,格式为reg/wire[位宽-1:0] 变量名

关于对于端口而言,类型和输入输出可以一起写。

功能定义

  1. 实例元件;
  2. 连续赋值语句assign;
  3. 行为描述语句always。

数据类型及常量和变量

Verilog中的数制

通常默认为无符号数,在计算减法运算时,将减数视为负数,转换为补码,因为没有符号位,所以全部都是构成补码的。被减数相当于正数,所以说补码原码都一样。

有符号数进行运算时,除了一位符号位,其余都是补码。

如果只有数字的话,也就是十进制,默认为有符号数;integer也默认为有符号数。

常量

整数

  1. 二进制整数:b/B;
  2. 十进制整数:d/D;
  3. 十六进整数:h/H;
  4. 八进制整数:o/O。

常见的书写方式有:
<位宽><进制><数字>8b10101111;
<进制><数字>:o5270;默认为32位,此时位数不能超过32位;
<数字>:32;默认为32位十进制,此时位数不能超过32位且必须得是十进制数字。

其中,位宽指的是数字转化为二进制之后占用的位的大小。

x和z

逻辑值的取值可以是:

  1. 0:逻辑0或者假状态;
  2. 1:逻辑1或者真状态;
  3. x:未知状态或者不关心状态;
  4. z/?:高阻态。

x和z可以用来定义

  1. 十六进制数的4位二进制状态;
  2. 八进制的3位二进制数状态;
  3. 二进制数的1位状态。

x不能表示十进制数字。

单独一个x配上啥进制都是合理的,但是和别的数字搭配的话,对于十进制来说就是非法的。
请添加图片描述

负数

只需要在位款表达式最前面加负号。
请添加图片描述

实数

可以有十进制和科学记数法两种格式。如果采用十进制的话,小数点两边都必须有数字。
请添加图片描述

下划线

主要是用于分割数字提高可读性的,只能用于数字之间。

请添加图片描述

参数

parameter 参数名=表达式

赋值语句中的表达式只能包含常量,即数字或者parameter。

注意区别于宏定义。

字符串

双引号表示,每个被机器理解为8位ASCII值。
请添加图片描述

变量

类型符号
网格型wire、tri
寄存器型reg,integer
存储器型memery(reg的数组)

wire

  1. wire类型并不存储数据,需要与驱动器相连接;
  2. 驱动器有:门或者assign;
  3. 如果没有与驱动器连接,那么该变量就成了高阻态。
  4. wire和tri具有相同的语法格式和功能,在使用习惯上,wire用于assign或单个门,tri用于多驱动器;
  5. 模块的输入输出默认为wire;
  6. assign和输出必须是wire。

对于多驱动源,驱动一致,就是该输出;驱动不一致的话,处了高阻态于0、1,保持0、1,其余都是x。
请添加图片描述

reg

  1. reg可以存储数据;
  2. reg通过赋值语句来改变存储的值;
  3. 默认为x;
  4. always和initial的赋值对象必须为reg。

memory

定义格式为;reg [n-1:0] mem_name [m-1:0]

[n-1:0]定义了每个存储单元的大小;[m-1:0]定义了存储器中有多少寄存器。

定义了一个名为mem_name的存储器,其中有mn位的存储器单元,其地址范围是0~m-1。

需要注意的是

  1. 对存储器进行地址索引时,必须是常数表达式。
  2. 它是由n个1位reg构成的,而不是一个n位。
  3. 对其赋值时,需要进行地址索引。

Verilog HDL运算符

运算符类型符号
算术运算符+ - * / %
赋值运算符= <=
关系运算符> < <= >=
相等运算符== != ===(全等) !==
逻辑运算符&& || !
条件运算符?:
位运算符&,|,~,^(异或),^~或~^(同或)
移位运算符<< >> <<< >>>
拼接运算符{}
规约运算符& ~& | ~| ^ ~^

算术运算符

请添加图片描述

  1. 如果两个操作数有一个含x,那么结果未知;
  2. 如果两个数运算之后,超过了该有的位宽,会从低位开始进行截断;
  3. 操作数为reg或wire则是无符号数。

位运算

&与、|或、~非、^异或、~^同或

  1. 长度不同的操作数做位运算,系统会向右看齐,并给位数少的高位补0。
  2. 不要将位运算符和逻辑运算符混淆。
  3. ~是单目运算符。
  4. 异或运算符的话,有x就是x。
    请添加图片描述

逻辑运算符

&&与、||或、!非。

逻辑运算符是对整体看的,就是说只要不是零,那么在逻辑运算符看来就是1。

如果x参与其中,还得看看1和0是否是绝对的。

请添加图片描述

关系运算符

如果关系成立,输出1,如果含x,那么输出x。

请添加图片描述

相等运算符

  1. ==和!=就是普通的相等和不等,如果操作数含x或z,那么结果就是x,z的话也是x。
  2. ===和!==则把x和z看成逻辑状态,必须完全一致才是1,否则是0。

逻辑移位运算符

a<<na>>n,a是操作数,n是移动的位数,0会填补这些空白。

请添加图片描述
4位全是x,但移位的时候还是给到了0.

算术移位运算符

请添加图片描述

连接与复制操作

  1. 将多个表达式拼接成一个大的表达式;
  2. 表达式中不允许存在未指明位数的信号,因为拼接的时候必须知道;
  3. {3{a,b}}={a,b,a, b,a,b};

归约/缩减运算符

&规约与,|规约或,^规约异或,以及他们的非运算。

对单个操作数进行操作,从第1位一直到最后一位,最后结果为1位。

请添加图片描述

条件运算符

请添加图片描述
x?1001:1010 -> 10xx

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右边是我女神

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值