《数字设计第八章》由会员分享,可在线阅读,更多相关《数字设计第八章(70页珍藏版)》请在金锄头文库上搜索。
1、1,第八章 可编程逻辑电路,8.1 概述,8.2 只读存储器(ROM),8.3 可编程逻辑阵列(PLA),8.4 可编程阵列逻辑(PAL),8.5 用Verilog HDL设计逻辑电路,2,8.1 概述,高密度可编程逻辑器件HDPLD有:CPLD、FPGA。,低密度可编程逻辑器件LDPLD有:PROM、PLA、PAL和GAL。,常见的PLD器件有:PROM、PLA、PAL、GAL、CPLD和FPGA等。,PLD(Programmable Logic Devices)是一种“与-或”两级结构的逻辑器件。,一、PLD器件概念及分类,3,二、PLD的基本结构,4,三、PLD电路的表示方法及有关符号,
2、(2)PLD与门表示法,(1)PLD缓冲表示法,5,(4)PLD连接的表示法,(3)PLD或门表示法,6,与或阵列是PLD器件中最基本的结构,通过改变“与阵列”和“或阵列”的内部连接就可实现不同的逻辑功能。,四、与或阵列,7,五、宏单元,与或阵列在PLD器件中只能实现组合逻辑电路的功能,PLD器件的时序电路功能则由包含触发器或寄存器的逻辑宏单元实现。,逻辑宏单元(Output Logic Micro Cell)的作用为:,(1)提供时序电路需要的寄存器或触发器;,(2)提供多种形式的输入/输出方式;,(3)提供内部信号反馈,控制输出逻辑极性;,(4)分配控制信号,如寄存器的时钟和复位信号,三态
3、门的输出使能信号。,8,8.2 只读存储器(ROM),一、ROM的结构和分类(2nm(位),1、ROM的结构,9,0,1,0,0,1,1,1,0,10,上图是44ROM电原理图。若A1A0=01时,使W1为“1”,则三极管V0、V2、V3导通使F0、F2、F3为“1”,而V1截止,故F1输出为“0”。,从逻辑电路的角度出发,字线和位线之间构成逻辑“或”的关系。故:,F0 = W0+W1,F1 = W0,F2 = W0+W1+W2+W3,F3 = W1+W2+W3,11,根据地址译码器的功能可以写出字线的表达式为:,代入F0 F3 得:,12,13,将逻辑图画成阵列图:,14,2、ROM的分类,
4、(1)掩模型ROM,由厂家根据用户要求对芯片写入信息,通过掩模工艺在规定的位置制作晶体管(此位为“1”),不作晶体管(此位为“0”),用户不能改动。,(2)可编程ROM(PROM),存储的内容可由用户写入,写“0”时,烧断晶体管基极的熔丝,写“1”时保留熔丝。但编程后不能再改变。,(3)可多次编程ROM(EPROM),EPROM在用户编程后还允许用紫外光或者电信号擦除数据重新编程。EPROM一旦编程后,在使用时只能读出信息而不能写入信息。,15,二、ROM的应用,例:用ROM实现下列逻辑函数。,解:,16,F1,F2,F3,17,8.3 可编程逻辑阵列(PLA),PLA采用函数最简“与或”式中
5、的“与”项来构成“与”阵列。和ROM相比,PLA的与阵列不再产生2n个最小项,而是产生简化后的与项。这样,一个存储单元就可被多个地址码选中,从而达到节省储存空间的目的。,例1:分别用ROM和PLA实现下列逻辑函数。,F1(A,B,C)=m(2,5,6),F2(A,B,C)=m(4),F3(A,B,C)=m(2,4,5,6),18,用ROM实现,19,先将函数式化简,注意公共项的利用。,以上三式中不同的与项为:,用PLA实现,20,F1,F2,F3,21,例2:试用PLA设计一个8421BCD码到余3码的代码转换电路。,22,根据真值表,画卡诺图,化简后可得到最简的与或表达式:,23,24,例3
6、:试用PLA和触发器设计一个6进制同步加法计数器。,25,26,27,讨论能否自启动,即检查没用到的状态“110”和“111”。,1 1 0 1 1 1 0,1 1 1 0 0 0 0,28,29,8.4 可编程阵列逻辑PAL,相对于PLA,PAL制作工艺简单、易于编程,且有多种结构。,下面举例说明:,PAL由一个可编程的“与”阵列和一个固定的“或”阵列构成。,30,(1) 专用输出的基本门阵列结构,31,(2) 带反馈的可编程结构,32,(3) 带反馈的寄存器输出结构,33,(4) 加“异或”、带反馈的寄存器输出结构,34,(5) 算术选通反馈结构,35,36,例:试用PAL实现下列逻辑函数
7、。,根据逻辑函数作出的PAL逻辑电路如下:,37,38,电路行为的先后顺序通过时钟节拍顺序来体现。,8.5 用Verilog HDL设计逻辑电路,Verilog HDL是一种硬件语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真。,利用Verilog HDL编程时,要时刻牢记Verilog是硬件语言,要时刻将Verilog HDL语句与硬件电路对应起来;,电路在物理上是并行工作(只要电源接通,所有电路都同时工作),要求在Verilog HDL的module中,所有描述语句(包括连续赋值语句assign、行为语句块always/initial、模块实例化)都是并发执行的;,39,创建灵活,可
8、以创建组合逻辑和时序逻辑电路; 能够实现端口到端口时延、路径时延、设计的时序检查; 能够描述多层次设计,设计规模可大可小; 人机对话方便(设计者与EDA工具间交互),ASIC和FPGA设计师可用它来编写可综合的代码; 可以创建测试激励Testbench(特殊型module); 提供强有力的文件读写能力; 可以显式地对并发和定时进行建模; 描述系统的结构,做高层次的仿真; 验证工程师编写各种层次的测试模块对具体电路设计工程师所设计的模块进行全面细致的验证; 库模型的设计:可以用于描述ASIC和FPGA的基本单元(Cell)部件,也可以描述复杂的宏单元(Macro Cell); Verilog H
9、DL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。,Verilog的主要功能,40,Verilog的多种描述方式,提供了多种描述方式:开关级描述方式(开关级建模)、门级描述方式(门级建模)、数据流级描述方式(数据流级建模)和行为级描述方式(行为级建模)。,设计能在多个抽象级别上进行:开关级、门级、RTL级、算法级等。,41,(1)Verilog的开关级描述方式,能够使用内置开关级原语对设计完整建模;,开关级基本结构模型:内置pmos、nmos等。,(2)Verilog的门级描述方式,能够使用内置门级原语对设计完整建模;,门级基本结构模型:内置and、or、nand等。,(3)
10、Verilog的数据流级描述方式,能够使用内置数据流级原语assign和位运算符对设计完整建模;,位运算符有:&、 、等。,42,(4)Verilog的行为级描述方式,能够使用结构和算法对设计完整建模;,常用语句有:initial(只执行一次) always (循环执行),还提供一些高级语言结构,如if语句、case语句、循环语句等。,43,8.5.1 数值、常量、数据类型及变量,Verilog HDL的数值有四类:0(逻辑0)、1(逻辑1)、Z/z(高阻)、X/x(未知)。,1)整数型常量,定义格式:,1、数值,其中:o(O)表示八进制;b(B)表示二进制;d(D)表示十进制;h(H)表示十
11、六进制。,2、常量,注意:单引号和进制之间不能有空格。,例:3b001、3b01、3b1111001、b001。,44,由十进制计数法或科学计数法的形式组成。,2)实数型常量,例:12.56、1.345、1234.6567。,例:1.56E2、5E-3。,3)字符串常量,由双引号内的字符序列组成,用一串8位二进制ASCII码的形式表示,每一个8位二进制ASCII码表示一个字符。,例:”hello”、”abc”。,45,3、数据类型及变量,数据类型与基本逻辑单元建库有关,由半导体厂家和EDA工具厂家共同提供。,Verilog HDL有两大类数据类型,1)线网类型,nets type表示Veril
12、og结构化元件间的物理连线。它的值由驱动元件的值决定,例如:连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为Z(高阻)。,register type表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量的缺省值为X(未知)。,2)寄存器(变量)类型,46,nets型变量指输出始终根据输入变化而更新其值的变量,一般是指硬件电路中的各种物理连接。,1)线网类型,Verilog HDL中提供了多种nets型变量,但最常用的是wire型变量。Verilog HDL模块中的输入/输出信号类型缺省时自动定
13、义为wire型。,wire型变量的定义格式如下: wire 数据名1,数据名2,数据名n;,例1:wire a,b; /定义了两个1位的wire型变量a,b,例2:wire7:0 databus;/定义了8位宽度的数据总线,47,2)寄存器(变量)类型,register型变量对应的是具有状态保持作用的电路元件,如触发器、寄存器等。,register型变量与 nets型变量的根本区别:register型变量需要被明确地赋值,并且在被重新赋值前一直保持原值。所以在设计中要将register型变量放在过程块语句(如Initial , always)中赋值。,reg型变量的定义格式如下: reg 数据
14、名1,数据名2,数据名n;,例2:reg 7:0 data /定义data为8位宽的数据,例1:reg a,b; /定义了两个一位的reg型变量a,b,48,8.5.2 Verilog HDL的基本结构,1、Verilog-HDL语法基础,(1)注释要用“/*”与“*/”,或在注释前用“/”。,(2)标识符(如实例中的模块名)可用英文及下划线,标识符的开始不可用数字,大小写文字有区别。,(3)Module与endmodul相呼应,成对出现。,(4)Input定义输入信号变量。,(5)output定义输出信号变量。,(6)在门级描述中,调用Verilog-HDL具有的内置门实例语句,描述顺序为“
15、(输出,输入1,输入2);”的形式。,49,(7)在数据流描述方式中,以保留字assign和位运算符来描述逻辑表达式。,(8)最后写入endmodule,注意行末没有“;”。,2、模块的定义,module 模块名(端口参数):module G (A,B,F):端口定义-input A,B;output F;寄存器定义-reg C;线网定义-net D;内置门原语-and G1(F,A,B);或assign语句-assign F=A endmodule,50,例:右图为一个2输入与门模块,其模块名AND_G2,输入为A、B,输出为F。,方法一,称为门级描述方式或结构级的建模,module AND_G2(A,B,F);,input A,B;,output F;,and U1(F,A,B);,endmodule,在Verilog-HDL中,属于内置门实例语句的有:and(与)、nand(与非)、or(或)、nor(或非)、xor(异或)、xnor(同或)、buf(缓冲器)。,51,方法二,称为数据流级描述方式或数据流级建模,module AND_G2(A,B,F);,