




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 组合(zh)逻辑电路的设计4-1、译码器、解码器的设计(shj)4-2、数据选择器的设计4-3、数码转换器的设计4-4、比较器的设计4-5、算术运算4-6、只读存储器的设计共六十一页 有关VHDL电路设计语言的语法知识及电路设计的重要概念,都已在前面几章给了说明(shumng)。本章将重心放在VHDL电路设计语言的实际运用上。本章中将有一些实际电路设计范例,如:译码器与编码器、数据选择器与解数据选择器、数码转换、比较器 、只读存储器等,说明(shumng)如何使用VHDL电路设计语言,来设计一些经常会使用到的组合逻辑电路。共六十一页4-1 译码器与编码器 译码器与编码器的功能类似,它们
2、(t men)都是用来做码和码之间的转换器,只是功能恰好相反。译码器是把输入的数码解出其对应的数码,如果有N个二进制选择线,则最多可以码转换成2N个数据。当一个译码器有N条输入线及M条输出线时,这时为NM的译码器,如38译码器。 译码器也经常被应用在地址总线或用作电路的控制线。像只读存储器(ROM)中便利用译码器进行地址选址的工作。共六十一页4-1-1 译码器的设计(shj) 对于译码器,第一个想到的当然是输入数码(shm)和输出数码(shm)之间的对应关系,也就是说,“输入码和输出码之间的对应表”这应该算是设计译码器的必须条件。例如下面常见的38译码器的真值表:A0 A1 A2Y0 Y1 Y
3、2 Y3 Y4 Y5 Y6 Y70 0 0100000000 0 1010000000 1 0001000000 1 1000100001 0 0000010001 0 1000001001 1 0000000101 1 100000001共六十一页38译码器的VHDL设计(shj)。 38译码器,就表示它有3条输入线及8条输出(shch)线。另外为了方便译码器的控制或便于扩充之用,在设计时常会增加一个EN输入端。译码器的外部配置如图4-1所示。Y0A0A1A2ENY1Y2Y4Y3Y5Y7Y6图4-1 38译码器共六十一页 有了真值表,就可以直接用查表法(look up table)来设计,在
4、VHDL的语法中,“WITHSELECT”、“CASEWHEN”及“WHENELSE”这类指令都是执行查表或对应动作的能手,使用前应确定需要的是顺序(shnx)性语句还是并行同时性命令,否则程序在进行编译时,会发生错误。共六十一页程序范例(fnl)(程序文件EDAch4_1_1.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ch4_1_1 ISPORT(A : INSTD_LOGIC_VECTOR(2 DOWNTO 0);EN : IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );E
5、ND ch4_1_1;接下页共六十一页ARCHITECTURE a OF ch4_1_1 IS SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINSEL(0)=EN;SEL(1)=A(0);SEL(2)=A(1);SEL(3)=A(2);WITH SEL SELECTY=00000001WHEN0001,00000010WHEN0011,00000100WHEN0101,00001000WHEN0111,00010000WHEN1001,00100000WHEN1011,01000000WHEN1101,10000000WHEN1111,1111111
6、1 WHEN OTHERS;END a;只要将真值表内的数据,依次(yc)填入语法中,便完成编码的动作。最后(zuhu)一个位是EN 将EN、A2、A1、A0合并成序列,目的是将“EN”脚的功能,融入程序及电路中。当EN=1时,译码器工作正常,当EN=0时,译码器不动作。共六十一页程序(chngx)说明: (1)将EN、A2、A1、A0合并成序列的另一种写法是:“SEL=A&EN”。(2)withselect是一种非常好用的并行同时语法,和 其它功能相同,属于(shy)顺序语法的是caseselect,两者都是执行这种查表动作的利器。共六十一页仿真(fn zhn)结果:当EN=1时,译码器工作
7、(gngzu)正常,当EN=0时,译码器不动作。延时共六十一页Page 1of 2Page 2 of 2综合(zngh)后的RTL图:共六十一页时序(sh x)分析:右图为 tpd (Pin to Pin Delay) 的纪录,其中红色表示“Cant achieve timing requirement”。可以在优化设计(shj)中进行优化,使Required P2P Time与Actual P2P Time相符合。设定值实际值共六十一页4-1-2 编码器 编码器是将2N个分离的信息代码以N个二进制码来表示。如果一个编码器有N条输入线及M条输出线,则称之为MN编码器;它的动作(dngzu)和译
8、码器恰好相反。 编码器常用于影音压缩或通信方面,以达到精简传输量的目的。其实编码器也可以看成压缩电路,译码器也可以看成解压缩电路。传输数据前先用编码器压缩数据后再传送出去,接收端则由译码器将数据解压缩,还原原来的内容。共六十一页编码器将8位码编成3位码译码器将3位码解成8位码传输线或网络(wnglu)压缩(y su)解压缩本来需要传2N个数码的数据量,现在只需传N个数码。图4-2 编码器、译码器的压缩、解压缩功能 共六十一页83编码器的VHDL设计(shj) 和前面一样,有了编码器的外部管脚图,如图4-3所示,就能够做 Entity 的定义,再根据(gnj)编码器的真值表,和译码器一样使用查表
9、法,Architecture 内的描述便轻松地完成。图4-3 83编码器83解码器A7A6A5A4A3A2A1A0Y2Y1Y0共六十一页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ch4_1_2 ISPORT(A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);EN: IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );END ch4_1_2;程序范例(fnl) (程序文件EDAch4_1_2.vhd)A0 A1 A2 A3 A4 A5 A6 A7Y0 Y1 Y21000
10、00000 0 0010000000 0 1001000000 1 0000100000 1 1000010001 0 0000001001 0 1000000101 1 0000000011 1 1接下页真值表共六十一页ARCHITECTURE a OF ch4_1_2 IS SIGNAL SEL: STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINSEL=EN & A;WITH SEL SELECTY=000WHEN100000001,001WHEN100000010,010WHEN100000100,011WHEN100001000,100WHEN100010000,1
11、01WHEN100100000,110WHEN101000000,111WHEN110000000,000 WHEN OTHERS;END a;只要将真值表内的数据,依次(yc)填入语法中,便完成编码的动作。第一个位是EN共六十一页仿真(fn zhn)结果:EN=1时,编码器正常工作(gngzu),EN=0时,编码器不动作。共六十一页综合(zngh)后的RTL图:共六十一页 电路设计的方法众多(zhngdu),上例也可以利用卡诺图来化简,求得布尔代数式为:Y2=A7+A6+A5+A4,Y1=A7+A6+A3+A2,Y0=A7+A5+A3+A1。读者可自行(zxng)编程,比较两种方法的结果。共
12、六十一页4-2 数据(shj)选择器 数据选择器可以(ky)从多组数据来源中选择一组送入目的地,因此又称为数据选择器,其本质上是一个电子开关。数据选择器的结构是2N个输入线,会有N个地址选择线及1个输出线配合。本范例为41数据选择器。图4-4为数据选择器的电路符号。ABCDS1S0Z图4-4 数据选择器共六十一页4线至1线数据(shj)选择器(MUX4) (程序文件EDAch4_2_1.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL
13、;ENTITY ch4_2_1 IS PORT(A,B,C,D: INSTD_LOGIC_VECTOR(3 DOWNTO 0); -输入信号S: INSTD_LOGIC_VECTOR(1 DOWNTO 0); -地址(dzh)选择信号Z :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -输出信号 );END ch4_2_1;固定标题栏,用来宣告使用零件盒接口引脚定义接下页共六十一页ARCHITECTURE a OF ch4_2_1 ISBEGIN Z=A WHEN S=“00”ELSE -当S0=0,S1=0时,输入(shr)A被传送到Y B WHEN S=01ELSE -
14、当S0=0,S1=1时,输入B被传送到Y C WHEN S=10ELSE -当S0=1,S1=0时,输入C被传送到Y D WHEN S=11ELSE -当S0=1,S1=1时,输入D被传送到Y 0000;END a;地址选择线输出S0S1Z00A01B10C11D共六十一页仿真(fn zhn)结果:输出(shch)A输出B输出D输出C共六十一页4-2-1 解数据(shj)选择器的VHDL设计 数据选择器能从多组输入信号之中选取一组作为输出信号,解数据选择器的功能(gngnng)恰巧相反,它是用来将一组输入按照地址选择线制定的方式,传送到被选定的一组输出上(输出有很多组),见图4-5。INABC
15、D数据输入数据输出图4-5 解数据选择器共六十一页14 解数据(shj)选择器VHDL设计程序(chngx)范例(程序文件EDAch4_2_2)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_2_2 ISPORT(Z :IN STD_LOGIC_VECTOR(3 DOWNTO 0);-输入信号 S: INSTD_LOGIC_VECTOR(1 DOWNTO 0);-信号地址选择 A,B,C,D: OUTSTD_LOGIC
16、_VECTOR(3 DOWNTO 0) -输出信号);END ch4_2_2;接下页共六十一页ARCHITECTURE a OF ch4_2_2 ISBEGINPROCESS(Z,S)BEGINA=“0000”;B=“0000”;C=“0000”;DABCD=Z;END CASE;END PROCESS;END a;地址选择线输出S0S100A01B10C11D共六十一页仿真(fn zhn)结果: 从仿真结果得知,解数据选择器的运作功能完全符合当初的规划。在程序中对A、B、C、D赋初值是必要的,没有它,电路可能出现(chxin)错误的结果。共六十一页读者可以将程序的architecture描述
17、改用并行同时语法when.else来描述电路,与上例结果进行(jnxng)比较。共六十一页4-3 数码(shm)转换 在数字逻辑电路的内部,大多数采用二进制或十六进制的数字类型,在日常生活当中则几乎采用的都是十进制,所以经常会遇到(y do)数字类型之间相互转换的问题。 本节将重点放在最常用的两种数码转换电路,第一种是二进制转换成十进制,第二种是BCD码转换成七段显示器码。共六十一页4-3-1 二进制转换成十进制 现在的重点则是用VHDL来设计一个执行数码转换电路,将二进制的输入(shr)转换成十进制的输出。 下表示一个四位的二进制数码和其对应的十进制数码的对照表,其中这里所用的七段显示器是共
18、阴型七段显示器。共六十一页输入信号输出1:BCD输出2:七段显示码二进制对应的十进制十位数个位数十位数个位数000000000000001111110111111000110000000101111110000110001020000001001111111011011001130000001101111111001111010040000010001111111100110010150000010101111111101101011060000011001111111111100011170000011101111110000111100080000100001111111111111100
19、190000100101111111100111101010000100000000110011111110111100010001000011000001101100120001001000001101011011110113000100110000110100111111101400010100000011011001101111150001010100001101101101转换(zhunhun)表共六十一页数码(shm)转换(一):二进制十进制 (BCD码) (二):BCD码七段显示器码重点(zhngdin)提示: 逻辑概念: 当输入为09的数,其十位数字为0,个位数=输入。 当输入为
20、1015的数,十位数为1,个位数=输入-10。 数据类型: 输入为UNSIGNED(3 DOWNTO 0),因为有减法运算。 输出有两个,分别为十位数(BCD1)、个位数(BCD0 ), 都是BCD码,故定义成STD_LOGIC_VECTOR。共六十一页程序(chngx)范例(程序文件EDAch4_3_1.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_3_1 ISPORT (A: INUNSIGNED(3 D
21、OWNTO 0);BCD0,BCD1: OUTSTD_LOGIC_VECTOR(3 DOWNTO 0);SEV0,SEV1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );END ch4_3_1;接下页共六十一页ARCHITECTURE a OF ch4_3_1 IS SIGNAL XC: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(A) BEGIN IF A10 THENBCD1=0000;BCD0=STD_LOGIC_VECTOR(A);SEV1=0111111;XC=STD_LOGIC_VECTOR(A); ELSEBCD
22、1=0001;BCD0=A-10;SEV1=0000110;XC10,则十位数部分(b fen)直接填入1;个位数部分(b fen)直接等于A-10A声明为UNSIGNED,故兼具逻辑(lu j)信号与数值信号的特性。此语法的作用是将A以逻辑(lu j)信号类型传送至XC共六十一页-将BCD码解成七段显示器用码SEV_SEGMENT:BLOCKBEGIN SEV0B、A=B、或是AB时,其值为1,否则为0。AEQB:当A=B时,其值为1,否则为0。ALTB:当AB时,其值为1,否则为0。图4-6 比较器共六十一页程序(chngx)范例(程序文件EDAch4_4_1.vhd)LIBRARY IE
23、EE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_4_1 ISPORT( A : INSTD_LOGIC_VECTOR(7 DOWNTO 0);B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK : IN STD_LOGIC;RST : IN STD_LOGIC;AGTB: OUT STD_LOGIC;ALTB: OUT STD_LOGIC;AEQB: OUT STD_LOGIC );END ch4_4_1;接下
24、页共六十一页ARCHITECTURE a OF ch4_4_1 ISBEGIN PROCESS(RST,CLK)BEGINIF RST =1 THEN AGTB=0;AEQB=0;ALTBB THEN AGTB=1;AEQB=0;ALTB=0; ELSIF A=B THEN AGTB=0;AEQB=1;ALTB=0; ELSE AGTB=0;AEQB=0;ALTBB、A=B、AB三者只能有一个情况的值为真。共六十一页4-5 算术(sunsh)运算使用(shyng)VHDL语言来执行算术运算时,常会碰到的两个问题:问题一:数据类型 基本上,VHDL是硬件电路描述语言,所以处理的信号不外乎是逻辑信
25、号和数值信号两种。逻辑信号是0和1的组合,它所执行的运算是布尔代数运算;数值信号是日常生活中所使用的数字,用来作加、减、乘、除的运算。在VHDL的算术运算中,内定的数据类型为整数或浮点数,需要做运算的是数值信号,但是执行运算的电路,却要求使用STD_LOGIC或STD_LOGIC_VECTOR的数据类型,在程序设计时必须小心。共六十一页问题二:进位(jnwi)的处理 VHDL程序中,在执行加法或乘法的运算时,是不会自动产生进位的,这样的安排可以让计数器设计的工作变得更为简单而直接(9数完直接跳回0)。如果(rgu)要执行相加或相乘的运算,就必须另外处理进位,否则将无法得到正确的结果。共六十一页
26、全加法器的VHDL设计(shj) 全加法器电路(dinl)的外部配置如图4-7 所示全加器ABCinBCDoutCout 图4-7 全加器其中Cin表示低位的进位,Cout表示向高位的进位。共六十一页 表4-1为全加器的真值表,根据(gnj)真值表,可推导出布尔方程式:BCDout=A xor B xor CinCout=(A and B) or (A and Cin) or (B and Cin) 加法器输入加法器输出ABCinBCDoutCout0000000110010100110110010101011100111111表4-1 全加器真值表共六十一页程序范例(fnl)(程序文件EDA
27、ch4_5_2.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_5_2 ISPORT(A : IN UNSIGNED(3 DOWNTO 0);B : IN UNSIGNED(3 DOWNTO 0);CIN : IN STD_LOGIC;BCDOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT: OUT STD_LOGIC);END ch4_5_2;被定义成 UNSIGNED
28、的信号经过语法转换或是运算之后,便可当作逻辑信号处理。从而解决了问题(wnt)一中的难题。接下页共六十一页ARCHITECTURE a OF ch4_5_2 IS SIGNAL Y,C: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN Y(0)=A(0) XOR B(0) XOR CIN; Y(1)=A(1) XOR B(1) XOR C(0); Y(2)=A(2) XOR B(2) XOR C(1); Y(3)=A(3) XOR B(3) XOR C(2); C(0)=(A(0) AND CIN) XOR (CIN AND B(0) XOR (A(0) AND B(0)
29、; C(1)=(A(1) AND C(0) XOR (C(0) AND B(1) XOR (A(1) AND B(1); C(2)=(A(2) AND C(1) XOR (C(1) AND B(2) XOR (A(2) AND B(2); C(3)=(A(3) AND C(2) XOR (C(2) AND B(3) XOR (A(3) AND B(3); BCDOUT=Y(3)&Y(2)&Y(1)&Y(0); COUT=C(3);END a;和平常做加法器一样(yyng),从最低位往后计算至最高位。共六十一页仿真(fn zhn)结果:1100+1000+0000=1 01001011+0110
30、+0001=1 0010共六十一页4-5-1 减法器 至于减法器的 architecture 应该如何描述(mio sh),同样可从减法器的真值表(表4-2)中推导出布尔方程式:BCDout=A xor B xor CinCout=(not A and B) or (not A and Cin) or (B and Cin) 加法器输入加法器输出ABCinBCDoutCout0000000111010110110110010101001100011111表4-2 减法器的真值表共六十一页减法器的VHDL设计(shj) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A
31、LL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_5_4 ISPORT(A : IN UNSIGNED(3 DOWNTO 0);B : IN UNSIGNED(3 DOWNTO 0);CIN : IN STD_LOGIC;BCDOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT: OUT STD_LOGIC);END ch4_5_4;接下页范例(fnl)程序(程序文件EDAch4_5_4.vhd)共六十一页ARCHITECTURE a OF ch4_5_4 I
32、S SIGNAL Y,C: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN Y(0)=A(0) XOR B(0) XOR CIN; C(0)=(NOT A(0) AND CIN) OR (CIN AND B(0) OR (NOT A(0) AND B(0) ; GEN:FOR I IN 1 TO 3 GENERATE Y(I)=A(I) XOR B(I) XOR C(I-1); C(I)=(NOT A(I) AND C(I-1) OR (C(I-1) AND B(I) OR (NOT A(I) AND B(I) ; END GENERATE;BCDOUT=Y(3)&Y(2
33、)&Y(1)&Y(0);COUT=C(3);END a;与前面的全加器进行比较,使用“forgenerate”指令(zhlng)可简化程序的设计。共六十一页仿真(fn zhn)结果:A-B-Cin=5,正确(zhngqu)。Cout=0代表没有借位A-B-Cin=8,Cout=1,代表结果是负数,所以需要借位。共六十一页4-6 只读存储器 常见(chn jin)的记忆芯片有两种:RAM(Random-Access Memory)及ROM(Read-Only Memory)。例如图4-8所表示的是一个可以存储16组数据,且每组数据为8位的ROM方框图。ROM4位源地址选择线使能8位数据总线输出图
34、4-8 ROM方块图共六十一页ROM电路(dinl)的VHDL设计重点(zhngdin)说明: 当使能管脚(CE)的值为1时,ROM芯片不工作,此时8位数据总线输出“00000000”;若CE的值为0时,ROM芯片将按照输入地址选择线的内容,将存储与该地址的数据经由8位数据总线输出。共六十一页程序范例(fnl)(程序文件EDAch4_6_1.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ch4_6_1 ISPORT(ADDR : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CE : IN STD_LOGIC; DATAOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ch4_6_1;ARCHITECTURE a OF ch4_6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度本科工程招标合同履约保证金管理细则
- 二零二五年度路灯工程保险合同范本
- 2025年茶叶与茶具体验店合作销售合同
- 二零二五年度矿产勘查合同标准范本
- 二零二五版汽车租赁车辆奖励协议
- 二零二五年度新型房屋贷款及买卖一体化服务合同
- 二零二五年度电子产品全球市场销售总代理协议
- 神经营养性角膜炎诊疗指南(2025年版)
- 农村房产购买贷款按揭合同范本
- 二零二五年度高端智能电子产品批发销售合同
- 不安腿综合征的护理查房
- 2025年汕头市税务系统遴选面试真题附带题目详解含答案
- 土地资源管理试题带答案
- 贺州市民宿管理暂行办法
- 西学中试题库及答案
- 人力行政部工作流程图
- 基于UC3844的反激开关电源设计
- 2021心内科工作计划心内科新年工作计划.doc
- 弧形闸门安装作业指导书
- (完整word版)危急值报告制度最终版
- 园林公司质量管理手册和程序文件2008版
评论
0/150
提交评论