3-Verilog HDL详细语法
- 格式:ppt
- 大小:338.00 KB
- 文档页数:94
Verilog中的⼀些语法和技巧1、.2、.3、Reg型的数据类型默认初始值为X。
reg型数据可以赋正值也可以赋负值,但是当⼀个reg型数据是⼀个表达式的操作数的时候,他的值被当做⽆符号数及正值。
4、在数据类型中?和Z均表⽰⾼阻态。
5、Reg型只表⽰被定义的信号将⽤在“always”模块内,并不是说reg型⼀定是寄存器或触发器的输出。
虽然reg型信号常常是寄存器或触发器的输出但是并不⼀定总是这样。
6、Verilog语⾔中没有多维数组的存在。
Memory型数据类型是通过扩展reg型数据的弟⼦和范围来⽣成的。
其格式如下reg[n-1:0]存储器名[m-1:0];7、在除法和取余的运算中结果的符号和第⼀个操作数的符号位是相同的。
8、不同长度的数据进⾏运算:两个长度不同的数据进⾏位运算时,系统会⾃动地将两者按有端对齐,位数少的操作数会在相应的⾼位⽤0填满以便连个操作数安慰进⾏操作。
9、= = =与!= = =和= =与!= =的区别:后者称为逻辑等是运算符,其结果是2个操作数的值决定的。
由于操作书中某些位可能不定值x和⾼阻态z结果可能是不定值x。
⽽ = = =和!= = =运算符对操作数的⽐较时对某些位的⾼阻态z和不定值x也进⾏⽐较,两个操作数必须完全⼀致,其结果才是1,否则是0.10、⾮阻塞和阻塞赋值⽅式:⾮阻塞赋值⽅式(如a<=b)上⾯语句所赋得变量值不能⽴即被下⾯语句所⽤,(2)快结束后才能完成这次赋值操作 3在编写克综合的时序逻辑模块时这是最常⽤的赋值⽅法。
阻塞赋值(如a=b)赋值语句执⾏完后,块才结束 2 b的值在赋值语句完成后⽴即执⾏ 3在时序逻辑使⽤中,可能产⽣意想不到的结果。
11、模块的描述⽅式:(RTL为寄存器传输级描述)“(1)数据流描述⽅式:数据流⾏描述主要⽤来描述组合功能,具体⽤“assign”连续赋值语句来实现。
分为两种a、显式连续赋值语句;连线型变量类型[连线型变量为快]连线型变量名Assign #(延时量)连线型变量名=赋值表达式;显式连续赋值语句包含了两条语句;第⼀条是对连线型变量的进⾏类型说明的说明语句;第⼆句是对这个已得到声明的连线型变量进⾏连续赋值语句。
第三章 Verilog HDL的基本语法前言Verilog HDL是一种用于数字逻辑电路设计的语言。
用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。
Verilog HDL既是一种行为描述的语言也是一种结构描述的语言。
这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。
Verilog模型可以是实际电路的不同级别的抽象。
这些抽象的级别和它们对应的模型类型共有以下五种:∙系统级(system):用高级语言结构实现设计模块的外部性能的模型。
∙算法级(algorithm):用高级语言结构实现设计算法的模型。
∙RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。
∙门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。
∙开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。
一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。
其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。
利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。
Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。
这种行为描述语言具有以下功能:∙可描述顺序执行或并行执行的程序结构。
∙用延迟表达式或事件表达式来明确地控制过程的启动时间。
∙通过命名的事件来触发其它过程里的激活行为或停止行为。
∙提供了条件、if-else、case、循环程序结构。
∙提供了可带参数且非零延续时间的任务(task)程序结构。
了解VerilogHDL语法规则吗,看完这篇就知道了本节介绍Verilog HDL语法规则,包括文字规则、数据对象及运算符的使用等。
Verilog HDL文字规则1.关键词与标识符关键词是Verilog HDL中预先定义的单词,它们在程序中有特别的使用目的。
已经被用作关键词的单词不可以在程序中另作他用,见表3-1。
不同版本的Verilog HDL硬件描述语言中定义的关键词数目略有变化,Verilog 1995的关键词有97个,Verilog 2001共102个。
标识符是用户编程时给对象定义的名称,对象包括:常量、变量、模块、寄存器、端口、连线、示例和beginend块等元素。
定义标识符时应遵循如下规则:只能由26个大小写英文字母、数字和下划线组成。
标识符的第一个字符必须是英文字母或下划线。
字符中的英文字母区分大小写。
【例3-7】判断下面标识符是否合法。
2.注释与C语言一样,硬件描述语言中的注释也不会被编译。
在Verilog HDL中有两种形式的注释方式:采用/* */,多用于多行注释。
采用//,用于单行注释。
【例3-8】注释举例。
在实际使用中,很多公司的编程规范明确表明,注释行中不提倡采用第一种/**/的注释方式,不允许使用中文注释。
3.常数的表示在Verilog HDL中,常数用来表示在程序中不随意变化的量,常数分为整数、实数及字符串三大类型。
(1)整数型常数是数字电路中最常用到的类型,在Verilog HDL中有两种表示方法:简单的十进制格式,例如-50、6等。
基数格式,其表达方式一般如下:〈位宽〉是十进制数值表示的常数化成二进制时对应的宽度,〈进制符号〉用进制符号b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)表示常数的进制格式,即二进制、八进制、十进制、十六进制这4种进制表示。
数字的位宽可以默认,如果没有定义长度,数的长度由具体机器系统决定(至少是32位)。
【例3-9】常数表示方法举例。
VerilogHDL语法基础⼀个复杂电路的完整Verilog HDL模型是由若个Verilog HDL 模块构成的,每⼀个模块⼜可以由若⼲个⼦模块构成。
利⽤Verilog HDL语⾔结构所提供的这种功能就可以构造⼀个模块间的清晰层次结构来描述极其复杂的⼤型设计。
每个模块的内容都是嵌在module和endmodule两个语句之间,每个模块实现特定的功能,模块是可以进⾏层次嵌套的。
每个模块⾸先要进⾏端⼝定义.并说明输⼊(input)和输出(output),然后对模块的功能进⾏逻辑描述。
Verilog HDL程序的书写格式⾃由,⼀⾏可以写⼏个语句,⼀个语句也可以分多⾏写。
除了endmodule语句外,每个语句的最后必须有分号。
⼀个模块是由两部分组成的,⼀部分描述接⼝;另⼀部分描述逻辑功能,即定义输⼊是如何影响输出的。
模块(block)的组成Verilog HDL结构完全嵌在module和endmodule声明语句之间,每个Verilog程序包括4个主要部分:端⼝定义,I/O说明,信号类型声明和功能描述。
module<模块名>(<端⼝列表>);端⼝说明(input,output,inout)参数定义(可选)数据类型定义连续赋值语句(assign)过程块(initial 和 always)⾏为描述语句低层模块实例任务和函数延时说明块endmodule模块声明模块声明包括模块名和端⼝列表。
其格式如下:module 模块名(端⼝1,端⼝2,端⼝3,…);模块结束的标志为关键字:endmodule。
端⼝定义input(输⼊端⼝),output(输出端⼝)和inout(双向端⼝)。
格式如下:input 端⼝名1,端⼝名2,………,端⼝名N; //输⼊端⼝output 端⼝名1,端⼝名2,………,端⼝名N; //输出端⼝inout 端⼝名1,端⼝名2,………,端⼝名N; //输⼊输出端⼝也可以写在端⼝声明语句⾥,其格式如下(为了代码的可读性,⼀般不这么写):module module_name(input port1,input port2,…output port1,output port2… );信号类型说明信号可以分为端⼝信号和内部信号;1. 所有信号都必须进⾏数据类型的定义,如寄存器类型(reg等),连线类型(wire等);2. 如果信号没有定义数据类型,则综合器将其默认为wire型;3. 端⼝的位宽最好定义在端⼝定义中,不要放在数据类型定义中;4. 不能将input和inout类型声明为reg型;模块的端⼝表⽰的是模块的输⼊和输出⼝名,也就是说,它与别的模块联系端⼝的标识。
第三章 Verilog-HDL中的语句1.基本语句1.1赋值语句赋值语句分为连续赋值语句和过程赋值语句。
1.1.1连续赋值语句1.连续赋值语句用于把值赋给wire型变量(不能为reg型变量赋值)。
语句形式为:assign A = B & C;a.只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;b.如果计算的结果值有变化,新结果就赋给左边的线网。
2.连续赋值的目标类型♦标量线网 wire a;♦向量线网 wire [7:0] a;♦向量线网的常数型位选择 a[1]♦向量线网的常数型部分选择 a[3:1]♦上述类型的任意的拼接运算结果 {3a[2],a[2:1]}注:多条assign语句可以合并到一起。
3.线网说明赋值连续赋值可作为线网说明本身的一部分。
这样的赋值被称为线网说明赋值。
如: wire Clear = 'b1;等价于 wire clear;assign clear=‘b1;1.1.2 过程赋值语句1.a.过程性赋值是仅仅在initial语句或always语句内的赋值b.它只能对reg型的变量赋值。
表达式的右端可以是任何表达式。
c.过程性赋值分两类:阻塞性过程赋值 =非阻塞性过程赋值<=2.语句内部时延与句间时延a.在赋值语句中表达式右端出现的时延是语句内部时延。
Done = #5 1'b1;b.通过语句内部时延表达式,右端的值在赋给左端目标前被延迟。
即右端表达式在语句内部时延之前计算,随后进入时延等待,再对左端目标赋值。
c.对比以下语句间的时延beginTemp = 1'b1;#5 Done = Temp; //语句间时延控制end3.阻塞性过程赋值a.赋值运算符是“=”的过程赋值是阻塞性过程赋值。
b.阻塞性过程赋值在在下一语句执行前,执行该赋值语句。
例:initialbeginClr = #5 0;Clr = #4 1;Clr = #10 0;end4.非阻塞性过程赋值a .在非阻塞性过程赋值中,使用赋值符号“ <=”。
有关Verilog 中的一些语法位运算符1) ~ //取反2) & //按位与3) | //按位或4) ^ //按位异或5) ^~ //按位同或(异或非)逻辑运算符在Verilog HDL语言中存在三种逻辑运算符:1) &&逻辑与2) || 逻辑或3) !逻辑非等式运算符在Verilog HDL语言中存在四种等式运算符:1) == (等于)2) != (不等于)3) === (等于)4) !== (不等于)"=="和"!="又称为逻辑等式运算符。
其结果由两个操作数的值决定。
由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。
而"==="和"!=="运算符则不同,它在对操作数进行比较时对某些位的不定值x和高阻值z也进行比较,两个操作数必需完全一致,其结果才是1,否则为0。
"==="和"!=="运算符常用于case表达式的判别,所以又称为"case等式运算符"。
位移运算符左移:右边的添0右移:左边的添0,移除的位舍去举例:4’b1001<<1 = 5’b10010; 4’b1001<<2 = 6’b100100;1<<6 = 32’b1000000; 4’b1001>>1 = 4’b0100; 4’b1001>>4 = 4’b0000;位拼接运算符1.{a,b[3:0],w,3’b101}也可以写成为{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}2.{4{w}} //这等同于{w,w,w,w}3.{b,{3{a,b}}} //这等同于{b,a,b,a,b,a,b}负数:一个数字可以被定义为负数,只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。
Verilog_HDL教程
1.简介
Verilog HDL是由美国电气和电子工程师协会(IEEE)于1984年开
发的一种硬件描述语言。
它是一种面向数据流的语言,主要用于描述数字
逻辑电路的行为和结构。
Verilog HDL可以用于设计和仿真各种数字电路,如计算机处理器、存储器、控制逻辑和通信接口等。
2.基本语法
下面是Verilog HDL的基本语法元素:
2.1模块
模块是Verilog HDL中的最基本的构建单元。
每个模块都有一个名称
和一个端口列表。
端口可以是输入或输出,也可以是双向的。
2.2数据类型
2.3信号赋值
可以使用赋值运算符(=)将值赋给变量或信号。
还可以使用阻塞或
非阻塞赋值运算符来实现顺序或并发的赋值操作。
3.设计结构
4.运算符
5.仿真和验证
总结:
本教程简要介绍了Verilog HDL的基本语法和用法。
Verilog HDL是一种被广泛应用于数字电路设计的硬件描述语言。
通过学习本教程,您将能够开始使用Verilog HDL进行数字电路的设计和验证。
veriloghdl语法Verilog HDL(硬件描述语言)是一种硬件描述和设计语言,用于描述和设计数字电路和系统。
以下是Verilog HDL的基本语法:1. 模块声明:module module_name (input declaration, output declaration, inout declaration);// 逻辑和/或数据声明// 逻辑和/或数据操作endmodule2. 输入和输出声明:input [width-1:0] input_name;output [width-1:0] output_name;3. 内部信号声明:reg [width-1:0] signal_name;wire [width-1:0] signal_name;4. 运算符:- 逻辑运算符: &&(与)、 ||(或)、 !(非)- 比较运算符: ==(等于)、 !=(不等于)、 <(小于)、 >(大于)- 算术运算符: +(加)、 -(减)、 *(乘)、 /(除)5. 过程块:always @(sensitivity_list)// 过程块中的语句6. 过程块敏感列表:- posedge clk:时钟的上升沿- negedge clk:时钟的下降沿- expression:表达式更新时7.条件语句:if (condition)// 如果条件为真执行的语句else if (condition)// 如果第一个条件不为真,检查第二个条件是否为真else// 如果以上条件均不为真执行的语句8. 选择语句:case (expression)value1: // 如果expression等于value1执行的语句value2: // 如果expression等于value2执行的语句default: // 如果expression不等于任何值执行的语句endcase9. 迭代语句:for (initialization; condition; increment)// 循环体内的语句以上是Verilog HDL的一些基本语法,可以用于描述和设计数字电路和系统。