520 likes | 870 Views
第 4 章 组合逻辑电路. 4.5 组合可编程逻辑器件. PLD 的表示方法、结构和分类 组合逻辑电路的 PLD 实现. 可编程逻辑器件是一种可以由用户定义和设置 逻辑功能的器件。该类器件具有逻辑功能实现 灵活、集成度高、处理速度快和可靠性高等特点。. 反馈输入信号. 一、 PLD 的结构、表示方法及分类. 1 、 PLD 的基本结构. 可由或阵列直接输出,构成组合输出; 通过寄存器输出,构成时序方式输出 。. PLD 主体. 输出函数. 输入信号. 输入 电路. 与门 阵列. 或门 阵列. 输出 电路. 互补 输入.
E N D
第 4章 组合逻辑电路 4.5 组合可编程逻辑器件 • PLD的表示方法、结构和分类 • 组合逻辑电路的PLD实现
可编程逻辑器件是一种可以由用户定义和设置 逻辑功能的器件。该类器件具有逻辑功能实现 灵活、集成度高、处理速度快和可靠性高等特点。
反馈输入信号 一、 PLD的结构、表示方法及分类 1、PLD的基本结构 • 可由或阵列直接输出,构成组合输出; • 通过寄存器输出,构成时序方式输出。 PLD主体 输出函数 输入信号 输入 电路 与门 阵列 或门 阵列 输出 电路 互补 输入 乘积项 和项
与门 阵列 或门 阵列 互补 输入 和项 乘积项
2.PLD的逻辑符号表示方法 (1)连接的方式
与门 或门 A F1 & B L C × × L A B C D L F1=A•B•C F1=A+B+C+D L A ≥1 B L C D (2)基本门电路的表示方式
输入缓冲器 三态输出缓冲器 输出恒等于0的与门 输出为1的与门
(3) 编程连接技术 熔丝工艺的与门原理图 PLD表示的与门
5V 5V A C D V + (5V) B V CC CC 0V 5V R W 3k 5V 5V D 1 L A D 2 L B D 3 C 高电平 低电平 A、B、C有一个输入低电平0V L=A•B•C A、B、C三个都输入高电平+5V
连接 连接 连接 断开 连接 连接 断开 断开 1 1 1 1 0 1 A、B、C 中有一个为0 输出为0; A、B、C 都为1 X X 输出为1。 L=ABC L=AC 器件的开关状态不同, 电路实现逻辑函数也就不同
(4) 浮栅MOS管开关 叠栅注入MOS(SIMOS)管 浮栅隧道氧化层MOS(Flotox MOS)管 浮栅MOS管 快闪(Flash)叠栅MOS管 用不同的浮栅MOS管连接的PLD,编程信息的擦除方法也不同。SIMOS管连接的PLD,采用紫外光照射擦除;Flotox MOS管和快闪叠栅MOS管,采用电擦除方法。
GND GND 25V 5V i i 25V 5V 浮栅无电子 浮栅无电子 浮栅有电子 D D 当浮栅上没有电荷时,给控制栅加上大于VT1的控制电压,MOS管导通。 O O V V V V v v T1 T1 T2 T2 GS GS 编程前 编程前 编程后 a.叠栅注入MOS(SIMOS)管 当浮栅上带有负电荷时,使得MOS管的开启电压变高,如果给控制栅加上VT1控制电压,MOS管仍处于截止状态。 若要擦除,可用紫外线或X射线,距管子2厘米处照射15-20分钟。
GND GND 5V 5V 5V 5V 导通 截止
断开 断开 连接 连接 连接 连接 断开 断开 L=B•C 1 1 1 1
b.浮栅隧道氧化层MOS(Flotox MOS)管 浮栅延长区与漏区N+之间的交叠处有一个厚度约为80A (埃)的薄绝缘层——遂道区。 当遂道区的电场强度大到一定程度,使漏区与浮栅间出现导电遂道,形成电流将浮栅电荷泄放掉。 遂道MOS管是用电擦除的,擦除速度快。
c.快闪叠栅MOS管开关 (Flash Memory) (自学) 结构特点: 1.闪速存储器存储单元MOS管的源极N+区大于漏极N+区,而SIMOS管的源极N+区和漏极N+区是对称的; 2. 浮栅到P型衬底间的氧化绝缘层比SIMOS管的更薄。 特点:结构简单、集成度高、 编程可靠、擦除快捷。
低密度可编程逻辑器件 高密度可编程逻辑器件 PLA PAL GAL PROM 可编程逻辑器件 EPLD CPLD FPGA (LDPLD) (HDPLD) (PLD) 3.PLD的分类 1)按集成密度划分为
2)按结构特点划分 • 简单PLD (PAL,GAL) • 复杂的可编程器件(CPLD) : CPLD的代表芯片如:Altera的MAX系列 • 现场可编程门阵列(FPGA)
3)按PLD中的与、或阵列是否编程分 PLD中的三种与、或阵列 与阵列可编程,或 阵列固定(PAL和 GAL等) 与阵列固定,或阵 列可编程(PROM) 与阵列、或阵列 均可编程(PLA)
二、 组合逻辑电路的 PLD 实现 例1 逻辑电路如图所示,试写出该电路的逻辑表达式,并确定其逻辑功能。
AnBnCn AnBnCn AnBnCn 电路功能:全加器 AnBnCn AnBn AnCn BnCn
例3:设计一个2位二进制数相加的逻辑电路。X1X0例3:设计一个2位二进制数相加的逻辑电路。X1X0 是被加数,Y1Y0是加数, S1S0是X、Y的相加的和, C是进位。 列出真值表,并用PLD实现(在或阵列上打X)
4.6用VerilogHDL描述组合逻辑电路 本部分内容不作为理论课考试要求范围,供同学自学
4.6.1 组合逻辑电路的门级建模 门级建模:将逻辑电路图用HDL规定的文本语言表示出来。 基本门级元件模型 多输入门 三态门 多输出门
buf n-output buffer not n-output inverter bufif0 tri-state buffer; Io enable bufif1 tri-state buffer; hi enable notif0 tri-state inverter; Io enable notif1 tri-state inverter; hi enable and n-input AND gate nand n-input NAND gate or n-input OR gate nor n-input NOR gate xor n-input exclusive OR gate xnor n-input exclusive NOR gate Verilog 基本门级元件
输 入 and 输 入 nand真值表 and真值表 输入1 调用名 z 0 X 1 2 2 nand 输入1 0 0 0 0 0 0 1 x z 1 0 1 x x 0 1 1 1 1 x 0 x x 1 1 0 x x x z 0 x x x x 1 x x x z 1 x x x 1、多输入门 只允许有一个输出,但可以有多个输入。 and A1(out,in1,in2,in3); X- 不确定状态 Z- 高阻态
输 入 输 入 xor真值表 or真值表 or 输入1 xor 输入1 2 2 0 1 X Z 0 1 X Z 0 0 1 X X 0 0 1 X X 1 1 1 1 1 1 1 0 X X X X 1 X X X X X X X Z X 1 X X Z X X X X
not buf真值表 not真值表 输 入 out1 out1 out2 out2 0 1 x z buf 输 入 in in … … 1 0 x x 0 1 x z outN outN 0 1 x x 输 出 输 出 2、多输出门 允许有多个输出,但只有一个输入。 buf B1(out1,out2,…,in); not N1(out1,out2,…,in);
notif1真值表 bufif1真值表 控制输入 bufif1 控制输入 notif1 0 1 z x 0 1 x z z 0 1 1/z 1/z 0 0 0/z 0/z z 数 据 输 入 数 据 输 入 1 z 0 0/z 0/z 1 z 1 1/z 1/z x z x x x x z x x x z z x x x z z x x x 3、三态门 有一个输出、一个数据输入和一个输入控制。 如果输入控制信号无效,则三态门的输出为高阻态z。
说明 部分 功能 描述 //Gate-level description of a 2-to-4-line decoder module _2to4decoder (A1,A0,E,Y); input A,B,E; output [3:0]Y; wire A1not,A0not,Enot; not n1 (A1not,A1), n2 (A0not,A0), n3 (Enot,E); nand n4 (Y[0],A1not,A0not,Enot), n5 (Y[1],A1not,A0,Enot), n6 (Y[2],A1,A0not,Enot), n7 (Y[3],A1,A0,Enot); endmodule 4、设计举例 试用Verilog语言的门级 元件描述2线-4线译码器.
例2 用Verilog的门级元件进行 描述由三态门构成的2选1数据选择器 。 //Gate-level description of a 2-to-1-line multiplexer module _2to1muxtri (A,B,SEL,L); input A,B,SEL output L; tri L; bufif1 (L,B,SEL); bufif0 (L,A,SEL); endmodule
5、分层次的电路设计方法简介 分层次的电路设计:在电路设计中,将两个或多个模块组 合起来描述电路逻辑功能的设计方法。 设计方法:自顶向下和自底向上两种常用的设计方法 4位全加器的层次结构框图
//Gate-level hierarchical description of 4-bit adder // Description of half adder module halfadder (S,C,A,B); input A,B; output S,C; //Instantiate primitive gates xor (S,A,B); and (C,A,B); endmodule
D1 D2 S1 //Description of 1-bit full adder module fulladder (S,CO,A,B,CI); input A,B,CI; output S,CO; wire S1,D1,D2; //内部节点信号 //Instantiate the halfadder halfadder HA1 (S1,D1,A,B); halfadder HA2 (S,D2,S1,CI); or g1(CO,D2,D1); endmodule
//Description of 4-bit full adder module _4bit_adder (S,C3,A,B,C_1); input [3:0] A,B; input C_1; output [3:0] S; output C3; wire C0,C1,C2; //内部进位信号 //Instantiate the fulladder fulladder FA0 (S[0],C0,A[0],B[0],C_1), FA1 (S[1],C1,A[1],B[1],C0), FA2 (S[2],C2,A[2],B[2],C1), FA3 (S[3],C3,A[3],B[3],C2); endmodule
4.6.2 组合逻辑电路的数据流建模 数据流建模能在较高的抽象级别描述电路的逻辑功能。通过逻辑综合软件,能够自动地将数据流描述转换成为门级电路。
&A=1&0&1&0=0 ~^A=1 ~^B=1 缩位运算 ~&A=1 &B=1 |A=1 ~|B=0 ^A=0 ^B=0 A~^B= 1010 位运算 ~A = 0101 ~B = 0000 A|B= 1111 A^B= 0101 A&B= 1010 位运算符与缩位运算的比较 A:4’b1010 、 B:4’b1111,
位拼接运算符 作用是将两个或多个信号的某些位拼接起来成为一个新的操作数,进行运算操作。 设A=1’b1,B=2’b10,C=2’b00 则{B,C}=4’b1000 {A,B[1],C[0]}=3’b110 {A,B,C,3’b101}=8’b11000101。 对同一个操作数的重复拼接还可以双重大括号构成的运算符{{}} 例如{4{A}}=4’b1111,{2{A},2{B},C}=8’b11101000。
条件运算符 是三目运算符,运算时根据条件表达式的值选择表达式。 一般用法: condition_expr?expr1:expr2; 首先计算第一个操作数condition_expr的值,如果结果为逻辑1, 则选择第二个操作数expr1的值作为结果返回,结果为逻辑0, 选择第三个操作数expr2的值作为结果返回。
2、数据流建模举例 数据流建模使用的基本语句是连续赋值语句assign ,该语句用于对wire型变量进行赋值, 它由关键词assign开始,后面跟着由操作数和运算符组成的逻辑表达式。 连续赋值语句的执行过程是:只要逻辑表达式右边变量的逻辑值发生变化,则等式右边表达式的值会立即被计算出来并赋给左边的变量。 2选1数据选择器的连续赋值描述是: wire A,B,SEL,L; //声明4个连线型变量 assign L=(A & ~SEL)|(B & SEL); //连续赋值 注意,在assign语句中,左边变量的数据类型必须是wire型。
//Dataflow description of a 2-to-4-line decoder, module decoder_df (A1,A0,E,Y); input A1,A0,E; output [3:0] Y; assign Y[0] = ~(~A1 & ~A0 & ~E); assign Y[1] = ~(~A1 & A0 & ~E); assign Y[2] = ~(A1 & ~A0 & ~E); assign Y[3] = ~(A1 & A0 & ~E); endmodule
用条件运算符描述了一个2选1的数据选择器。 //Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,SEL,L); input A,B,SEL; output L; assign L = SEL ? A : B; endmodule 在连续赋值语句中,如果SEL=1,则输出L=A;否则L=B。
4.6.3组合逻辑电路的行为级建模 行为级建模就是描述数字逻辑电路的功能和算法。 一般使用always结构,后面跟着一系列过程赋值语句,给reg类型的变量赋值。
1、条件语句( if语句) 条件语句就是根据判断条件是否成立,确定下一步的运算。 Verilog语言中有3种形式的if语句: if (condition_expr) true_statement; if (condition_expr) true_statement; else fale_ statement; if (condition_expr1) true_statement1; else if (condition_expr2) true_statement2; else if (condition_expr3) true_statement3; …… else default_statement; if后面的条件表达式一般为逻辑表达式或关系表达式。执行if语句时,首先计算表达式的值,若结果为0、x或z,按“假”处理;若结果为1,按“真”处理,并执行相应的语句。
2、多路分支语句(case语句) 是一种多分支条件选择语句,一般形式如下: case (case_expr) item_expr1: statement1; item_expr2: statement2; …… default: default_statement; //default语句可以省略
例 //Behavioral description of 2-to-1-line multiplexer module mux2to1_bh(A, B, SEL, L); input A, B, SEL; output L; reg L; //define register variable always @(SEL or A or B) if (SEL == 1) L = b; //也可以写成 if (SEL) L=B; else L = A; endmodule
//Behavioral description of 4-to-1-line multiplexer module mux4to1_bh(A,SEL,E,L); input [3:0] A; input [1:0] SEL; output L; reg L; always @(A or SEL or E) begin if (E==1) L = 0; else case (SEL) 2’d0: L = A[0]; 2’d1: L = A[1]; 2’d2: L = A[2]; 2’d3: L = A[3]; endcase end endmodule
本部分课后作业(Page199) • 4.5.1 • 4.5.3