第5章 Verilog语法与要素

合集下载

Verilog中的一些语法和技巧

Verilog中的一些语法和技巧

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 #(延时量)连线型变量名=赋值表达式;显式连续赋值语句包含了两条语句;第⼀条是对连线型变量的进⾏类型说明的说明语句;第⼆句是对这个已得到声明的连线型变量进⾏连续赋值语句。

HDL第五章语法与要素

HDL第五章语法与要素

4、关键字 Verilog 系统内部使用的词,关键字用户不可用重定义其它含义。 所有的关键字都是小写字母组成。例如always是关键字,但是 ALWAYS不是关键字。
5. 2 常量
Verilog 中常量主要有三种类型:整数、实数、字符串 5.2.1 整数。 +/-<size>‟<base><value> +/-<二进制位宽>‟<进制><数字序列>
例如:8‟b1001xxxx
8‟b1010zzzz
与 8‟h9x相同
与 8‟haz相同
4)如果没有定义一个整数的位宽,则其宽度为响应数所需的二进制位。 例如:‟o721 // 9位二进制数111010001 „hAF //8位二进制数10101111 5)如果定义的位宽比实际的位数长,则通常左边添0补位,但如果数的 最左边为x或z,则左边添x或z。
wire [ 19:0] addrbus ;
//定义位宽 20位wire型变daddrbus
wire [0:7] a ; // 定义位宽为8位的wire型变量
2)tri型
功能与使用方法与wire型相同,只是为了增加程序的可读性,可更 清楚表示该信号综合后的电路具有三态的功能。 3)supply0 h和supply1型 supply0用于对“地”建模,即低电平0;supply1网用于对电源建 模,即高电平1;例如:
5.3 数据类型
数据类型是用来表示数字电路中的物理连线、数据存储和 传输单元等物理量。 Verilog HDL有下列四种逻辑值状态: 1) 0:低电平、逻辑0或逻辑非(“假”) 2) 1:高电平、逻辑1或“真”
3) x或X:不确定或未知的逻辑状态

verilog 基本语法

verilog 基本语法

verilog 基本语法Verilog基本语法Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。

它具有强大的建模能力,能够描述复杂的数字系统,并用于逻辑设计和硬件验证。

本文将介绍Verilog的基本语法,以帮助读者对这种语言有一个基本的了解。

1. 模块声明在Verilog中,所有的设计都是通过模块来实现的。

模块是Verilog 的基本组织单位,类似于其他编程语言中的函数或类。

模块声明由关键字module开头,后面跟着模块的名称和输入输出端口的定义。

例如:module my_module(input a, b, output c);// 模块的主体endmodule2. 端口声明在模块声明中,使用关键字input和output来声明输入和输出端口。

输入端口用于接收信号,输出端口用于输出信号。

端口可以是单个的信号,也可以是信号的数组。

例如:input a, b; // 单个输入端口output c; // 单个输出端口input [7:0] d; // 输入信号的数组3. 信号声明在Verilog中,使用关键字wire、reg、integer等来声明信号。

wire用于声明连续的信号,reg用于声明时序的信号,integer用于声明整数变量。

例如:wire a, b; // 连续信号reg [7:0] c; // 时序信号,有8位integer d; // 整数变量4. 时钟和复位在数字电路中,时钟和复位信号是非常重要的。

在Verilog中,可以使用关键字input来声明时钟和复位信号,并在模块的输入端口中定义。

例如:input clk; // 时钟信号input rst; // 复位信号5. 运算符Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。

算术运算符用于执行加减乘除等操作,逻辑运算符用于执行与或非等逻辑操作,位运算符用于执行位操作。

例如:a =b + c; // 加法运算d = ~(a & b); // 与运算和非运算6. 控制结构在Verilog中,可以使用if语句、case语句等控制结构来实现条件判断和多路选择。

第5章组合逻辑、时序逻辑Verilog语言描述(已排)

第5章组合逻辑、时序逻辑Verilog语言描述(已排)
3
5.1.1 组合逻辑电路的连续赋值实现
以2路选择器为例:
module mux2to1( a, b, sel, out); input a, b; input sel; output out; assign out = (sel) ? b:a;
endmodule
注意:
连续赋值语句的被赋值变量只能是线网wire型。
注意: 过程块描述的组合逻辑电路: 1. 被赋值变量只能是reg型; 2. 触发方式采用电平触发; 3. always@( )引导的敏感量要完整。
5
always过程块与连续赋值语句描述的组合逻辑电路效果相同 两种方法描述的2路选择器电路均相同, 综合工具根据Verilog代码综合自动生成的电路均为下图所示
4
5.1.2 组合逻辑电路的always过程块实现
仍然以2路选择器为例: module mux2to1( a, b, sel, out);
input a, b; input sel; output out; reg out; always @(sel or a or b)
out = (sel) ? b:a; endmodule
endmodule
13
对应的CMOS工艺下D触发器的电路结构
. d
q
. . . clk
rst clk
d
T1
clk
q
T3
rst
clk clk
clk clk
T2
T4
.q
D触发器符号

clk
clk
D触发器电路图
说明:复位信号不受时钟信号clk的影响。 只要复位信号rst为高电平时,电路就复位,输出q为0。
14

第5章-Verilog语言要素

第5章-Verilog语言要素

5.3.2 Variable型
variable型变量必须放在过程语句(如initial、always)中,通 过过程赋值语句赋值;在always、initial等过程块内被赋值的 信号也必须定义成variable型。 variable型(以前叫register型)是数据存储单元的抽象,但不 能表示真正的硬件,相当于计算机高级语言中的变量。 常用variable型变量:
整数(integer)
Examples:
8'b11000101 //位宽为八位的二进制数11000101
8'hd5
//位宽为八位的十六进制数d5;
5'O27
//5位八进制数
4'D2
//4位十进制数2
4'B1x_01
//4位二进制数1x01
5'Hx
//5位x(扩展的x),即xxxxx
4'hZ
//4位z,即zzzz
assign larger=(a>b);
assign equal=(a==b);
assign less=(a<b);
endmodule
【例5.4】 采用参数定义的二进制计数器
module count_w(en,clk,reset,out);
input clk,reset,en; parameter WIDTH=8;
◆ 整数
◆ 实数
◆ 字符串
整数(integer)
整数按如下方式书写:
+/-<size> '<base><value> 即 +/-<位宽>'<进制><数字> size 为对应二进制数的宽度;base为进制;value是 基于进制的数字序列。 进制有如下4种表示形式: ◆ 二进制(b或B) ◆ 十进制(d或D或缺省) ◆ 十六进制(h或H) ◆ 八进制(o或O)

verilog语法和要素

verilog语法和要素

◆ 科学计数法。例如:
43_5.1e2
//其值为43510.0
9.6E2
//960.0 (e与E相同)
5E-4
//0.0005
实数(Real) 实数转换为整数的方法:四舍五入
42.466,42.45 //转换为整数为42
92.5,92.699 //转换为整数为93
-16.62
//转换为整数为-17
位x(或z),在十六进制中代表4位x(或z),它代表的 宽度取决于所用的进制。 4.如果没有定义一个整数的位宽,其宽度为相应值中的定义 的位数。
整数(integer) 5.如果定义的位宽比实际的位数长,通常在其左边补零。
但如果数最左边一位为x(或z),那么就相应地在左边 补x或z。如果定义的位宽比实际的位数小,裁掉左边的 位。
转义标识符:以“\”开头,以空白符结尾,可以包含任 何字符。比如:\7400 \~#@sel 注意:反斜线和结束空白符不是转义标识符的一部分,所 以标识符“\OutGate”和标识符“OutGate”恒等。
判断下列哪些标识符是合法的,哪些标识符是不合法的? 30cout ,Cout ,8sum,\a*b,_dada, \wait,initial, $latch,out*
整下数列数(字的in表te示g是e否r正)确?
6’d18
3’ □b001
‘Bx0
4’d-4
5’b0x110
(3+2)’b10
‘da30
10’d2
‘hzF
实数(Real)
实数(Real)有下面两种表示法。 ◆ 十进制表示法。例如:
2.0
0.1
//以上2例是合法的实数表示形式
2.
//非法:小数点两侧都必须有数字

verilog语言05

verilog语言05

31
5.3
当两个 driven strength不同的 net 相连时,会以 strength level 较高的 net 输出为结果。
Pull 1 Strong 0 Supply 1 Supply 1 Large 1 Strong 0
32
5.3
[例1]四选一多路选择器
33
5.3
module mux4_to_1(out, i0,i1, i2, i3, s1, s0); output out; input i0,i1, i2, i3, s1, s0; //门级实例引用 not (s1n, s1); not (s0n, s0); and (y0, i0, s1n, s0n); and (y1, i1, s1n, s0); and (y2, i2, s1, s0n); and (y3, i3, s1, s0); or (out, y0, y1, y2, y3); endmodule
demo_para #(4,5,6) g1(out, in1, in2);
18
…… endmodule
5.2
注意: 参数值列表中各个参数值的排列次序必须与被调用模块中 各个参数的说明次序保持一致;同时参数的个数也必须相 同; 在只希望对调用模块内的个别参数进行更改的情况下,所 有无需更改的参数值也必须按对应参数的顺序在参数值列 表中全部列出(照抄原值);
15
5.2
实例
module bottom(in); input in; always @(posedge in) begin: keep reg hold; hold=in; end endmodule module middle(stim1,stim2); input stim1,stim2; bottom amod(stim1), bmod(stim2); endmodule 16 module top; reg stim1,stim2; middle a(stim1,stim2); endmodule 模块名:top top.a top.a.bmod

Verilog语法与要素解析

Verilog语法与要素解析

调用元件(元件例化)
调用元件的方法类似于在电路图输入方式下调入图 形符号来完成设计,这种方法侧重于电路的结构描述。
材料与能源学院微电子工程系
第五章 Verilog语法与要素 Verilog 模块的模板
材料与能源学院微电子工程系
第五章 Verilog语法与要素
Verilog 与C语言的比较
C语言 + * / % ! && || > < Verilog + * / % ! && || > < 功能 加 减 乘 除 取模 逻辑非 逻辑与 逻辑或 大于 小于 C语言 >= <= == != ~ & | ^ << >> Verilog >= <= == != ~ & | ^ << >> 功能 大于等于 小于等于 等于 不等于 取反 按位与 按位或 按位异或 左移 右移
材料与能源学院微电子工程系
第五章 Verilog语法与要素
§5.2 Verilog HDL 模块的结构
a b f c d
“与-或-非”电路
module aoi(a,b,c,d,f); /* 模块名为aoi,端口列表a,b,c,d,f */ input a,b,c,d; //模块的输入端口为a,b,c,d output f //模块的输出端口为f wire a,b,c,d,f; //定义信号的数据类型 assign f=~((a&b)|(~(c&d)));
材料与能源学院微电子工程系
3.
4.
第五章 Verilog语法与要素
Verilog 与C语言的比较
C语言 function if-then-else for while case break define printf int Verilog语言 module, function if-then-else for while case break define printf int
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

满60,系统自动清零**********
always @(posedge cn2 or posedge clr)
begin if(clr) begin {mh,ml}<=8'h00;end//异步复位
else if(ml==9)

begin ml<=0;

if(mh==5) mh<=0;
mh,ml: 分钟信号的高位和低位。*/
module paobiao(clk,clr,pause,msh,msl,sh,sl,mh,ml);
input clk,clr,pause;output[3:0] msh,msl,sh,sl,mh,ml;
reg[3:0] msh,msl,sh,sl,mh,ml;
assign larger=(a>b);
assign equal=(a==b);
assign less=(a<b);
endmodule
【例5.3】 采用参数定义的加法器 module add_w(a,b,sum); parameter MSB=15; //参数定义 input[MSB:0] a,b;
5.3.1 net型
Net型数据相当于硬件电路中的各种物理连接,其特点是 输出的值紧跟输入值的变化而变化。对连线型有两种驱 动方式,一种方式是在结构描述中将其连接到一个门元 件或模块的输出端;另一种方式是用持续赋值语句assign 对其进行赋值。 wire是最常用的Net型变量。 wire型变量的定义格式如下: wire 数据名1,数据名2,……数据名n; 例如: wire a,b; //定义了两个wire型变量a和b
关键字(Keywords)
Verilog语言内部已经使用的词称为关键字或 保留字,这些保留字用户不能作为变量或节点 名字使用。详见附录A和B。
关键字都是小写的。
5.2 常量
程序运行中,值不能被改变的量称为 常量(constants),Verilog中的常量主 要有如下3种类型:
◆ 整数-可综合
◆ 实数-不可综合
reg cn1,cn2;//cn1为百分秒向秒的进位,cn2为秒向分的进位
//**百分秒计数进程,每满100,cn1产生一个进位**
always @(posedge clk or posedge clr)
begin if(clr) begin {msh,msl}<=8'h00;cn1<=0;end//异步复位
◆ 字符串-不可综合
整数(integer)
整数按如下方式书写:
+/-<size> '<base><value> 即 +/-<位宽>'<进制><数字> size为对应二进制数的宽度;base为进制;value是 基于进制的数字序列。 进制有如下4种表示形式: ◆ 二进制(b或B)Binary ◆ 十进制(d或D或缺省)Decimal ◆ 十六进制(h或H)Hexadecimal ◆ 八进制(o或O)Octal
注意:variable型变量并不意味着一定对应着硬件上的一个
触发器或寄存器等存储元件,在综合器进行综合时,
variable型变量会根据具体情况来确定是映射成连线还是映
射为触发器或寄存器。
reg型变量是最常用的一种variable型变量。定义格式如下:
reg 数据名1,数据名2,……数据名n;
例如:reg a,b;
◆ 科学计数法。例如:
43_5.1e2
//其值为43510.0
9.6E2
//960.0 (e与E相同)
5E-4
//0.0005
字符串(Strings)
字符串是双引号内的字符序列。 字符串不能分成多行书写。例如:
"INTERNAL ERROR"
字符串的作用主要是用于仿真时,显示一些 相关的信息,或者指定显示的格式。

else mh<=mh+1;end

else ml<=ml+1;

end
endmodule
5.4 参数(parameter)
在Verilog语言中,用参数parameter来定义符号常量,即 用parameter来定义一个标志符代表一个常量。参数常用 来定义时延和变量的宽度。 其定义格式如下: parameter 参数名1=表达式1,参数名2=表达式2,参数名3=表 达式3, …… ; 例如: parameter SEL=8,CODE=8'ha3; //分别定义参数SEL代表常数8(10进制),参数CODE代表常 量a3(16进制)
Examples:
wire[7:0] databus; wire[19:0] addrbus;
//databus的宽度是8位 //addrbus的宽度是20位
5.3.1 net型-表5.2
如果信号的数据类型没有定义,则综合 器将其默认为是wire型。
wire型信号可用作任何表达式的输入, 也可作assign持续赋值语句和实例元件 的输出;
//定义了两个reg型变量a,b
Examples:
reg[7:0] qout; //定义qout为8位宽的reg型向量
reg[8:1] qout;
数字跑表的Verilog 描述
/*信号定义#?clk: 时钟信号;clr: 异步复位信号;pause: 暂停信号;
msh,msl: 百分秒的高位和低位;sh,sl: 秒信号的高位和低位;
input clk,clr; parameter WIDTH=8;
//参数定义
output reg[(WIDTH-1):0] qout;
always @(posedge clk or posedge clr)
begin if(clr) qout<=0;
else begin qout<=qout<<1;
qout[0]<=~qout[width-1];
end
end
endmodule
5.5 向量
1.标量与向量
宽度为1位的变量称为标量,如果在变量声明中没有指定 位宽,则默认为标量(1位)。举例如下:
wire a;
//a为标量
reg clk;
//clk为标量reg型变量
线宽大于1位的变量(包括net型和variable型)称为 向量(vector)。向量的宽度用下面的形式定义:
字符串变量属于reg型变量
5.3 数据类型
数据类型(Data Type)是用来表示数字电路中的 物理连线、数据存储和传输单元等物理量的。
Verilog有下面四种基本的逻辑状态。 ◆ 0:低电平、逻辑0或逻辑非 ◆ 1:高电平、逻辑1或“真” ◆ x或X:不确定或未知的逻辑状态 ◆ z或Z:高阻态 Verilog中的所有数据类型都在上述4类逻辑状态
第5章 Verilog语法与要素
主要内容
5.1 Verilog语言要素 5.2 常量 5.3 数据类型 5.4 参数 5.5 向量 5.6 运算符
5.1 Verilog语言要素
Verilog 程序由符号流构成,符号包括 空白符(White space) 注释(Comments) 操作符(Operators) 数字(Numbers) 字符串(Strings) 标识符(Identifiers) 关键字(Keywords)等
8□'h□2A
/*在位宽和'之间,以及进制和数值
之间允许出现空格,但'和进制之间,数值间是不允许出
现空格的,比如8'□h2A、8'h2□A等形式都是不合法的写
法 */
实数(Real)
实数(Real)有下面两种表示法。 ◆ 十进制表示法。例如:
2.0
0.1
//以上2例是合法的实数表示形式
2.
//非法:小数点两侧都必须有数字
整数(integer)
Examples:
8'b11000101 //位宽为八位的二进制数11000101
8'hd5
//位宽为八位的十六进制数d5;
5'O27
//5位八进制数
4'D2
//4位十进制数2
4'B1x_01
//4位二进制数1x01
5'Hx
//5位x(扩展的x),即xxxxx
4'hZ
//4位z,即zzzz
reg[WIDTH-1:0] out;
always @(posedge clk or negedge reset)
if(!reset) out=0;
else if(en) out=out+1;
endmodule
增加设计的灵活性
【例5.5】 采用参数定义的约翰逊计数器
module johnson_w(clk,clr,qout);

else if(!pause) //pause为0时正常计数,为1时暂停计数

begin

if(msl==9) msl<=0;

if(msh==9) begin msh<=0; cn1<=1; end

else msh<=msh+1;

end

else begin msl<=msl+1; cn1<=0; end
空白符和注释
空白符(White space) 空白符包括:空格、tab、换行和换页。空白符使 代码错落有致,阅读起来更方便。在综合时空白符 被忽略。 注释(Comment) ◆ 单行注释:以“//”开始到本行结束 ◆ 多行注释:多行注释以“/*”开始,到“*/”结 束
相关文档
最新文档