第四章 Verilog HDL行为语句

合集下载

硬件描述语言 Verilog HDL

硬件描述语言 Verilog HDL
端口声明,参数声明<可选>
`include指令
变量声明(wire,reg及其它类型) 数据流语句(assign) 低层模块的实例 过程块always和initial(包含所有的行为语句) 任务(task)和函数(function)
endmodule; 模块结束语句
16
4.3.3 模块和端口
17
4.3.3 模块和端口
3.$stop任务和$finish任务
۞ $stop任务使得仿真被挂起(例:暂停仿真以检查 信号值 )
۞ $finish任务将结束仿真,并退出仿真环境
21
4.3.3 系统任务和系统函数
常用的几个系统任务和系统函数:
4.时间函数:$time ,$stime ,$realtime 5.$random函数
32
4.4.2 数据类型
2.变量(Variable)类型 (reg、integer、time、real、realtime) 数据存储单元的抽象,下一次赋值前,变量的值保持不变 (1)寄存器(reg)变量类型
۞ 对应具有状态保持作用的硬件电路,如触发器、锁存器等
۞ 声明形式:reg [msb:lsb] reg1,reg2,...regN;
3
4.1 HDL简介
4.1.1 关于HDL(硬件描述语言)
使用HDL ۞用一种高级语言来表达大规模集成电路的功能,隐藏
其具体实现的细节,对数字电路和数字逻辑系统能够 进行形式化的描述。 ۞提高逻辑设计效率,降低设计成本,缩短设计周期。 ۞多方位的仿真可以在设计完成之前检测到其错误,减 少设计重复的次数,使第一次投片便能成功实现芯片 成为可能。 ۞使检测各种设计方案变得容易和方便,对方案的修改 只需要修改HDL程序,比修改原理图容易得多。

了解VerilogHDL语法规则吗,看完这篇就知道了

了解VerilogHDL语法规则吗,看完这篇就知道了

了解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】常数表示方法举例。

第4章 VerilogHDL语言基础

第4章 VerilogHDL语言基础

模块声明包括模块名和模块的端口列表。其格式如下:
Module 模块名(端口名1,端口名2,…,端口名n);

//模块的其他部分
endmodule //模块结束关键字
模块端口列表中端口名的排列顺序是任意的。
7
2.端口(Port)定义
端口是模块与外界或其他模块进行连接、通信的信号线。 因此,对端口列表中哪些端口是输入端口、哪些端口是输出端 口要进行明确说明。
当电路的规模较大或时序关系较复杂时,通常采用行为描述 方式进行设计。支持电路的行为描述,是硬件描述语言的最大优 势。设计人员可以摆脱传统的逻辑器件的限制,设计出各式各样 的、具有特色和个性的功能模块,进而构成系统。
56
2.行为描述模型
所谓行为描述,就是在always过程块中采用各种行为语句描 述逻辑功能。
25
类型定义和使用举例
26
27
4.2.4 Verilog HDL的运算符
Verilog HDL提供了丰富的运算符(Operators),按功能分 成9大类,包括算术运算符、逻辑运算符、位运算符、关系运算 符、等式运算符、归约运算符、移位运算符、条件运算符以及 拼接运算符。
按运算符所带操作数的个数来区分,可分为3类: 单目运算符(unaryoperator):带一个操作数。 o双目运算符(binaryoperator):带两个操作数。 三目运算符(ternaryoperator):带三个操作数。
24
常用寄存器型数据介绍
integer型数据是一种纯数学的抽象描述,能定义带符号的 32位整型数据,不对应任何具体的硬件电路。用作for循环语句 中的循环变量。格式:
integer 变量名1,变量名2,…,变量名n; reg型数据通常用作在always过程块中被赋值的信号,也可 用于表达式的输入。格式: reg <[位宽]>,数据名1,数据名2,…,数据名n; 可定义多位的reg型向量;位宽说明缺省时,默认定义1位 的reg型变量(标量)。不同位宽的reg型数据必须分别定义。 在使用reg型数据时,可以域选或全选。

verilog语言基本语句

verilog语言基本语句

Verilog 是一种硬件描述语言(HDL),主要用于描述数字电路的行为和结构。

以下是一些Verilog 语言的基本语句:模块声明:module ModuleName (input wire A, input wire B, output reg C);// 模块内部代码endmodule这里input 和output 定义了模块的接口。

wire 表示信号是一个线性的,reg 表示寄存器类型的信号。

组合逻辑:always @* beginC = A & B; // 与门endalways @* 表示这是一个组合逻辑块。

& 是逻辑与操作符。

时序逻辑:always @(posedge Clock) beginif (Reset) beginC <= 1'b0;end else beginC <= A | B; // 或门endend这里posedge 表示在时钟信号上升沿触发。

<= 是非阻塞赋值,= 是阻塞赋值。

模块实例化:ModuleName U1 (.A(InA), .B(InB), .C(OutC));实例化一个模块,并连接输入输出信号。

always_ff 块:always_ff @(posedge Clock) begin// 在时钟上升沿执行的代码end这是一种常用于时序逻辑的结构,比always @(posedge ...) 更加严格。

always_comb 块:always_comb begin// 组合逻辑,无时钟敏感end在这个块内部的代码将在每次输入信号变化时执行。

if-else 语句:if (condition) begin// 条件为真时执行的代码end else begin// 条件为假时执行的代码endcase 语句:case (selector)2'b00: // 两位二进制值为00时执行的代码2'b01: // 两位二进制值为01时执行的代码2'b10: // 两位二进制值为10时执行的代码2'b11: // 两位二进制值为11时执行的代码default: // 默认执行的代码endcase这些是Verilog 中的一些基本语句,用于描述数字电路的行为和结构。

Verilog HDL语言

Verilog HDL语言
关系运算的结果是1位逻辑值。在进行关系运算时,如果 关系是真,则计算结果为1;如果关系是假,则计算结果为0; 如果某个操作数的值不定,则计算结果不定(未知),表示结 果是模糊的。
2021/8/14
22
5. 等式操作符(Equality operators)
等值操作符包括:
==(等于)、!=(不等于)、===(全等)、 !==(不全等)4种。
2021/8/14
4
2. 信号类型声明
变量类型声明用来说明设计电路的功能描述中,所用的信号 的数据类型以及函数声明。
变量的数据类型主要有连线(wire)、寄存器(reg)、整型 (integer)、实型(real)和时间(time)等类型。
2021/8/14
5
3. 功能描述
功能描述是Verilog HDL程序设计中最主要的部分,用 来描述设计模块的内部结构和模块端口间的逻辑关系,在电 路上相当于器件的内部电路结构。
① 首字符不能是数字。
② 字符数不能多于1024个。 ③ 大小写字母是不同的。
④ 不要与关键字同名。
2021/8/14
18
4.2.6 操作符
操作符也称为运算符,是Verilog HDL预定义的函数名 字,这些函数对被操作的对象(即操作数)进行规定的运算, 得到一个结果。
操作符通常由1~3个字符组成,例如,“+”表示加操作, “==”(两个=字符)表示逻辑等操作,“===”(3个=字符) 表示全等操作。有些操作符的操作数只有1个,称为单目操作; 有些操作符的操作数有2个,称为双目操作;有些操作符的操 作数有3个,称为三目操作。
字符串是用双引号括起来的可打印字符序列,它必须包含在同 一行中。例如,
“ABC”, “A BOY.” ,“A”, “1234” 都是字符串。

VerilogHDL简明教程:第4章表达式

VerilogHDL简明教程:第4章表达式

本章讲述在Verilog HDL中编写表达式的基础。

表达式由操作数和操作符组成。

表达式可以在出现数值的任何地方使用。

4.1 操作数操作数可以是以下类型中的一种:1) 常数2) 参数3) 线网4) 寄存器5) 位选择6) 部分选择7) 存储器单元8) 函数调用4.1.1 常数前面的章节已讲述了如何书写常量。

下面是一些实例。

256,7 //非定长的十进制数。

4'b10_11, 8'h0A //定长的整型常量。

'b1, 'hFBA //非定长的整数常量。

90.00006 //实数型常量。

"BOND" //串常量;每个字符作为8位ASCII值存储。

表达式中的整数值可被解释为有符号数或无符号数。

如果表达式中是十进制整数,例如,12被解释为有符号数。

如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。

下面举例说明。

12是01100的5位向量形式(有符号)-12是10100的5位向量形式(有符号)5'b01100是十进制数12(无符号)5'b10100是十进制数20(无符号)4'd12是十进制数12(无符号)更为重要的是对基数表示或非基数表示的负整数处理方式不同。

非基数表示形式的负整数作为有符号数处理,而基数表示形式的负整数值作为无符号数。

因此-44和-6'o54 (十进制的44等于八进制的54)在下例中处理不同。

integer Cone;. . .Cone = -44/4Cone = -6'o54/ 4;注意-44和-6'o54以相同的位模式求值;但是-44作为有符号数处理,而-6'o54作为无符号数处理。

因此第一个字符中Cone的值为-11,而在第二个赋值中Cone的值为1073741813。

4.1.2 参数前一章中已对参数作了介绍。

参数类似于常量,并且使用参数声明进行说明。

下面是参数说明实例。

VerilogHDL常用综合语法

VerilogHDL常用综合语法

VerilogHDL常⽤综合语法 前⾯已经记录了⼀些组成Verilog的基本组成,可以⽤这些基本组成来构成表达式。

这⼀节,就来记录⼀下把这些表达式构成⼀个⽂件的各种⾏为描述语句。

①这⾥⽤Verilog基本要素进⾏的⾏为描述主要是针对综合来的,也就是可以设计出实际电路来的(⾏为描述语句有两⼤⼦集,⼀个是⾯向综合,⼀个是⾯向仿真)。

②⾏为描述语句⼀般指放在always语句中。

内容提纲如下所⽰: ·触发事件控制 ·条件语句(if与case语句) ·循环语句 ·任务和函数 ·编译预处理⼀、触发事件控制 ①电平敏感事件是指指定信号的电平发⽣变化时发⽣指定的⾏为。

②边沿触发事件(信号跳变沿)是指指定信号的边沿信号跳变时发⽣指定的⾏为,分为信号的上升沿(x→1或者z→1或者0→1)和下降沿x→0或者z→0或者1→0)。

③信号跳变沿触发电路对信号的某⼀跳变沿敏感名字⼀个时钟周期内,只有⼀个上升沿和⼀个下降沿,因此计算结果在⼀个周期内保持不变,⽽电平触发电路则可能会引起数据在⼀个时钟周期内变化⼀次或多次。

其他敏感列表的事项请查看这篇博⽂:。

⼆、条件语句 Verilog的条件语句包括if语句和case语句。

(1)if语句 ①if语句中的条件判断表达式(括号中的那个)⼀般为逻辑表达式或者关系表达式或者就⼀个变量。

如果表达式的值是0、X或者Z,则全部按照“假”处理;若为1,则按照“真”处理。

②在应⽤中,else if 分⽀的语句数⽬由实际情况决定;else分⽀可以省略,但在描述组合逻辑中,会综合得到锁存器。

(2)case语句 ①case语句,case语句是⼀个多路条件分⽀的形式,常⽤于多路译码、状态机以及微处理器的指令译码等场合,有case 分⽀、casez分⽀、casex分⽀这三种形式。

②case语句⾸先对条件表达式求值,然后同时并⾏对各分⽀项求值并进⾏⽐较;当case语句跳转到某⼀分⽀后,控制指针将转移到endcase。

4 verilog hdl语法

4 verilog hdl语法
33
5、$readmemh,$readmemb 属于文件读写控制,其作用是从外部文件中读取数据并放 入存储器中,一个是16进制,一个是2进制 格式:$ readmemh(“数据文件名”,存储器名,起始地址, 结束地址) $ readmemb(“数据文件名”,存储器名,起始地址, 结束地址) 6、$random 产生随机数的系统函数,每次调用都会返回一个32位的随 机数,该随机数是一个带符号整数
12
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 8□'h□2A /*在位宽和'之间,以及进制和数值 之间允许出现空格,但'和进制之间,数值间是不允许出 现空格的,比如8'□h2A、8'h2□A等形式都是不合法的 写法 */
'Bx0, 5'b0x110, 'da30, 10'd2,
'hzF
18
练习
下列数字的表示是否正确?
6'd18,
d2,
'hzF
19
下列表达式的位模式是什么? 7'o44 'Bx0 5'bx110 'hA0 10'd2 'hzF 0100100
20
345readmemhreadmemb属于文件读写控制其作用是从外部文件中读取数据并放入存储器中一个是16进制一个是2进制格式readmemh数据文件名存储器名起始地址结束地址readmemb数据文件名存储器名起始地址结束地址6random产生随机数的系统函数每次调用都会返回一个32位的随机数该随机数是一个带符号整数35367fopenfclose打开和关闭文件格式fopenfilenamefclosefilename373839404142430低电平逻辑0或逻辑非1高电平逻辑1或真x或x不确定或未知的逻辑状态z或z高阻态verilog中的所有数据类型都在上述4类逻辑状态中取值其中x和z都不区分大小写也就是说值0x1z与值0x1z是等同的
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(3)if(条件表达式1) 语句1; else if (条件表达式2) 语句2; else if (条件表达式3) 语句3; …… else 语句n;
芜湖职业技术学院 例如 if(Sum < 60) begin Grade = C; Total_C = Total _c + 1; end else if(Sum < 75) begin Grade = B; Total_B = Total_B + 1; end else begin Grade = A; Total_A = Total_A + 1; end
1. 连续赋值语句
连续赋值语句用于组合逻辑的建模。等式左边是wire类 型的变量,等式右边可以是常量,或是由运算符如逻辑运 算符、算术运算符参与的表达。例如, wire [3:0] Z, Preset, Clear; //线网说明 assign Z = Preset & Clear; //连续赋值语句
时钟等周期性波形。
(2)repeat:连续执行一条语句n次; (3)while:执行一条语句,直到某个条件不满足; (4)for:有条件的循环语句
芜湖职业技术学院
1. for语句
for语句使用格式: for(表达式1;表达式2;表达式3) 语句; 即: for(循环变量赋初值;循环结束条件;循环变量增 值) 执行语句;
芜湖职业技术学院 注意两个方面的问题: (1)连续赋值语句的执行是:只要右边表达式任一个变量有 变化,表达式立即被计算,计算的结果立即赋给左边信号。 (2)连续赋值语句之间是并行语句,因此与位置顺序无关。
2. 过程赋值语句
过程赋值语句多用于对 reg型变量进行赋值。过程赋 值有阻塞赋值和非阻塞赋值两种方式。阻塞语句是顺序 执行的,在该语句结束时就立即完成赋值,那么在前面 的语句没有完成之前,后面的就不能被执行,仿佛被阻 塞了一样,常用于组合逻辑电路设计中;而非阻塞语句 是同时执行的,在整个过程块结束时才完成赋值操作, 即被赋值的变量的值不是立刻就改变的,常用于时序逻 辑电路设计中。
2. repeat语句
repeat语句的使用格式为:
repeat(循环次数表达式) 语句;
或repeat(循环次数表达式) begin ……
end
芜湖职业技术学院
3. while 和forever语句
While语句
while语句的使用格式如下: while(循环执行条件表达式)语句; 或 while(循环执行条件表达式)begin
本章概述
本章介绍 Verilog HDL 的行为语句,要充分 理解硬件描述语言和硬件电路的关系,熟练掌 握常用的行为语句,基本的行为语句就可以完 成绝大多数电路与系统设计,要对常用语句用 心专研、深入理解,对完成硬件电路设计将是 非常有用的。
芜湖职业技术学院
4.1 赋值语句
Verilog HDL赋值语句包括连续赋值语句和过程赋值语 句两种。
芜湖职业技术学院
第4章 Verilog HDL行为语句
赋值语句(assign、=、<=) 条件语句(if-else、case) 循环语句(for、forever、repeat、while) 过程语句(initial、always) 块语句(begin-end、fork-join)
芜湖职业技术学院
case (敏感表达式)
值1: 语句1;
值2: 语句2; ……
当敏感表达式的值为值 1时,执行语句1;为n时执 行语句 n; 如果敏感表达式 的值与列出的值都不相同 的话,则执行 default 后面 的语句。 建议 :case 的默认项必须写, 防止产生锁存器。
值n: 语句n;
default:语句n+1; endcase
芜湖职业技术学院
阻塞赋值
阻塞赋值语句,从字面上理解,该条语句阻塞了下 面语句的执行,“=”用于阻塞的赋值,凡是在组合 逻辑(如在assign语句中)赋值的请用阻塞赋值。
非阻塞赋值
非阻塞赋值操作符用小于等于号(即<=)表示,只 能用于对寄存器类型变量进行赋值,因此只能用在 “initial ”和“always”等过程块中,不能用在 assign语句中。
设计者原意是设计一个二输 入与门,但因 if 语句中无 else 语句,在逻辑综合时会认为 else 语句为:“ c=c”, 即保持 不变,形成了一个隐含锁存 器。因此需要加一条语句:
else c=0;
芜湖职业技术学院
4.3 循环语句
在Verilog HDL中存在4种类型的循环语句,可用来控 制语句执行次数。这4种语句分别为: (1)forever :连续地执行语句,多用在“ initial” 块中,以生 成
芜湖职业技术学院
例如
芜湖职业技术学院
3. 条件语句使用要点
在使用条件语句时,应注意列出所有条件分支,否则,编译器认为条 件不满足时,会引起一个触发器保持原值。这一点可用于设计时序电路, 例如在计数器设计中,条件满足则加1,否则保持不变;而在组合电路设计 中,应避免这种隐含触发器的存在。当然,一般不可能列出所有分支,因 为每一变量至少有4种取值0、1、z、x。为包含所有分支,可在if语句最后 加上else;在case语句的最后加上default语句。
“表达式”一般为逻辑表 达式或关系表达式,也 可能是一位的变量。条 件表达式必须总是被括 起来的。对表达式的值 进行判断,若为0, x或z, 按“假”处理;若为 1 , 按“真”处理,执行指 定语句。
芜湖职业技术学院
2. casBiblioteka 语句相对于 if 语句只有两个分支而言, case 语句是一种多 分支语句,故case语句可用于多条件译码电路,如:描述 译码器、数据选择器、状态机及微处理器的指令译码等。 case语句的使用格式:
注:在同一个进程块中,最好不要同时用阻塞赋值和非阻 塞赋值语句。
芜湖职业技术学院
4.2 条件语句
条件语句有 if-else 语句和 case 语句两种,它们都是 顺序语句,应放在always块内。
1. if-else语句
格式与C语言中的if-else语句类似,使用方法有三种:
(1)If(表达式) 语句1; (2)If(表达式) 语句1; else 语句2;
相关文档
最新文档