可编程逻辑器件及EDA技术实验报告
可编程逻辑器件及EDA技术实验报告一、组合逻辑电路设计 数字逻辑电路按照逻辑功能的特点分为两类,一类是组合逻辑电路,简称为组合电路;另一类是时序逻辑电路,简称为时序电路。组合电路的特点是电路任意时刻输出状态只取决该时刻的输入状态,而与该时刻钱的电路状态无关。1、逻辑门电路设计实验原理:逻辑门电路包括基本逻辑门电路和符合逻辑门电路。VHDL语言可以直接支持的逻辑运算符共有七种逻辑运算,它们是: NOT 逻辑非 AND 逻辑与 NAND 逻辑与非 OR 逻辑或 NOR 或非 XOR 异或 XNOR 异或非实验内容:例3-2的参考程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee. std_logic_unsigned.all;entity example3_2 is port(a,b,c,d:in std_logic; f:out std_logic_vector(3 downto 0);end example3_2;architecture behavioral of example3_2 isbeginf(0)<=(a and b)or(b and c)or(not b and not c);f(1)<=(a and b and c)or not(not a or not b or not c);f(2)<=(a xor b xor c)or(not(d)and(a or c);f(3)<=not (a and b)xor (c and d)or(a and b and d)xor(b and c and d);end behavioral;实验分析:用逻辑运算符是实现了相对较为复杂的逻辑运算。参考程序中使用括号来强制控制逻辑运算的优先级,对于用VHDL设计,这种写法是必修的。用这种方法可以简单、快捷地完成逻辑电路设计。电路结构图:实验波形仿真如下图:2、常用编码器设计编码是指用文字、符号和数码等来表示某种信息的过程。在数字系统中,由于采用二进制运算来处理数据,因此通常是将信息编成若干位二进制代码,而在逻辑电路中,信号都是以高、低电平的形式给出的。实现编码的数字电路称作编码器(encoder),编码器的逻辑功能就是把输入的每一个高低电平信号编成一组对应的二进制代码。实验原理:根据8线-3线优先编码器的真值表可得,优先编码器的编码输入、编码输出均为低电平有效,且有使能输入和使能输出功能。实验内容:例3.4试用VHDL设计一个8线-3线优先编码器,编码器输出为反码输出。它的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity example3_4 is port(sin:in std_logic; i:in std_logic_vector(7 downto 0); a:out std_logic_vector(2 downto 0); e,s:out std_logic);end example3_4;architecture behavioral of example3_4 isbegin process(sin,i) begin if sin='1' then a<="111"e<='1's<='1' else if i(7)='0' then a<="000"e<='0's<='1' elsif i(6)<='0' then a<="001"e<='0's<='1' elsif i(5)<='0' then a<="010"e<='0's<='1' elsif i(4)<='0' then a<="011"e<='0's<='1' elsif i(3)<='0' then a<="100"e<='0's<='1' elsif i(2)<='0' then a<="101"e<='0's<='1' elsif i(1)<='0' then a<="110"e<='0's<='1' elsif i(0)<='0' then a<="111"e<='0's<='1' else a<="111"e<='1's<='0' end if; end if; end process;end behavioral;实验分析:在8线-3线优先编码器的设计中,使用了IF-ELSIF-ELSE-END IF语句,该语句具有优先级关系。电路结构图:实验波形仿真图:3、常用译码器设计 译码为编码的逆过程。实现译码的逻辑电路称为译码器(decoder)。译码器是少输入、多输出的逻辑电路,它的输入、输出间存在一对一的映射关系,其逻辑功能是将每组输入的代码译成对应的输出高或低有效的一路电平信号。实验原理:半导体数码管有共阳极和共阴极两种类型。共阳极数码管的7个发光二极管的阴极接在一起,通常接地,而七个阳极则是独立的。共阳极数码管与共阴极数码管相反,七个发光二极管的阳极接在一起,通常经过限流电阻后接+5V电源,而阴极是独立的。实验内容:例3.6试用VHDL设计一个半导体数码管的七段显示译码器。程序参考如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity example3_6 is PORT ( hex : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; segment : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ; ARCHITECTURE behavioral OF example3_6 IS BEGIN PROCESS( hex ) BEGIN CASE hex(3 DOWNTO 0) IS WHEN "0000" => segment <= "0111111" ; - X"3F"'0 WHEN "0001" => segment <= "0000110" ; - X"06"'1 WHEN "0010" => segment <= "1011011" ; - X"5B"'2 WHEN "0011" => segment <= "1001111" ; - X"4F"'3 WHEN "0100" => segment <= "1100110" ; - X"66"'4 WHEN "0101" => segment <= "1101101" ; - X"6D"'5 WHEN "0110" => segment <= "1111101" ; - X"7D"'6 WHEN "0111" => segment <= "0000111" ; - X"07"'7 WHEN "1000" => segment <= "1111111" ; - X"7F"'8 WHEN "1001" => segment <= "1101111" ; - X"6F"'9 WHEN "1010" => segment <= "1110111" ; - X"77"'10 WHEN "1011" => segment <= "1111100" ; - X"7C"'11 WHEN "1100" => segment <= "0111001" ; - X"39"'12 WHEN "1101" => segment <= "1011110" ; - X"5E"'13 WHEN "1110" => segment <= "1111001" ; - X"79"'14 WHEN "1111" => segment <= "1110001" ; - X"71"'15 WHEN OTHERS => NULL ; END CASE ; END PROCESS ; END ;实验分析:当共阴极数码管的某一阳极接高电平时,相应的二极管发光,若要显示某字形,则使相应几段的二极管发光即可,所以共阴极数码管需要有输出高电平有效的译码器去驱动,而共阴极数码管则需要输出低电平有效的译码器去驱动。上面程序是一个能驱动共阳极数码管的7段译码器的VHDL程序。实验波形仿真如下:4、数据选择器设计 数据选择器(multiplexer)是在地址选择信号的控制下,从多路输入数据中选择一路作为输出的逻辑电路,叫做多路开关,简称MUX。实验原理:在可编程逻辑器件的设计中经常用数据选择器来实现课编程逻辑器件内部数据总线的连接。实验内容:例3.7试用VHDL设计4选1数据选择器。参考程序:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity example3_7 is Port(d:in std_logic_vector(3 downto 0); a:in std_logic_vector(1 downto 0); e:in std_logic; f:out std_logic);end example3_7;architecture behavioral of example3_7 isbegin process(e,a,d) begin if e='0'then case a is when "00" =>f<=d(0); when "01"=>f<=d(1); when "10"=>f<=d(2); when "11"=>f<=d(3); end case; end if;end process;end behavioral;实验分析:一个4选1数据选择器,D3D0为4个数据输入,F为数据输出,A1、A0是地址选择输入。当A1、A0为不同代码时,D3D0中不同输入通道数据送至输出端F。E为使能端,当E=0时,数据选择器正常工作,否则禁止工作。实验波形仿真: