1 / 25

组合逻辑电路设计

组合逻辑电路设计. 将重心放在 VHDL 语言的实际运用上。将由一些实际的电路设计范例,说明如何使用 VHDL 语言,来设计一些经常会使用到的组合逻辑电路。. 译码器与编码器设计 多任务器与解多任务器设计 数码转换电路设计 比较器设计 算数运算电路设计 只读存储器( ROM )设计 三态门接口设计. 译码器与编码器设计. 译码器设计 A 、译码器是把输入的数码解出其对应的数码,如果有 N 个二进制选择线,则最多可译码转换成 2 ⁿ 个数据。 B 、 N 条输入线及 M 条输出线时,称为 N×M 的译码器。 C 、常应用在地址总线或用作电路的控制线。.

bedros
Download Presentation

组合逻辑电路设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 组合逻辑电路设计

  2. 将重心放在VHDL语言的实际运用上。将由一些实际的电路设计范例,说明如何使用VHDL语言,来设计一些经常会使用到的组合逻辑电路。将重心放在VHDL语言的实际运用上。将由一些实际的电路设计范例,说明如何使用VHDL语言,来设计一些经常会使用到的组合逻辑电路。 • 译码器与编码器设计 • 多任务器与解多任务器设计 • 数码转换电路设计 • 比较器设计 • 算数运算电路设计 • 只读存储器(ROM)设计 • 三态门接口设计

  3. 译码器与编码器设计 • 译码器设计 A、译码器是把输入的数码解出其对应的数码,如果有N个二进制选择线,则最多可译码转换成2ⁿ个数据。 B、N条输入线及M条输出线时,称为N×M的译码器。 C、常应用在地址总线或用作电路的控制线。

  4. 3到8线 解码器 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A0 A1 A2 EN ENTITY Dec3_8 IS PORT (A : IN STD_LOGIC_VECTOR( 2 DOWNTO 0) ; EN : IN STD_LOGIC ; Y : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0)) ; END Dec3_8 ; ARCHITECTURE BEHAVE OF Dec3_8 IS SIGNAL SEL : STD_LOGIC_VECTOR( 3 DOWNTO 0) ; BEGIN SEL(0) <= EN ; SEL(1) <= A(0) ; SEL(2) <= A(1) ; SEL(3) <= A(2) ; WITH SEL SELECT Y<= "00000001" WHEN "0001", "00000010" WHEN "0011", "00000100" WHEN "0101", "00001000" WHEN "0111", "00010000" WHEN "1001", "00100000" WHEN "1011", "01000000" WHEN "1101", "10000000" WHEN "1111", "11111111" WHEN OTHERS ; END BEHAVE ; • 说明: 1、将EN和A合并成序列的另一写法:SEL<=A&EN; 2、whit….select是平行语句,与其功能相同,属顺序语句的是Case….when。 3、将EN融入选择线的用法更为实用。

  5. 编码器设计 A、编码器是将2ⁿ个分离的信息代码以N个二进码来表示。 B、N条输入线及M条输出线时,称为N×M的编码器。 C、常运用于影音压缩或通信方面,以达到精简传输量的目的。编译器可看成压缩电路,译码器可看成解压电路。

  6. Y2 Y1 Y0 A7 A6 A5 A4 A3 A2 A1 A0 8到3线 解码器 ENTITY Endec8_3 IS PORT (A : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; EN : IN STD_LOGIC ; Y : OUT STD_LOGIC_VECTOR( 2 DOWNTO 0)) ; END Endec8_3 ; ARCHITECTURE BEHAVE OF Endec8_3 IS SIGNAL SEL : STD_LOGIC_VECTOR( 8 DOWNTO 0) ; BEGIN SEL <= EN & A ; WITH SEL SELECT Y<= "000" WHEN "100000001" , "001" WHEN "100000010" , "010" WHEN "100000100" , "011" WHEN "100001000" , "100" WHEN "100010000" , "101" WHEN "100100000" , "110" WHEN "101000000" , "111" WHEN "110000000" , "000" WHEN OTHERS ; END BEHAVE ; • 说明 也可利用卡诺图化简,得布尔方程式: Y2 = A7 + A7 + A5 +A4; Y1 = A7 + A6 + A3 +A2; Y0 = A7 + A5 + A3 +A1;

  7. 多任务器与解多任务器 • 多任务器设计 A、多任务器可以从多组数据来源中选取一组送入目的地。也称为数据选择器。 B、多任务器的结构是2ⁿ个输入线,会有N个地址选择线及1个输出线配合。 C、应用范围很广,组合逻辑的执行,数据路径的选择,通信中的传输系统,扫描电路等。

  8. A B Z C D S0 S1 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY Conc IS PORT (A, B, C, D : IN STD_LOGIC_VECTOR( 3 DOWNTO 0) ; S : IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ; Z : OUT STD_LOGIC_VECTOR( 3 DOWNTO 0 ) ) ; END Conc ; ARCHITECTURE BEHAVE OF Conc IS BEGIN Z<= A WHEN S="00" ELSE B WHEN S="01" ELSE C WHEN S="10" ELSE D WHEN S="11" ELSE "0000" ; END BEHAVE ; • 说明: 1、多任务器本质上是一个电子开关;

  9. 解多任务器设计 A、解多任务器将一组输入信号按照地址选择线指定的方式,传送到被选定的一组输出上。 B、多任务器的结构是1个输入线, N个地址选择线及2ⁿ个输出线。 ENTITY demux4 IS PORT (Z : IN STD_LOGIC_VECTOR( 3 DOWNTO 0) ; S : IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ; A, B, C, D : OUT STD_LOGIC_VECTOR( 3 DOWNTO 0 ) ) ; END demux4; ARCHITECTURE behave OF demux4 IS BEGIN PROCESS (Z,S) BEGIN A <= "0000" ; B <= "0000" ; C <= "0000" ; D <= "0000" ; CASE S IS WHEN "00" => A <= Z ; WHEN "01" => B <= Z ; WHEN "10" => C <= Z ; WHEN OTHERS => D <= Z ; END CASE ; END PROCESS ; END behave ; A B IN C D S0 S1

  10. 数码转换电路设计 • 数码转换电路设计 数字逻辑电路的内部,大多采用二进制或十六进制的数字类型,但日常生活才一般采用十进制。 两种常见的数码转换电路:二进制转十进制,BCD码转成七段显示器码。

  11. ENTITY CH4_3_1 IS PORT( A : IN UNSIGNED( 3 downto 0 ) ; BCD0, BCD1 : OUT STD_LOGIC_VECTOR( 3 DOWNTO 0) ; SEVEN0 , SEVEN1 : 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 A<10 THEN BCD1 <= "0000" ; BCD0<=STD_LOGIC_VECTOR(A) ; SEVEN1 <= "0111111" ; XC<=STD_LOGIC_VECTOR(A) ; ELSE BCD1 <= "0001" ; BCD0 <= A-10 ; SEVEN1 <= "0000110" ; XC <= STD_LOGIC_VECTOR(A)-10 ; END IF ; END PROCESS ;

  12. SEVEN_SEGMENT : BLOCK BEGIN SEVEN0 <= "0111111" WHEN XC= "0000" ELSE --0 "0000110" WHEN XC= "0001" ELSE --1 "1011011" WHEN XC= "0010" ELSE --2 "1001111" WHEN XC= "0011" ELSE --3 "1100110" WHEN XC= "0100" ELSE --4 "1101101" WHEN XC= "0101" ELSE --5 "1111101" WHEN XC= "0110" ELSE --6 "0000111" WHEN XC= "0111" ELSE --7 "1111111" WHEN XC= "1000" ELSE --8 "1101111" WHEN XC= "1001" ELSE --9 "0000000" ; END BLOCK SEVEN_SEGMENT ; END A ;

  13. 八位比较器的设计 输入信号: A,B:皆为八位信号 CLK:时钟脉冲输入 RST:清除控制。 输出信号: AGTB:当A>B,值为1,否则为0; AEQB:当A=B,值为1,否则为0; ALTB:当A<B,值为1,否则为0; 例子1: Architecture B of Comp1 is Begin Process(Rst,Clk) Begin If A>B then AGTB<=‘1’; Elsif A=B then AEQB<=‘1’; Else ALTB<=‘1’; End if; End process; End B; 例子2: Architecture A of Comp1 is Begin AGTB<=‘1’ When A>B else ‘0’; AEQB<=‘1’ When A=B else ‘0’; ALTB<=‘1’ When A<B else ‘0’; End A;

  14. ENTITY Comp2 IS PORT ( A: IN STD_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 Comp2; ARCHITECTURE arch OF Comp2 IS BEGIN PROCESS (RST,CLK) BEGIN IF RST = '1' THEN AGTB <= '0'; AEQB <= '0'; ALTB <= '0'; ELSIF CLK'EVENT AND CLK = '1' THEN IF A > B THEN AGTB <= '1'; AEQB <= '0'; ALTB <= '0'; ELSIF a = b THEN AGTB <= '0'; AEQB <= '1'; ALTB <= '0'; else AGTB <= '0'; AEQB <= '0'; ALTB <= '1'; END IF; END IF; END PROCESS; END ARCH ;

  15. 算数运算电路设计 • VHDL所处理的信号不外乎是逻辑信号和数值信号。在VHDL的算术运算中,及内定的数据类型为整数或浮点数,需要作运算的是数值信号,但是执行运算的电路,却要求使用标准逻辑类信号。 • 在执行加法或乘法运算,可能会有进位产生,需加于处理 Entity Adder Is Port( data1,data2: IN Unsigned(3 downto 0); sum: Out Std_logic_vector(3 downto 0)); End adder; Architecture arch of adder is Begin sum <= data1 + data2; End arch; 说明: 原来的VHDL中,逻辑信号和数值信号是不能互换。 新的VHDL标准加入Unsigned数据类型,可转换成逻辑信号。

  16. entity Adder is port ( 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 Adder ; --********************************************************* architecture ARCH of adder 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) <= (Cin AND A(0)) OR (Cin AND B(0)) OR (A(0) AND B(0)); C(1) <= (C(0) AND A(1)) OR (C(0) AND B(1)) OR (A(1) AND B(1)); C(2) <= (C(1) AND A(2)) OR (C(1) AND B(2)) OR (A(2) AND B(2)); C(3) <= (C(2) AND A(3)) OR (C(2) AND B(3)) OR (A(3) AND B(3)); BCDout <= Y(3) & Y(2) & Y(1) & Y(0) ; Cout <= C(3) ; end ARCH ;

  17. 只读存储器(ROM)设计 • 常用记忆芯片有两种:RAM(存储会变动的数据、参数等)及ROM(不变的数据或常数表)。 ROM 4位地址选择线 8位数据总线输出 使能

  18. ENTITY Rom4_8 is PORT( DATAOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CE : IN STD_LOGIC ); END Rom4_8; ARCHITECTURE a OF Rom4_8 IS BEGIN DATAOUT <= "00001001" WHEN ADDR = "0000" AND CE='0' ELSE "00011010" WHEN ADDR = "0001" AND CE='0' ELSE "00011011" WHEN ADDR = "0010" AND CE='0' ELSE "00101100" WHEN ADDR = "0011" AND CE='0' ELSE "11100000" WHEN ADDR = "0100" AND CE='0' ELSE "11110000" WHEN ADDR = "0101" AND CE='0' ELSE "00010000" WHEN ADDR = "1001" AND CE='0' ELSE "00010100" WHEN ADDR = "1010" AND CE='0' ELSE "00011000" WHEN ADDR = "1011" AND CE='0' ELSE "00100000" WHEN ADDR = "1100" AND CE='0' ELSE “00000000"; End a; • 设计ram或rom,如在max+plus平台上尽量多使用LPM

  19. 三态缓冲器的设计 • Entity CH47 is • Port( A : IN Std_logic; • OE : IN Std_logic; • B : Out Std_logic ); • End CH47; • Architecture one of CH47 is • Begin • Process(OE,A) • Begin • If OE=‘1’ then • B <= A; • ELSE • B <= ‘Z’; • End if; • End process; • End architecture one; • 在所定义的数据类型STD_LOGIC,其中有个“Z”,用来表示高阻抗(High impedance)。 A B OE

  20. 四位ALU(算术逻辑单元)电路设计 • ALU是一个拥有算术运算和逻辑运算能力的电路。通常如果有N条功能选择线,则ALU最多可设定2ⁿ种不同的运算功能。 • 算术运算单元的功能 ALU的算术运算主要是以加、减法为主,乘法和除法可利用“移位”配合“加法”的方法加以处理。

  21. 逻辑运算单元的功能 逻辑运算的种类很多,一般只处理And、Or、Xor、Not四种运算。其它的各种逻辑运算都可以由布尔代数化简,由上面四种运算完成。 C0 算术电路单元 A B 2×1 多工器 输出 逻辑电路单元 S0 S1 S2

  22. 算术运算单元 • 使用VHDL设计电路,一定面对两个问题 • Entity如何定义 管脚上的输出端口、输入端口的规格? • 采用何种结构描述法来描述电路的设计 根据目前手上拥有的数据,已经考虑维护及扩充时的弹性等各项因素进行选择。

  23. 如果有流程图或真值表等数据时,通常选用行为化描述法来写VHDL程序较为方便容易;如果有流程图或真值表等数据时,通常选用行为化描述法来写VHDL程序较为方便容易; • 如果有布尔方程式时,则选用数据流描述法来写VHDL程序最为快速且简洁。 • 当电路规模较大且大部分的模块电路已经设计过,则选用结构性描述法写VHDL程序较为容易省事。 算术运算单元的Entity定义 注:当对象有逻辑特性又有数值特性时,应定义为Unsigned较恰当。

  24. 算术单元的Architecture描述 由于是做运算处理,当然处理的对象一定是算术式或布尔方程式,因此使用数据流描述法应较为快速方便。 算术单元的设计 主要采用Case….When语句。

  25. 逻辑运算单元 • 算术运算单元的Entity定义 • 算术运算单元的Architecture描述 由于是逻辑运算,使用的是布尔代数或标准逻辑门,在VHDL内部得数据库中已经建立完成,所以直接采取数据流来完成

More Related