第四章 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是等同的

常用verilog hdl语法

常用verilog hdl语法

5、相等关系操作符: = =(逻辑相等) !=(逻辑不等) = = =(全等) != =(非全等)
6、移位操作符 << (左移) >> (右移) 其使用方法如下: a<<n ;a>>n ;a代表要移位的操作数,n代 表要移n位
7、verilog语言中有一个特殊的运算符,位 拼接运算符,用这个运算符可以把两个或 多个信号的某些为拼接起来来进行运算操 作。其方法如下:{信号1的某几位,信号 2的某几位,……},其中不允许存在没有 指明位数的信号。 {a,b[3:0],w,3’101} 还可以用重复法来简化表示,如{4{w}}
1、模块的端口定义
2、I/O说明的格式
(1)输入口: input[信号位宽-1:0]端口名i (2)输出口: output[信号位宽-1:0]端口名i (3)输入输出口: inout[信号位宽-明
在模块内用到的和端口有关的wire和reg类 型变量的声明: reg[width-1:0] R变量1, R变量2,… wire[width-1:0] W变量1, W变量2,…
1.2、参数(parameter)型
用parameter来定义一个标识符代表一个常 量,成为符号常量,即标识符形式的常量, 采用标识符代表一个常量可提高程序的可 读性和可维护性。其说明格式如下: Parameter 参数名1=表达式,参数名2=表达 式,……. 例:parameter msh=7;定义参数msh为常数7 Parameter e=25,f=29;定义两个常数参数
二、数据类型及其常量及变量
(2)x和z值,x代表不定值,z代表高阻值。X可 以用来定义十六进制的4位二进制数的状态,八 进制的3位,二进制的1位,z的表示方式同x,z 还可以表达为“?”,如12’dz=12’d? (3)负数,只要在数字定义式的最前面加上一 个负号即可表示 (4)下划线:下划线可以用来分隔数的表达以 提高程序的可读性,但不可用于位宽和进制处, 如16’b1010_1100_1001_0011(合法) 8’b_1010_1100(非法)

第4章VerilogHDL基本语法

第4章VerilogHDL基本语法
通常用来描述组合逻辑 。
assign声明语句很简单,只需要写一个“assign” (赋值 ),后面再加一个方程式即可。
• 例如 :assign s=a & b & c; • 该语句描述了一个三输入的与门,这是一个组合逻
辑。
• 注意:s的数据类型只能是wire类型。
2.always块 -----行为级建模的主要语句 既可以用来描述组合逻辑, 也可以用来描述时序逻辑。
• 参数的声明格式:
• parameter 参数名1=常数表达式1, 参数名2=常数表达式 2,……;
• 例如:parameter ALL_X=16’bx; //定义参数ALL_X为常数 16’bx
• parameter state0=2’b00, //定义参数state0为常数2’b00
• 4.4.3 变量
• 总之,
• 1.wire表示直通,即只要输入有变化,输出马上无条件地 变化;
• reg 一定要有触发,输出才会反映输入。
• 2.wire只能被assign连续赋值,reg只能在initial和always中赋 值。
• 3.wire使用在连续赋值语句中,而reg使用在过程赋值语句 中。
• (2)使用integer、real、time关键字定义寄存器变量和使 用reg进行定义并没有本质上的区别,仅仅是为了使程序 的表述更加清晰明了。integer、real、time型变量的位宽是 固定的,integer型变量的位宽为32,real型变量的位宽为 64,time real型变量的位宽为64,它们已经是矢量,因此 在定义变量时不可以加入位宽。如
• ①[位宽] ' [进制] [数字],这种方式描述数字最为完整;
• ②'[进制] [数字],这种描述方式省略了位宽,在这种情况 下,数字的位宽采用系统默认位宽(由系统决定,至少是 32位)

Verilog行为描述高级语句

Verilog行为描述高级语句

沿这个概念,Verilog提供了posedge和negedge关键字来描述。
比如:
➢ 【例】同步置数、同步清零的计数器
module count(out,data,load,reset,clk);
output[7:0] out; input[7:0] data;
input load,clk,reset; reg[7:0] out;
always过程语句使用模板
➢ always @(<敏感信号表达式event-expression>)
begin //过程赋值 //if-else,case,casex,casez选择语句 //while,repeat,for循环 //task,function调用
end ➢ “always”过程语句通常是带有触发条件的,触发条件写
并行块 (了解即可)
• 以关键字fork … join将多条语句封装成块 • 所有语句并行执行
initial fork
a=0; #5 b=1; #10 c={a,b}; #15 d={b,a}; join
✓ 并行块容易引起竞争 ✓ 适用于绝对时间的控制 ✓ 实际建模时,并行块不可综合。用于仿真。 ✓ 仅用顺序块即可
Verilog HDL行为语句
类别 过程语句
块语句 赋值语句 条件语句 循环语句
编译向导语句
语句 initial always 串行块begin-end 并行块fork-join 持续赋值assign 过程赋值=、<= if-else case for repeat while forever `define `include `ifdef, `else, `endif
//敏感信号列表 case(sel)

Verilog_HDL基础知识

Verilog_HDL基础知识

•概述•Verilog HDL 的基本结构•运算符•语句•Verilog HDL模型级别•数据类型及常量、变量•语句的顺序执行与并行执行第8章Verilog HDL§8.1概述一、什么是Verilog HDL?Verilog HDL是一种应用广泛的硬件描述性语言,是硬件设计人员和电子设计自动化(EDA)工具之间的界面。

其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型。

即利用计算机的巨大能力对用Verilog HDL或VHDL建模的复杂数字逻辑进行仿真,然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路,然后生成该工艺条件下这种具体电路的延时模型。

仿真验证无误后用于制造ASIC芯片或写入EPLD和FPGA 器件中。

二、Verilog HDL语言的主要特征1、语法结构上,Verilog HDL语言与C语言有许多相似之处,并借鉴C语言的多种操作符和语法结构。

2、Verilog HDL语言既包含一些高层次程序设计语言的结构形式,同时也兼顾描述硬件电路具体的线路连接。

3、通过使用结构级或行为级描述可以在不同的抽象层次描述设计。

包括三个领域和五个抽象层次,如下表8.1 所示。

行为领域结构领域物理领域系统级性能描述部件及它们之间的逻辑连接方式芯片模块电路板和物理划分的子系统算法级(芯片级)I/O 应答算法级硬件模块数据结构部件之间的物理连接电路板底盘等寄存器传输级并行操作,寄存器传输,状态表ALU 、多路选择器、寄存器、总线微定序器、微存储器之间的物理连接方式芯片、宏单元逻辑级布尔方程门电路、触发器、锁存器标准单元布图电路级微分方程晶体管、电阻、电容等晶体管布图三个领域五个抽象层次4、Verilog HDL语言是并行的,即具有在同一时刻执行多任务的能力,因为在实际硬件中许多操作都是在同一时刻发生的。

一般来讲,计算机编程语言是非并行的。

VerilogHDL基本语法

VerilogHDL基本语法
参数(符号常量) 参数是一个常量,经常用于定义时延和变量的宽 度。
parameter byte_size=8; //定义一个常数参数 parameter, byte_msb=byte_size-1; //用数表达 式赋值 parameter average_delay = (r+f)/2; //用常数表 达式赋值
32’bx // ”x”表unknown
4’b0???
// ”?”表示高阻
7
常量
实数 十进制计数法,科学计数法
7.2 1.8e-4 //1.8*10-4 9.5E6
字符串与字符变量 字符串为两个双引号“ ”之间的字符,不许 跨行
“This is a string!”; //共17个字符
8
常量
关键词
rcmos real
realtime reg
release repeat rnmos rpmos rtran rtranif0 rtranif1 scalared small specify specparam
26
strength strong0 strong1 supply0 supply1
DQ
out1
DFF
变量
Memory类型
Verilog HDL通过对reg型变量建立数组来对存 储器建模,可以描述RAM型存储器,ROM存储 器和reg文件。
数组中的每一个单元通过一个数组索引进行寻 址。
在语言中没有多维数组存在。 memory型数据是通过扩展reg型数据的地址范 围来生成的。
Verilog HDL 基本语法
语汇代码的编写标准 常量、变量及数据类型 关键字和标示符 运算符 语句 综合代码的编写标准
语汇代码的编写标准

veriloghdl的行为语句

veriloghdl的行为语句

Verilog HDL的行为语句Verilog HDL有许多的行为语句,使其成为结构化和行为性的语言。

Verilog HDL语句包括:赋值语句、过程语句、块语句、条件语句、循环语句、编译预处理等,如表5-14所示。

符号“√”表示该语句能够为综合工具所支持,是可综合的。

5.3.1 赋值语句赋值语句包括持续赋值语句与过程赋值语句。

1. 持续赋值语句assign为持续赋值语句,主要用于对wire 型(连线型)变量赋值。

例如:assign c=~(a&amp;b); 在上面的赋值中,a、b、c三个变量皆为wire型变量,a和b 信号的任何变化,都将随时反映到c上来。

2. 过程赋值语句过程赋值语句多用于对reg型变量进行赋值。

过程赋值有阻塞赋值和非阻塞赋值两种方式。

a. 非阻塞赋值方式非阻塞赋值符号为“&lt;=”,如:b&lt;=a; 非阻塞赋值在整个过程块结束时才完成赋值操作,即b的值并不是立刻就改变的。

b. 阻塞赋值方式阻塞赋值符号为“=”,如:b=a; 阻塞赋值在该语句结束时就立即完成赋值操作,即b的值在该语句结束时立刻改变。

如果在一个块语句中(例如always块语句),有多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面的语句就不能被执行,仿佛被阻塞了一样,因此称为阻塞赋值方式。

5.3.2 过程语句VerilogHDL中的多数过程模块都从属于以下2种过程语句:initial及always。

在一个模块(module)中,使用initial和always语句的次数是不受限制的。

initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则是不断重复执行的。

1. initial过程语句initial过程语句使用格式如下:initial begin 语句1; 语句2;| 语句n; end intial语句不带触发条件,initial过程中的块语句沿时间轴只执行一次。

veriloghdl答案

veriloghdl答案

verilog-hdl答案第1章简介1.Verilog HDL是在哪一年首次被IEEE标准化的?Verilog HDL是在1995年首次被IEEE标准化的。

2.Verilog HDL支持哪三种基本描述方式Verilog HDL可采用三种不同方式或混合方式对设计建模。

这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模3.可以使用Verilog HDL描述一个设计的时序吗?Verilog HDL可以清晰的建立时序模型,故可以使用Verilog HDL描述一个设计的时序。

4.语言中的什么特性能够用于描述参数化设计?在行为级描述中, Verilog HDL不仅能够在RT L级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述,而且能够使用门和模块实例化语句在结构级进行结构描述,这种特性可用于描述参数化设计。

5.能够使用Verilog HDL编写测试验证程序吗?能,可以编写testbench来对编写的程序进行验证。

6.Verilog HDL是由哪个公司最先开发的?Verilog HDL是由Gateway Design Automation公司最先开发的7.Verilog HDL中的两类主要数据类型是什么?线网数据类型和寄存器数据类型。

线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。

8.UDP代表什么?UDP代表用户定义原语9.写出两个开关级基本门的名称。

pmos nmos10.写出两个基本逻辑门的名称。

and or第2章 HDL指南1. 在数据流描述方式中使用什么语句描述一个设计?设计的数据流行为使用连续赋值语句进行描述2. 使用` t i m e s c a l e 编译器指令的目的是什么?举出一个实例。

使用编译指令将时间单位与物理时间相关联。

例如` timescale 1ns /100ps 此语句说明时延时间单位为1ns并且时间精度为100ps (时间精度是指所有的时延必须被限定在0.1ns内)3. 在过程赋值语句中可以定义哪两种时延?请举例详细说明。

Verilog HDL数字集成电路设计原理与应用(第二版)(蔡觉平) (4)

Verilog HDL数字集成电路设计原理与应用(第二版)(蔡觉平) (4)
在现阶段,作为设计人员,熟练掌握Verilog HDL程 序设计的多样性和可综合性是至关重要的。作为数字集成电 路的基础,基本数字逻辑电路的设计是进行复杂电路设计的 17 前提。
本章通过数字电路中基本逻辑电路的Verilog HDL程序设计 进行讲述,要求读者掌握基本逻辑电路的可综合性设计,为 具有特定功能的复杂电路的设计打下基础。
组合电路的设计需要从以下几个方面考虑:首先,所 用的逻辑器件数目最少,器件的种类最少,且器件之间的连 线最简单,这样的电路称为“最小化”电路。其次,为了满 足速度要求,应使级数尽量少,以减少门电路的延迟;电路 的功耗应尽可能地小,工作时稳定可靠。
组合逻辑电路的描述方式有四种:真值表、逻辑代数、 结构描述、抽象描述。采用Verilog HDL进行组合逻辑电路 设计主要采用的就是这几种方式。下面结合具体的实例简单 介绍达四种描述方式。 20
6
例4.1-1 用Verilog HDL语言设计模256(8 bit)计数 器。
(a) 可综合程序描述方式: module counter (count,clk,reset); output count; input clk,reset; reg [7:0] count; reg out; always @(posedge clk) 7
wire [1:0] sum; reg OUT; assign sum=A+B+C; always @(sum)
if (sum>1) else
endmodule
OUT=1; OUT=0;
32
可以看到,以上4种Verilog HDL描述方式都可以对表决 电路进行设计。这里应该指出的是,Verilog HDL程序是对 逻辑电路功能的描述性设计,并非最终得到的电路。EDA综 合工具可以将Verilog HDL程序综合成物理电路形式,通过 电路优化,从而得到符合设计要求的最简化电路。采用 Synplify软件对上面4种方法中任一种方法设计的Verilog HDL程序进行综合(采用Altera公司的Stratix Ⅱ器件),可 以得到相同的最简化电路,如图4.2-4所示。

Verilog HDL语言的描述语句

Verilog HDL语言的描述语句

第4节Verilog HDL语言的描述语句Verilog HDL 描述语句2.4.1 结构描述形式通过实例进行描述的方法,将Verilog HDL预先定义的基本单元实例嵌入到代码中,监控实例的输入。

Verilog HDL中定义了26个有关门级的关键字,比较常用的有8个。

在实际工程中,简单的逻辑电路由逻辑门和开关组成,通过门元语可以直观地描述其结构。

基本的门类型关键字如下所述:•and•nand•nor•or•xor•xnor•buf•notVerilog HDL支持的基本逻辑部件是由该基本逻辑器件的原语提供的。

其调用格式为:门类型<实例名> (输出,输入1,输入2,……,输入N)例如,nand na01(na_out, a, b, c );表示一个名字为na01的与非门,输出为na_out,输入为a, b, c。

例2-5 一个简单的全加器例子:module ADD(A, B, Cin, Sum, Cout);input A, B, Cin;output Sum, Cout;// 声明变量wire S1, T1, T2, T3;xor X1 (S1, A, B),X2 (Sum, S1, Cin);and A1 (T3, A, B),A2 (T2, B, Cin),A3 (T1, A, Cin);or O1 (Cout, T1, T2, T3);endmodule在这一实例中,模块包含门的实例语句,也就是包含内置门xor、and和or的实例语句。

门实例由线网型变量S1、T1、T2和T3互连。

由于未指定顺序,门实例语句可以以任何顺序出现。

门级描述本质上也是一种结构网表。

在实际中的使用方式为:先使用门逻辑构成常用的触发器、选择器、加法器等模块,再利用已经设计的模块构成更高一层的模块,依次重复几次,便可以构成一些结构复杂的电路。

其缺点是:不易管理,难度较大且需要一定的资源积累。

2.4.2 数据流描述形式数据流型描述一般都采用assign连续赋值语句来实现,主要用于实现组合功能。

第四章 Verilog HDL行为语句

第四章 Verilog HDL行为语句
芜湖职业技术学院
第4章 Verilog HDL行为语句
赋值语句(assign、=、<=) 条件语句(if-else、case) 循环语句(for、forever、repeat、while) 过程语句(initial、always) 块语句(begin-end、fork-join)
芜湖职业技术学院
注:在同一ห้องสมุดไป่ตู้进程块中,最好不要同时用阻塞赋值和非阻 塞赋值语句。
芜湖职业技术学院
4.2 条件语句
条件语句有if-else语句和case语句两种,它们都是 顺序语句,应放在always块内。
1. if-else语句
格式与C语言中的if-else语句类似,使用方法有三种:
(1)If(表达式) 语句1; (2)If(表达式) 语句1; else 语句2;
芜湖职业技术学院
例如
begin case (HEX) 4'b0001 : LED = 7'b1111001; // 1 4'b0010: LED = 7'b0100100; // 2 4'b0011: LED = 7'b0110000; // 3 4'b0100: LED = 7'b0011001; // 4 4'b0101: LED = 7'b0010010; // 5 4'b0110: LED = 7'b0000010; // 6 4'b0111: LED = 7'b1111000; // 7 4'b1000: LED = 7'b0000000; // 8 4'b1001: LED = 7'b0010000; // 9 4'b1010: LED = 7'b0001000; // A 4'b1011: LED = 7'b0000011; // B 4'b1100: LED = 7'b1000110; // C 4'b1101: LED = 7'b0100001; // D 4'b1110: LED = 7'b0000110; // E 4'b1111: LED = 7'b0001110; // F default :LED = 7'b1000000; // 0 Endcase
  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;
相关文档
最新文档