Verilog笔记(一)基础语法

来自正点原子的学习笔记
我在学习的过程中会尽量把它和C语言进行比较,毕竟有较大的相似之处

正文开始

1 基础知识

1.1 逻辑值

(数电知识)

在这里插入图片描述

1.2数字进制格式

在这里插入图片描述最终在数字电路里的数据形式都是0101的二进制
所以说这里所说的位宽全都是指的转换成二进制的位宽

没写 ’ 的话默认为32位,没写进制的话默认为d(十进制)
详细请看: FPGA-数字进制格式.

1.3标识符

几乎与C语言的规则相同

在这里插入图片描述

标识符推荐写法

在这里插入图片描述

2 数据类型

verilog不像C语言的数据类型那么多,主要有三大类数据类型
在这里插入图片描述下面依次介绍三大类型

2.1 寄存器类型

2.1.1 定义寄存器

关键字是reg,初始值为不定的
在这里插入图片描述
下面以一段定义寄存器的代码为例:
注意!结尾同C语言一样,用分号;

//eg1:
//reg define
reg [31:0] delay_cnt;   //延时函数


reg 定义寄存器的关键字
[31:0] 表示寄存器的位宽,是32位的。高位在前
delay_cnt 定义的寄存器的名称

//eg2:
reg           key_reg;    //此处默认位宽为1

2.1.2 注意

reg类型的数据只能在 always 语句和 initial 语句中被赋值!!
so 不要在定义寄存器的时候对其进行赋值!!!
注意:不像C语言,可以在定义的时候直接进行赋值

// C语言
int i =100;//在定义的时候直接进行赋值

在这里插入图片描述

2.2 线网类型

2.2.1 介绍

线网数据类型表示结构实体)之间的 物理连线,可以抽象为模块与模块之间的连线

关键字wire型和tri型,最常用的是wire类型

线网数据类型不能存储值,它的值由驱动它的元件所决定

2.2.2 驱动 线网数据类型的 元件

驱动它的元件:门、连续赋值语句、assign

如果没有驱动元件连接到线网数据类型的变量上,则该变量就是高阻的,其值为z(见1.1逻辑值)
(对比:同样不赋值,寄存器reg类型的变量的初始值是不定值x,而线网数据类型的变量的初始值是z

2.2.3 wire类型变量 定义

// wire define
wire  key_flag;

关键字wire + 标识符key_flag + ;
此处没有指定位宽,则是默认为1
可以用[1:0]l来定义位宽为2,同2.1.1代码所示

2.3 参数类型

2.3.1介绍及定义

参数类型其实就是一个常量,在Verilog HDL中用parameter定义变量
类似于C语言的define,不过此处需要用到等号还有分号
只需要要在代码

可以一次定义多个参数,之间用逗号隔开,
参数右边必须是一个常数表达式
but 此处为了代码的美观性和可读性,采用了分行定义!

// parameter define 4.3'RGB LCD
parameter   H_SYNC	=	11'd41;//行同步
parameter   H_BACK	=	11'd2;//行显示后沿
parameter   H_DISP	=	11'd480;//行有效数据
parameter   H_FRONT	=	11'd2;//行显示前沿
parameter   H_TOTAL	=	11'd525;//行扫描周期

2.3.2适用及含义

参数型数常用于表示状态机的状态,数据位宽和延迟大小等。
采用标识符来代表一个常量可以提高程序的可读性和可维护性。
在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。(类似于C语言函数参数传递)

简而言之,可以统一修改

3 运算符

Verilog 中的操作符 按照功能可分为:
1.算术运算符
2.关系运算符
3.逻辑运算符
4.条件运算符
5.位运算符
6.移位运算符
7.拼接运算符

3.1 算术运算符

在这里插入图片描述注意:1./ 除法是表示整除,小数部分被省略掉了
2.取模就是求余

3.2 关系运算符

在这里插入图片描述
注意==!(与C语言保持一致)

3.3 逻辑运算符

与 或 非
在这里插入图片描述

3.4 条件运算符(Verilog特有的运算符,其实C语言也有,只是用得少)

主要是简化了if else的写法,其实本质相同

在这里插入图片描述

3.5 位运算符

在这里插入图片描述
如果a和b的位宽不一样,会把位宽小的前面补为0
~非:取反,都懂
&与:0&0=0; 0&1=0; 1&0=0; 1&1=1,只有1和1 才为1
|或:0|0=0; 0|1=1; 1|0=1; 1|1=1,有1则为1
^ 异或:0^ 0=0, 1^ 0=1, 0 ^ 1=1, 1^1=0,不一样才为1

3.6 移位运算符

在这里插入图片描述

3.7 拼接运算符

在这里插入图片描述把a和b的低四位拼接在一起,作为新的信号:c
c的位宽为两个连接部分的和

3.8 运算符优先级

在这里插入图片描述克服优先级出错的的办法就是——多用括号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值