实验四组合电路设计(二) 1.实验目的 掌握设计组合逻辑电路的方法 ● 过开发CPLD来实现组合逻辑电路的功能 2.示例 (1)3线一8线(74138)译码器的设计。 源程序: Library Use ieee.std_logic_1164.all: Entity decoder_3_to_8 is Port(ab.c.gl.gla.g2b:in std logic: y:out std_logic_vector(7 downto 0)): End; Architecture rtl of decoder_3_to_8 is Begin Signal indata:std_logic_vector(2 downto 0). Begin Indata<-c&b&a Process(indata.gl.g2a.g2b) Begin If(gl='1'and g2a='0'and g2b='0)then Case indata s When"000 y<="11111110 Whem001=>y<="11111101 When"010"=>v<="11111011" When011=y<"11110111 Whem"100=>y<="11101111 When"101>y<="11011I Whem"110->y<="101I1111 When"111=>y<="01111l11, When others=>y<="xxoxxxxxx": End case; Else Y<="11111111 End if. End process, End (2)监视交通信号灯工作状态的逻辑电路的VHDL描述。 取红、黄 的状态为输入状态,分别用R、Y、G表示,并规定灯亮时为1, 不亮时为0。取故障信号为输出变量,用F表示,并规定正常状态下为0,发生故障时为1
实验四 组合电路设计(二) 1.实验目的 ● 掌握设计组合逻辑电路的方法。 ● 通过开发 CPLD 来实现组合逻辑电路的功能。 2.示例 (1)3 线—8 线(74138)译码器的设计。 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity decoder_3_to_8 is Port(a,b,c,g1,g1a,g2b: in std_logic; y: out std_logic_vector(7 downto 0)); End; Architecture rtl of decoder_3_to_8 is Begin Signal indata: std_logic_vector(2 downto 0); Begin Indata<=c&b&a; Process(indata,g1,g2a,g2b) Begin If (g1=’1’ and g2a=’0’ and g2b=’0’) then Case indata is When”000”=>y<=”11111110”; When”001”=>y<=”11111101”; When”010”=>y<=”11111011”; When”011”=>y<=”11110111”; When”100”=>y<=”11101111”; When”101”=>y<=”11011111”; When”110”=>y<=”10111111”; When”111”=>y<=”01111111”; When others=>y<=”xxxxxxxx”; End case; Else Y<=”11111111”; End if; End process; End; (2) 监视交通信号灯工作状态的逻辑电路的 VHDL 描述。 取红、黄、绿三盏灯的状态为输入状态,分别用 R、Y、G 表示,并规定灯亮时为 1, 不亮时为 0。取故障信号为输出变量,用 F 表示,并规定正常状态下为 0,发生故障时为 1
状态表如表441所示。 交通信号灯工作态表4-4-1 RYG 000 0 011 0 0 0 0 1 1 0 111 源程序如下: Library icce Use ieee.std_logic_1164.all. Entity hld is Port(R.Y.G:in std logic: F:out std_logie) End; Architecture rtl of hld is Begin Process(R.Y.G) Variable comb:std logic_vector(2 downto 0) Begin Comb:=R&Y&G. Case comb is hem”000”=>F=*1 When"001"=>F<='0 Whem010=>f<='0 When"011"=>F<='1 when"100=>F<='0' When”101=>F<='1' When”110=>F=1' When"11I"=>F<='1' When others=>F<='1' End case: End process; End: 一位全加器的设计:加数a、b,低位进位ci,本位和,向高位进位co。 方法一:f=a⊕b⊕ci co=a bta c1tb c1 源程序: Library ieee;
状态表如表 4-4-1 所示。 源程序如下: Library ieee; Use ieee.std_logic_1164.all; Entity hld is Port(R,Y,G:in std_logic; F:out std_logic); End; Architecture rtl of hld is Begin Process(R,Y,G) Variable comb:std_logic_vector(2 downto 0); Begin Comb:=R&Y&G; Case comb is When”000”=>F<=’1’; When”001”=>F<=’0’; When”010”=>F<=’0’; When”011”=>F<=’1’; When”100”=>F<=’0’; When”101”=>F<=’1’; When”110”=>F<=’1’; When”111”=>F<=’1’; When others=>F<=’1’; End case; End process; End; (3) 一位全加器的设计:加数 a、b,低位进位 ci,本位和 f,向高位进位 co。 方法一:f=a⊕b⊕ci co=a·b+a·ci+b·ci 源程序: Library ieee;
Use icee.std_logic_1164.all: Entity full_adder is Port(A.B.Ci:in std_logic; F,Co:out std_logic). End: Architecture bhv of full adder is signal g.h.i.j:std_logic. Begin g<=A xor B: F<-g xor Ci. h=A and B <=A and C i<=B and Ci Co<=h oriorj: End: 方法二: ibrary ieee Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; entity full adder_l is port(A.B.Ci:in std_logic F,Co:out std_logic). end: architecture bhy of full adder 1 is begin process(A.B.Ci) Begin If(A=0'and B=0'and Ci=0)then F<c=0: C0<='0 elsif(A=0and B-0and Ci=1)then F<-1 Co<=0 elsIf(A=0'and B=1'and Ci=0)then Fc=1. Co<=0 lif(B-and F<=0 Co<=1 elsIf(A='1'and B=0 and Ci=0)then F=1
Use ieee.std_logic_1164.all; Entity full_adder is Port(A,B,Ci:in std_logic; F,Co:out std_logic); End; Architecture bhv of full_adder is signal g,h,i,j:std_logic; Begin g<=A xor B; F<=g xor Ci; h<=A and B; i<=A and Ci; j<=B and Ci; Co<=h or i or j; End; 方法二: Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; entity full_adder_1 is port(A,B,Ci:in std_logic; F,Co:out std_logic); end; architecture bhv of full_adder_1 is begin process(A,B,Ci) Begin If(A='0' and B='0' and Ci='0')then F<='0'; Co<='0'; elsif(A='0' and B='0' and Ci='1')then F<='1'; Co<='0'; elsIf(A='0' and B='1' and Ci='0')then F<='1'; Co<='0'; elsif(A='0' and B='1' and Ci='1')then F<='0'; Co<='1'; elsIf(A='1' and B='0' and Ci='0')then F<='1';
Cos=0 elsif(A=I'and B=0and Ci=1)then F<-0 Co<=1 elslf(A='l'and B='l'and Ci=0')then F<=0 Co<=I C0<=1'h end if end process nd 3.实验内容 (1)设计一个二个2位二进制数相乘电路。 a.要求:写出实验内容的真值表。 b.编写出实现该电路的VHDL程序。 c用MAX+plusII讲行仿直 d将编写好的程序下载到CPD芯片里,用发光二极管观察结果 (2)一位二进制全减器电路设计 .要求:输入为被减数、减数和来自低位的借位,输出为两数之差和向高位的借位。 b.按照实验内容写出真值表及逻辑表达式。 c.编写出实现该电路的VHDL程序。 d用MAX+plusI讲行仿直 .将编写好的程序下载到CPLD芯片里,观察结果 4.注意事项 (1)电路的编程要根据要求及真值表,要考虑输入所有可能出现的情况,尽量简洁。 (2)仿真信号要包括所有瑞子的各种情况。 (3)测试信号要包括所有端子的各种情况。 5.预习要求 (1)复习有关组合逻辑电路的设计方法,分析其逻辑功能,写出其真值表及逻辑表达 式。 (2)分析输入信号的所有情况,进行记录,便于实验进行验证。 (3)自己绘制激励波形,考虑输入端子的各种情况。 6.实验报告 根据以上的实验内容写出实验报告:包括程序设计、软件编译、仿真分析、硬件测试和 实验过程:设计程序、程序分析报告、仿真波形图及其分析报告
Co<='0'; elsif(A='1' and B='0' and Ci='1')then F<='0'; Co<='1'; elsIf(A='1' and B='1' and Ci='0')then F<='0'; Co<='1'; else F<='1'; Co<='1'; end if; end process; end; 3.实验内容 (1)设计一个二个 2 位二进制数相乘电路。 a. 要求:写出实验内容的真值表。 b. 编写出实现该电路的 VHDL 程序。 c. 用 MAX+plusII 进行仿真。 d. 将编写好的程序下载到 CPLD 芯片里,用发光二极管观察结果。 (2)一位二进制全减器电路设计 a. 要求:输入为被减数、减数和来自低位的借位,输出为两数之差和向高位的借位。 b. 按照实验内容写出真值表及逻辑表达式。 c. 编写出实现该电路的 VHDL 程序。 d. 用 MAX+plusII 进行仿真。 e. 将编写好的程序下载到 CPLD 芯片里,观察结果。 4.注意事项 (1)电路的编程要根据要求及真值表,要考虑输入所有可能出现的情况,尽量简洁。 (2)仿真信号要包括所有端子的各种情况。 (3)测试信号要包括所有端子的各种情况。 5.预习要求 (1)复习有关组合逻辑电路的设计方法,分析其逻辑功能,写出其真值表及逻辑表达 式。 (2)分析输入信号的所有情况,进行记录,便于实验进行验证。 (3)自己绘制激励波形,考虑输入端子的各种情况。 6.实验报告 根据以上的实验内容写出实验报告:包括程序设计、软件编译、仿真分析、硬件测试和 实验过程;设计程序、程序分析报告、仿真波形图及其分析报告