verilog 移位运算符 说明_Verilog HDL的基本语法
I/O声明
输入声明
input[msb:lsb]端口1,端口2,端口3,……
输出声明
output[msb:lsb]端口1,端口2,端口3,……
输入输出声明
inout[msb:lsb]端口1,端口2,端口3,……
信号类型声明
常用的信号类型有连线性(wire)、寄存器型(reg)、整形(integer)、实型(real)、时间型(time)等
功能描述
1.用assign语句实现 eg.assgin a=b&c;
2.用实例元件实现 eg. and u1(q,a,b) 其中a,b为输入,q为输出
3.用always块实现带有异步清除端的D触发器
always @(posedge clk or posedge clr)
begin
if(clk)q<=0;
else q<=d;
end
用initial块实现,与always块语句类似,不过在程序中initial块语句只能被执行一次,一般用于电路的初始化
常量
整形常量
x:未知,z:高阻
6'B10X1Z0 //6位二进制数
92 //十进制数
'H67 //位宽为32位的十六进制数
5'O37 //5位八进制数
实行常量
7.56 ,34.56e2 6E-2
字符串常量
"hello!"
\n换行符
\t制表符Tab键
\\符号\
\*符号*
\ddd 三位八进制数表示的ASCII码
%%符号%
参数常量
parameter PI=3.14,A=8'B10110101,WORD_LENGTH=16;
变量
wire型
输入、输出信号在默认情况下自动定义为wire型
wire[msb:lsb]变量1,变量2,…,变量n
eg.wire[7:0]m,n;
reg型
reg[msb:lsb]变量1,变量2,…,变量n
eg.reg[7:0]m,n;
reg型变量和wire型变量的区别是:wire型变量需要持续地驱动,而reg型变量保持最后一次的赋值
memory型
memory型是存储器型,是通过建立reg型数组来描述的
eg.
reg[8:1]RAM[3:0];
RAM[0]=8'H1A;
RAM[1]=8'H00;
RAM[2]=8'H55;
RAM[3]=8'H31;
integer型
integer是32位带符号整形变量,用于对循环控制变量的说明,典型应用是高层次的行为建模,它与后面的time和real类型一样是不可综合的,也就是说这些类型是数学的抽象描述,不与任何物理电路相对应。
eg.integer d[1:8];//定义了一个含有8个数据的整形数组
time型
time类型用于储存和处理时间,是64位无符号数
time 变量1,变量2,…,变量n;
real型
real型是64位带符号实型变量,用于储存和处理实型数据
real 变量1,变量2,…,变量n;
运算符
算术运算符
+,-,*,/,%
逻辑运算符
&&,||,!
关系运算符
,>=
等值运算符
==逻辑相等,!=逻辑不等(可能为1,0,x),===全等(按位比较),!==非全等
位运算符
~,&,~&,|,~|,^(异或),~^(同或)
缩减运算符
~,&,~&,|,~|,^(异或),~^(同或)
缩减运算符与逻辑运算符的法则是一样的,但缩减运算符是对单一操作数按位进行逻辑递推运算的,运算结果为1位二进制数。
移位运算符
>>,<<
eg.
i=8;
m=3;
i<
i>>m;//结果为1
条件运算符
条件? 表达式1:表达式2
eg.
a=10,b=20;
y=a>b?a:b;
拼接运算符
X={a[7:4],b[3],c[2:0]};
运算符的优先级
赋值语句
连续赋值语句
连续赋值语句用来驱动wire型变量,这个变量必须事先定义过。
eg.
wire a,b,c;
assign c=a&b;
过程赋值语句
过程赋值语句是在initial或者always语句块内赋值的,它对reg型、memory型、integer型、time型、real型变量进行赋值,这些变量在下一次过程赋值之前保持原来的值。
阻塞型赋值
在该语句结束时就完成赋值操作
变量=赋值语句;
非阻塞型赋值
在块结束时才完成赋值操作
变量<=赋值语句;
条件语句
if else语句
case语句
case(控制表达式)
分支表达式1:语句1;
分支表达式2:语句2;
分支表达式3:语句3;
…
分支表达式m:语句m;
default:语句n
endcase
循环语句
forever循环语句
forever循环语句常用语产生周期性的波形,与always不同的地方在于它不能独立写在程序中,必须写在initial块中,常用于产生仿真测试信号。
eg.
initial
begin
clock
= 0;
#
5 forever
#
10 clock = ~ clock;
end
repeat循环语句
repeat循环语句是用于执行指定循环次数的过程语句,格式如下:
repeat(表达式)语句
eg.
initial
begin
s=0;
i=1;
repeat(100)
begin
s=s+i;
i=i+1
end
end
while循环语句
while循环执行过程中赋值语句直到指定的条件为假
for循环语句
结构声明语句
initial说明语句
initial语句常用于对各变量的初始化,一个程序模块中可以有多个initial语句,所有的initial语句在程序一开始同时执行,并且只执行一次。
always说明语句
always语句和initial语句一样可以有多个always语句,always语句也是在程序一开始的时候就被执行,不同的是always语句不断重复运行。但是always语句后跟的语句是否执行,要看其敏感事件列表是否满足,若有条件满足,则运行一次语句。电平触发的always块常用于说明组合逻辑的行为,而在边沿触发的always块常用于描述时序行为。
eg.
reg[7:0] count
always @(posedge clk)
begin
count=count+1b'1;
end
task说明语句
任务类似于高级语言中的子程序,用来单独完成某项任务,并被其他模块或者其他任务调用。
任务定义
task 任务名;
端口声明语句;
类型声明语句;
语句;
endtask
任务调用
任务名(端口名列表);
任务的定义和调用必须在同一个模块内
任务定义时,task语句后没有端口名列表,输入输出端口名是通过端口声明语句进行顺序声明的;一个任务也可以没有输入输出端口
当任务被调用时,任务被激活,如果一个任务有输入输出端口,调用时需列出端口名列表,其顺序和类型应该与任务定义中的完全一致
进行任务调用时参数的传递是按值传递的,不能按地址传递
一个任务可以调用别的任务或函数,可调用的任务和函数的个数不受限制
function说明语句
function语句用来定义函数,单独完成某项具体的 操作。
函数的定义
function 函数名;
端口声明语句;
类型声明语句;
语句;
endfunction
函数的调用
函数名(端口名列表)
函数只能有一个返回值,而任务可以有多个或者没有返回值。
函数至少有一个输入变量
函数只能与主模块共用一个仿真时间,而任务可以定义自己的仿真时间单位
函数不能调用任务,而任务能调用其他函数或任务
编译预处理语句
宏定义('define和'undef)
eg.
'define BYTE 8
…
wire ['BYTE-1:0]bus;
…
'undef BYTE
文件包含('include)
eg.
'include "d:\eda\s1.v"
时间尺度('timescale)
eg.
'timescal 10ns/100ps
…
always #1.55 clock=~clock;
条件编译('ifdef,'else,'endif)
eg.
'ifdef COMPUTER_SIZE-PC
parameter
WORD_SIZE=16
'else
parameter
WORD_SIZE=32
'endif
模块化设计
module count_dec(clk,clr,en,cout,q);
input clk,clr,en;
output [15:0]q;
output cout;
reg[15:0]q;
reg cout;
wire[3:0]q1,q2;
wire x;
count4 u1(clk,clr,en,x,q1);
count4 u2(clk,clr,x,cout,q2);
dec_seg7 u3(q1,q[7:0]);
dec_seg7 u4(q2,q[15:8]);
endmoudle
verilog 移位运算符 说明_Verilog HDL的基本语法相关推荐
- verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...
Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符+,-,*,/,% 优先顺序 !~ * / % + - << >& ...
- verilog 移位运算符 说明_FPGA、数字IC系列(2)——电子科大与北航部分Verilog题目与解析...
1. 在不影响逻辑功能的情况下, CMOS与非门的多余输入端可 ______. A.接高电平 B.接低电平 C.悬空 D.通过电阻接地 答案 :A 解析 :CMOS与非门,只要有一个输入端为低电平,与 ...
- Verilog移位运算符
在Verilog HDL中,有两种运算符,分别是左移运算符和右移运算符. 使用方法为:a>>n,a<<n a代表要进行移位的操作数,n代表要移几位. 如: 4'h1001< ...
- Verilog初级教程(9)Verilog的运算符
博文目录 写在前面 正文 Verilog算术运算符 Verilog关系运算符 Verilog等价运算符 Verilog逻辑运算符 Verilog位元运算符 Verilog移位运算符 参考资料 交个朋友 ...
- verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告
前言 随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要.经过人工设计.制作实验板.调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的 ...
- Verilog HDL 语言基础语法
模块的结构 (1)Verilog的基本设计单元是"模块"(block). (2)一个模块由两部分组成,一部分描述接口,另一部分描述逻辑功能. (3)每个Verilog程序包括4个主 ...
- Verilog的运算符及优先级
Verilog运算符按功能可以分为八类. 1. 基本算数运算符 运算符 中文名 举例 举例结果 说明 + 加法运算符或正值运算符 12+3 15 同普通加法 - 减法运算符或负值运算符 12-3 9 ...
- 三、1【Verilog HDL】基础语法快速入门(FPGA开发)
参考资料: 参考野火FPGA开发视频的基础语法:[野火]FPGA系列Xilinx Artix7教学视频,真正的手把手教学,"波形图"教学法,现场画波形图写代码,硬件基于野火FPGA ...
- java中的移位运算符
移位运算符是在数字的二进制形式上进行平移.主要有左移(<<).带符号右移(>>)以及无符号右移(>>>). 左移运算符(<<)的运算规则为:按二进 ...
最新文章
- Hyper-V虚拟化测试05防火墙及证书配置
- 关于学习Python的一点学习总结(44->类中的比较操作符号重写)
- python源代码的后缀名是_Python代码编译与反编译
- ML之SL:监督学习(Supervised Learning)的简介、应用、经典案例之详细攻略
- php验证旧密码,PHP验证数据库密码问题
- Codeforces Round #620 (Div. 2) E. 1-Trees and Queries 思维 + LCA
- Ribbon 客户端负载均衡
- 数据库中的二级索引_普通索引_辅助索引
- linux 开源邮件 系统,4 个开源的命令行邮件客户端
- 从CMO到龙泉寺弟子:佛法改变人生
- CCF 201403-5 任务调度
- android中的资源文件
- excel小写转大写公式_喂!这边居然有演示的Excel快捷键!
- 【IT】Asp.Net MVC
- java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
- iOS模拟器中修改textField键盘类型为中文输入和键盘弹出方法
- 十折交叉验证python_Python实现K折交叉验证法的方法步骤
- Android-原笔迹钢笔手写的探索与开发
- 【Ubuntu】基于 Ubuntu 搭建 Discuz 论坛
- 缓冲流(BufferedInputStream,BufferedOutputStream\BufferedReader,BufferedWriter)