Verilog语言基础语法

数字进制格式

Verilog数字进制格式包括二进制,八进制,十进制,十六进制。常用为二进制,十进制,十六进制

  • 二进制表示为: 4’b101 代表4位二进制数1010
  • 十进制表示为:4’d10 代表4位十进制数10(二进制数1010)
  • 十六进制表示为4’ha 代表4位十六进制数a(二进制数1010)

4代表位宽, b o d h分别代表2、8、10、16进制(位宽默认为32)
同时可用_增加程序可读性,如16’b1010_1001_1010_1001=16’ha9a9

标识符

用于定义模块名、端口名、信号名
标识符第一个字符必须为字母或者下划线,同时标识符只能含有字母、数字、$、_。区分大小写。

数据类型

数据类型包括三大类:寄存器、线网、参数数据类型

寄存器、线网 数据类型在数字电路中真正起作用
参数 数据类型为给编译器识别的数据类型

寄存器类型

寄存器表示一个抽象的数据存储单元,可以通过赋值语句改变寄存器存储的值,关键字reg,默认初始值x,例如:

//reg  define
   reg[31:0] delay_cnt;//定义一个名称为delay_cnt的32位寄存器
   reg       key_reg;//定义一个名称为key_cnt的1位寄存器

reg类型不能在定义时赋值,只能在alwaysinitial 语句中被赋值
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器
如果该过程语句描述的是组合逻辑,即不带时钟信号,则该寄存器变量对应为硬件连线

线网类型

  1. 表示结构实体(例如门)之间的物理连线

  2. 线网类型不能存储值,它的值是由驱动它的元件决定的

    驱动元件:门、连续赋值语句、assign赋值语句等
    没有接驱动元件到线网类型变量上,变量则为高阻状态,即z

    线网类型包括wiretri类型,常用wire

// write define
wire[1:0] key_flag;//两位位宽
wire      key1_flag;//一位位宽

参数类型

本质就是一个常量,在Verilog HDL中用parameter定义常量
例如:

parameter   H_SIGN   =   11'd21;

类似于C语言中的#define,但每个参数定义的右边必须是一个常数表达式。
含义:

  1. 采用标识符代表一个常量可以提高程序可读性和可维护性
  2. 用于表示状态机状态、表示位宽、延迟大小
  3. 在模块调用中通过参数的传递改变调用模块汇总已定义的参数

运算符

Verilog语言按照功能可分为7种类型

  1. 算术运算符
    同C语言相同,包括+-*/%

  2. 关系运算符
    同C语言相同,包括<><=>===!=

  3. 逻辑运算符
    同C语言相同,包括!&&||

  4. 条件运算符
    同C语言相同,三目运算符?:
    例:a?b:c
    如果a为真,执行b
    否则执行c

  5. 位运算符
    ~ 按位取反
    &按位与
    |按位或
    ^按位异或

  6. 移位运算符
    >>右移
    <<左移
    与C语言不同点左移时位宽增加,右移位宽不变
    例:
    4’b1001 << 2 = 6’b100100
    4’b1001 >> 1 = 4’b0100

  7. 拼接运算符

符号使用方法说明
{}{a,b}将a与b拼接起来作为一个新的信号

例:c = { a , b [ 3 : 0 ] } ;
把a和 b的低4位 拼接起来

运算优先级

同C语言类似,单目运算符优先级高,多目运算符优先级依次降低
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值