Verilog基本语法——运算符和表达式
2017-09-18 05:58
288 查看
本文是Verilog学习笔记,参考于《Xilinx FPGA开发实用教程》和夏宇闻老师的Verilog经典教程系列
在Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为三种:
1) 单目运算符(unary operator):带一个操作数,操作数放在运算符的右边。
2) 二目运算符(binary operator):带二个操作数,操作数放在运算符的两边。
3) 三目运算符(ternary operator):带三个操作,这三个操作数用三目运算符分隔开。
1. + ———— 加法运算符或正值运算符(s1+s2,+3)
2. - ———— 减法运算符或负值运算符(s1-s2,-5)
3. * ———— 乘法运算符(s1*3)
4. / ———— 除法运算符(s1/3)
5. % ———— 模运算符(s1%3)
基本语法格式:
基本格式为:
<赋值操作符>是”=”或”<=”(分别代表了阻塞赋值和非阻塞赋值)
过程赋值变量只能对寄存器类型变量(reg,integer,real和time)进行操作
1. > ———— 大于;
2. >= ———— 大于等于;
3. < ———— 小于;
4. <= ———— 小于等于
5. == ———— 逻辑相等
6. != ————逻辑不相等
7. === ———— 实例相等
8. !== ———— 实例不相等
在进行关系运算符时,如果操作数之间的关系成立,返回值为1;关系不成立,则返回值为0;若一个操作数的值不定,则关系是模糊的,返回值是不定值X
1. && 逻辑与
2. || 逻辑或
3. ! 逻辑非
“&&”和”||”是双目运算符,它要求有两个操作数,”!”是单目运算符,只要求一个操作数
三个操作数,若x是True(1),返回a,否则返回b
1,0,x,z.在电路中信号进行与或非时,反映在Verilog HDL中则是相应的操作数的位运算
逻辑运算符:
1. ~ ———— 非
2. & ———— 与
3. | ———— 或
4. ^ ———— 异或
5. ^~ ———— 同或
6. ~& ———— 与非
7. ~| ———— 或非
1. “<<” ———— 左移 (左移一位 相当于乘2)
2. “<<” ———— 右移 (右移一位 相当于除2)
格式:
格式:
将某些信号的某些位详细地列出来,中间用逗号隔开,最后一个大括号表示一个整体信号
约简运算符对单个操作数进行运算,最后返回一位数,运算过程:将操作数第一位和第二位进行与或非运算;再将第二位和第三位进行与或非运算直到最后一位
在Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为三种:
1) 单目运算符(unary operator):带一个操作数,操作数放在运算符的右边。
2) 二目运算符(binary operator):带二个操作数,操作数放在运算符的两边。
3) 三目运算符(ternary operator):带三个操作,这三个操作数用三目运算符分隔开。
1.基本的算术运算符
在Verilog HDL语言中,算术运算符又称为二进制运算符,共有下面五种:1. + ———— 加法运算符或正值运算符(s1+s2,+3)
2. - ———— 减法运算符或负值运算符(s1-s2,-5)
3. * ———— 乘法运算符(s1*3)
4. / ———— 除法运算符(s1/3)
5. % ———— 模运算符(s1%3)
2. 赋值运算符
赋值运算符分为连续赋值和过程赋值两种2.1 连续赋值
连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值基本语法格式:
线网型变量类型[线网型变量位宽] 线网型变量名; assign #(延时量) 线网型变量名 = 赋值表达式 // wire a; // assign a = 1'b1
2.2 过程赋值
过程赋值主要用于两种结构化模块(initial模块和always模块)中的赋值语句。在过程块中只能使用过程赋值语句(不能在过程块中出现连续赋值语句),同时过程赋值语句也只能用在过程赋值模块中基本格式为:
<被赋值变量><赋值操作符><赋值表达式> // reg c; // always @(a) // begin // c = 1'n0; // end
<赋值操作符>是”=”或”<=”(分别代表了阻塞赋值和非阻塞赋值)
过程赋值变量只能对寄存器类型变量(reg,integer,real和time)进行操作
2.3 关系运算符
关系运算符公有以下8种:1. > ———— 大于;
2. >= ———— 大于等于;
3. < ———— 小于;
4. <= ———— 小于等于
5. == ———— 逻辑相等
6. != ————逻辑不相等
7. === ———— 实例相等
8. !== ———— 实例不相等
在进行关系运算符时,如果操作数之间的关系成立,返回值为1;关系不成立,则返回值为0;若一个操作数的值不定,则关系是模糊的,返回值是不定值X
2.4 逻辑运算符
在Verilog HDL语言中存在三种逻辑运算符:1. && 逻辑与
2. || 逻辑或
3. ! 逻辑非
“&&”和”||”是双目运算符,它要求有两个操作数,”!”是单目运算符,只要求一个操作数
2.5 条件运算符
条件运算符格式:y = x ? a : b
三个操作数,若x是True(1),返回a,否则返回b
2.6 位运算符
针对硬件电路而言,在硬件电路中信号有四种状态值1,0,x,z.在电路中信号进行与或非时,反映在Verilog HDL中则是相应的操作数的位运算
逻辑运算符:
1. ~ ———— 非
2. & ———— 与
3. | ———— 或
4. ^ ———— 异或
5. ^~ ———— 同或
6. ~& ———— 与非
7. ~| ———— 或非
2.7 移位运算符
移位运算符:1. “<<” ———— 左移 (左移一位 相当于乘2)
2. “<<” ———— 右移 (右移一位 相当于除2)
格式:
s1<<N S1>>N
2.8 拼接运算符
拼接运算符可以将两个或更多信号的某位并接起来进行运算操作格式:
{s1 , s2 , ... , sn}
将某些信号的某些位详细地列出来,中间用逗号隔开,最后一个大括号表示一个整体信号
2.9 一元约简运算符
一元约简运算符是单目运算符,其运算规则类似于位运算符中的与、或、非,但其运算过程不同约简运算符对单个操作数进行运算,最后返回一位数,运算过程:将操作数第一位和第二位进行与或非运算;再将第二位和第三位进行与或非运算直到最后一位
reg [3:0]s1; reg s2; s2 = &s1; //&为一元约简运算符"与"
相关文章推荐
- Python笔记——基本语法:标识符、数据类型、变量、运算符及表达式/编码风格
- Verilog学习笔记基本语法篇(二)·········运算符
- Java基本语法--数据类型、运算符表达式、基本控制语句、数组使用以及练习
- Python笔记——基本语法:标识符、数据类型、变量、运算符及表达式/编码风格
- (C#基本语法)4.运算符与表达式
- JavaScript---基本语法学习(一)JavaScript概述、Java和JavaScript的区别、和HTML结合方式、数据类型、运算符和表达式
- 正则表达式基本语法
- PHP学习笔记:3.PHP基本语法详解---运算符
- 实训1/6 Python基本语法、变量、运算符
- (1)正则表达式 基本的语法字符
- Javascript中正则表达式的使用及基本语法
- 正则表达式的基本语法
- php:正则表达式的基本语法
- Verilog学习笔记基本语法篇(一)·········数据类型
- 正则表达式的基本语法
- 正则表达式基本语法
- 正则表达式的基本语法
- Swift2.1 语法指南——基本运算符
- 正则表达式的基本语法
- 正则表达式的基本语法