《《数字逻辑》第2章逻辑代数和硬件描述语言基础》由会员分享,可在线阅读,更多相关《《数字逻辑》第2章逻辑代数和硬件描述语言基础(122页珍藏版)》请在金锄头文库上搜索。
1、数字逻辑,北航计算机学院 艾明晶 牛建伟 amj niujianwei,2,第2章 逻辑代数和硬件描述语言基础,本章介绍分析和设计数字逻辑电路的数学方法,包括:逻辑代数的基本概念,逻辑函数及其表示方法,逻辑代数的基本公式、常用公式和重要定理以及逻辑函数的简化方法。并介绍硬件描述语言Verilog HDL的基本知识。,2.1 逻辑代数基本概念 2.2 逻辑代数的运算法则 2.3 逻辑函数的表达式 2.4 逻辑函数的公式简化法 2.5 Verilog HDL基础,共7学时,3,2.5.1 Verilog HDL基本结构 2.5.2 Verilog HDL的词法 2.5.3 Verilog HDL常
2、用语句 2.5.4 不同抽象级别的Verilog HDL模型,2.5 Verilog HDL基础,内容概要,4,硬件描述语言简介,硬件描述语言(Hradware Description Language ) 是一种用形式化方法(即文本形式)来描述和设计数字电路和数字系统的高级模块化语言。它是设计人员和EDA工具之间的一个桥梁,主要用于编写设计文件,在EDA工具中建立电路模型;也用来编写测试文件进行仿真。,用HDL描述设计,编程下载,HDL发展至今已有近三十年的历史,到20世纪80年代,已出现了数十种硬件描述语言。80年代后期, HDL向着标准化、集成化的方向发展,最终VHDL、Verilog
3、HDL先后成为IEEE标准。 VHDL :VHSIC Hardware Description Language(VHSICVery High Speed Integrated Circuits),甚高速集成电路的硬件描述语言,来源于美国军方,1987年成为IEEE标准。目前标准化程度最高的一种HDL。,5,Verilog HDL简介,Verilog HDL是目前应用最为广泛的硬件描述语言,可以用来进行数字电路的建模、仿真验证、时序分析、逻辑综合。 1983年,由GDA(GateWay Design Automation)公司的Phil Moorby首创; 1989年,Cadence公司收购了
4、GDA公司; 1990年, Cadence公司公开发表Verilog HDL; 1995年,IEEE制定并公开发表Verilog HDL1364-1995标准。 Verilog HDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级,算法级,RTL级,门级,开关级。,6,Verilog HDL的特点,语法结构上的主要特点 形式化地表示电路的行为和结构; 借用C语言的结构和语句; 可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制; 具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述; 基本逻辑门、开关级结构模型均内置于Verilog HDL语言库中,
5、可直接调用; 易创建用户定义原语(UDP,User Designed Primitive) 。 易学易用,功能强,与C语言非常相似!,7,Verilog HDL与C语言的比较,语句及函数的比较,8,运算符的比较,Verilog HDL与C语言的运算符几乎完全相同!,9,Verilog HDL 与VHDL的比较,10,2.5.1 Verilog HDL基本结构,一、简单的Verilog HDL例子 【例2.13】 8位全加器 module adder8 ( cout,sum,a,b,cin ); output cout; / 输出端口声明 output 7:0 sum; input 7:0 a,
6、b; / 输入端口声明 input cin; assign cout,sum=a+b+cin; endmodule,端口定义,功能描述,模块名(文件名),整个程序嵌套在module和endmodule声明语句中。 每条语句相对module和endmodule最好缩进2格或4格! / 表示注释部分,一般只占据一行。对编译不起作用!,单行注释符,11,简单的Verilog HDL例子(1/3),【例2.14】 8位计数器 module counter8 ( out,cout,data,load, cin,clk ); output 7:0 out; output cout; input 7:0 d
7、ata; input load, cin,clk ; reg7:0 out; always (posedge clk) begin if(load) out = data; / 同步预置数据 else out = out + 1 + cin; / 加1计数 end assign cout = /若out为8hFF,cin为1,则cout为1 endmodule,功能描述,缩减运算符,按位与,12,简单的Verilog HDL例子(2/3),【例2.15】三态驱动器 module trist2(out,in,enable); output out; input in, enable; bufif
8、1 mybuf(out,in,enable); endmodule,例化元件名,门元件关键字,门元件例化程序通过调用一个在Verilog语言库中现存的实例门元件来实现某逻辑门功能。,Inputs | Output in enable | out X 0 | Z 1 1 | 1 0 1 | 0,bufif1的真值表,门元件例化,13,module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); out
9、put out; input in, enable; assign out = enable? in:bz; / * 如果enable为1,则out = in,否则为高阻态 * / endmodule,简单的Verilog HDL例子(3/3),【例2.16】三态驱动器( trist1.v),例化元件名(可省略),子模块名,顶层模块,子模块,模块元件例化顶层模块(trist1)调用由某子模块(mytri)定义的实例元件(tri_inst)来实现某功能。,模块元件例化,14,Verilog HDL基本结构总结,1.Verilog HDL程序是由模块构成的。每个模块嵌套在module和endmod
10、ule声明语句中。模块是可以进行层次嵌套的。 2.每个Verilog HDL源文件中只准有一个顶层模块,其他为子模块。源文件名称与顶层模块同名(后缀为.v)! 3.每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行描述。 4.程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。 5.除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后必须有分号。 6.可用/*.*/和/.对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性。,15,二、Verilog HDL模块的结构,Verilog的基本设计单元是“模块
11、(block) ” 。 Verilog模块的结构由在module和endmodule关键词之间的4个主要部分组成:,module block1(a,b,c,d ); input a,b,c; output d; wire x; assign d = a | x; assign x = ( b & c ); endmodule,I/O说明,端口定义,功能描述,信号类型声明,1,2,3,4,16,模块端口定义与I/O说明,1、模块端口定义 模块端口定义用来声明设计电路模块的输入输出端口,端口定义格式: module 模块名(端口1, 端口2, 端口3, ); 在端口定义的圆括弧中,是设计电路模块与
12、外界联系的全部输入输出端口信号或引脚,它是设计实体对外的一个通信界面,是外界可以看到的部分(不包含电源和接地端),多个端口名之间用“,”分隔。,2、 I/O说明 模块的I/O说明用来声明模块端口定义中各端口数据流动方向,包括输入(input)、输出(output)和双向(inout)。 input 端口1, 端口2, 端口3, ; output 端口1, 端口2, 端口3, ; inout 端口1, 端口2, 端口3, ;,端口定义、I/O说明和程序语句中的标点符号及圆括弧均要求用半角符号书写!,17,信号类型声明与功能描述,3、信号类型声明 信号类型声明用来说明设计电路的功能描述中,所用的信
13、号的数据类型以及函数声明。 信号的数据类型主要有连线(wire)、寄存器(reg)、整型(integer)、实型(real)和时间(time)等类型。,4、功能描述 功能描述是Verilog HDL程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于器件的内部电路结构。 功能描述可以用assign语句、元件例化(instantiate)、always块语句等方法来实现,通常把确定这些设计模块描述的方法称为建模。,18,逻辑功能定义,在Verilog 模块中有3种方法可以描述电路的逻辑功能: 用assign 语句 assign x = ( b & c );,数
14、据流描述,常用于描述组合逻辑,结构描述,例化元件名,门元件关键字,用元件例化(instantiate) and myand3( f,a,b,c);,注1:元件例化即是调用Verilog HDL提供的元件或由某子模块定义的实例元件; 注2:元件例化包括门元件例化和模块元件例化; 注3:例化元件名也可以省略!若不省略,则每个实例元件的名字必须唯一!以避免与其它调用该元件的实例相混淆。,19,逻辑功能定义(续),用“always”块语句 always (posedge clk) / 每当时钟上升沿到来时执行一遍块内语句 begin if(load) out = data; / 同步预置数据 else
15、 out = data + 1 + cin; / 加1计数 end,行为描述,注1:“always” 块语句常用于描述时序逻辑,也可描述组合逻辑。 注2:“always” 块可用多种手段来表达逻辑关系,如用if-else语句或case语句。 注3:“always” 块语句与assign语句是并发执行的, assign语句一定要放在“always” 块语句之外!,20,Verilog HDL程序的三种描述方式,结构(Structural)描述,对设计电路的结构进行描述,即描述设计电路使用的元件及这些元件之间的连接关系 属于低层次的描述方法,包括门级和开关级2种抽象级别,行为(Behavioura
16、l)描述,对设计电路的逻辑功能的描述,并不用关心设计电路使用哪些元件以及这些元件之间的连接关系 属于高层次的描述方法,包括系统级、算法级和寄存器传输级等3种抽象级别,数据流(Data Flow)描述,采用持续赋值语句,21,三、 Verilog HDL模块的模板,Verilog HDL模块的模板(仅考虑用于逻辑综合的程序),module () ; output 输出端口列表; input 输入端口列表; /(1)使用assign语句定义逻辑功能 wire ; assign = 表达式 ; /(2)使用always块定义逻辑功能 always () begin /过程赋值语句 /if语句 /case语句 /while,repeat,for循环语句 /task,function调用 end,22,Verilog HDL模块的模板(续),/