1、实验一 简单组合逻辑设计一、实验前准备本实验例子使用独立扩展下载板 EP1K10_30_50_100QC208(芯片为 EP1K100QC208)。EDAPRO/240H 实验仪主板的 VCCINT 跳线器右跳设定为 3.3V; EDAPRO/240H 实验仪主板的 VCCIO 跳线器组中“VCCIO3.3V ”应短接,其余 VCCIO 均断开;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCINT 跳线器组设定为 2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCIO 跳线器组设定为 3.3V。请参考前面第二章中关于“电源模块”的说明。二、
2、实验目的1、熟悉 Max+Plus II 下简单的 VHDL 文本方式设计。2、学习使用 JTAG 接口下载逻辑电路到 CPLD 并能调试到正常工作。3、熟悉数字电路集成设计的过程。三、实验原理译码器是把输入的数码解出其对应的数码,例如:BCD 至 7 段显示器执行的动作就是把一个四位的 BCD 码转换成 7 个码的输出,以便在 7 段显示器上显示这个十进制数。译码器有 N 个二进制选择线,那么最多可译码转换成 2N个数据。当一个译码器有 N 条输入线及 M 条输出线时,则称为 NM 的译码器。38 译码器是依此而来。38 译码器真值表如下表所示:A2A1A0 Y7Y6Y5Y4Y3Y2Y1Y0
3、000 00000001001 00000010010 00000100011 00001000100 00010000101 00100000110 01000000111 10000000四、实验内容把译码器的输入接到拨码开关,输出端接 8 个 LED 灯,通过拨码开关改变输入的逻辑电平变化来观察 LED 输出情况,验证 38 译码器的工作状态。五、实验要求学习使用 Max+Plus II 的 使用 VHDL 语言组成简单的数字逻辑电路。六、设计框图及原理图 时钟响应读取 I/O 口数据判断输出数值输出首先判断使能端口 EN 状态,当其满足高电平时,判断三个输入端口 A2、A1、A0 的状
4、态来决定输出,如使能端口为低电平则固定输出不受三个逻辑输入 A2、A1 、A0 的影响,使能有效时按照三个输入状态来决定八个输出的状态。七、实验电路连线与使用操作A0、A1、A2:为独立扩展下载板上第 53、47、46 脚,内部已锁定,无需连线。Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7:为独立扩展下载板上的第 12、13、14、15、17、18、19、24 脚,内部已锁定,并已连接至“红色信号指示灯 L1-8”的“L1L8” 。EN:为使能输入信号脚,定义在独立扩展下载板上第 68 脚,应接“多功能复用按键 F1-F12”信号接线组“F1_12(T)”的 F12F9 中任意一个引线插孔,
5、即高电平有效。使用操作:使用拨码开关 SW6、SW7、SW8 来实现三个数字状态的开关量输入 A2、A1 、A0,通过“红色信号指示灯 L1-8”的“L1L8 ”8 个 LED 指示灯来观察 Y0Y7 的译码输出变化。使能输入端口高电平有效。八、波形仿真分析输入信号:EN:使能信号高电平下工作,通过多功能复位按键 F9F12 中任意一键来控制。A2、A1、A0:三个数字状态输入端口,决定八个状态输出情况,由 8 位数字开关组 SW6、SW7、SW8 分别对应A2、A1、A0 来实现对 Y0 至 Y7 的译码输出。输出信号:Y0Y7:8 个状态输出,输出点亮红色指示灯组 L1L8。波形结果分析:
6、当 A2、A1、A0 对应于:“100”时,Y(八位)输出“00010000” ,当输入信号跳变为“000”时 Y(八位)输出“00000001” 。满足设计要求。九、VHDL 语言源程序LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY demo1 ISPORT (A : IN STD_LOGIC_VECTOR( 2 DOWNTO 0) ;EN : IN STD_LOGIC ;Y : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0) ;END demo1;ARCHITECTURE DEC_BEHAVE OF demo1 ISS
7、IGNAL SEL : STD_LOGIC_VECTOR( 3 DOWNTO 0) ; BEGINSEL(0) process(di) type data_out is array(0 to 6) of std_logic; variable outp: data_out;begincase di is when “0000“ = outp := “1111110“;when “0001“ = outp := “0110000“;when “0010“ = outp := “1101101“;when “0011“ = outp := “1111001“;when “0100“ = outp
8、:= “0110011“;when “0101“ = outp := “1011011“;when “0110“ = outp := “1011111“;when “0111“ = outp := “1110000“;when “1000“ = outp := “1111111“;when “1001“ = outp := “1111011“;when “1010“ = outp := “1110111“;when “1011“ = outp := “0011111“;when “1100“ = outp := “1001110“;when “1101“ = outp := “0111101“
9、;when “1110“ = outp := “1001111“;when “1111“ = outp := “1000111“;when others = null;end case;a a,b,c,d,e,f,g;H“0“ = 1,1,1,1,1,1,0; H“1“ = 0,1,1,0,0,0,0;H“2“ = 1,1,0,1,1,0,1;H“3“ = 1,1,1,1,0,0,1;H“4“ = 0,1,1,0,0,1,1;H“5“ = 1,0,1,1,0,1,1;H“6“ = 1,0,1,1,1,1,1;H“7“ = 1,1,1,0,0,0,0;H“8“ = 1,1,1,1,1,1,1;H
10、“9“ = 1,1,1,1,0,1,1;H“A“ = 1,1,1,0,1,1,1;H“B“ = 0,0,1,1,1,1,1;H“C“ = 1,0,0,1,1,1,0;H“D“ = 0,1,1,1,1,0,1;H“E“ = 1,0,0,1,1,1,1;H“F“ = 1,0,0,0,1,1,1;END TABLE;END;实验三 计数器电路设计一、实验前准备本实验例子使用独立扩展下载板 EP1K10_30_50_100QC208(芯片为 EP1K100QC208)。EDAPRO/240H 实验仪主板的 VCCINT 跳线器右跳设定为 3.3V; EDAPRO/240H 实验仪主板的 VCCIO 跳
11、线器组中“VCCIO3.3V ”应短接,其余 VCCIO 均断开;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCINT 跳线器组设定为 2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCIO 跳线器组设定为 3.3V。请参考前面第二章中关于“电源模块”的说明。二、实验目的1、了解各种进制计数器设计方法2、了解同步计数器、异步计数器的设计方法3、通过任意编码计数器体会语言编程设计电路的便利三、实验原理时序电路应用中计数器的使用十分普遍,如分频电路、状态机都能看到它的踪迹。计数器有加法计数器、可逆计数器、减法计数器、同步计数器等。利用 MAXP
12、LUSII 已建的库 74161、74390 分别实现 8 位二进制同步计数器和 8位二十进制异步计数器。输出显示模块用 VHDL 实现。四、实验内容1、用 74161 构成 8 位二进制同步计数器(程序为 T3-1) ;2、用 74390 构成 8 位二十进制异步计数器(程序为 T3-2) ;3、用 VHDL 语言及原理图输入方式实现如下编码 7 进制计数器(程序为 T3-3):0,2,5,3,4,6,1五、实验要求学习使用 Altera 内建库所封装的器件与自设计功能相结合的方式设计电路,学习计数器电路的设计。六、设计框图首先要熟悉传统数字电路中同步、异步计数器的工作与设计。在 MAX+P
13、LUS II 中使用内建的 74XX 库选择逻辑器件构成计数器电路,并且结合使用 VHDL 语言设计转换模块与接口模块,最后将 74XX 模块与自设计模块结合起来形成完整的计数器电路。并借用前面设计的数码管显示模块显示计数结果。 74161 构成 8 位二进制同步计数器(程序为 T3-1)七、原 理图 8 位二进制同步计数器原理图(程序 为 T3-1)模块说明:采用了两个 74161 计数器,一个用来作为低位计数,另一个作为高位计数器。数据总线开关(4 位二路开关)模块用于将计数器输出的数据分路切换为 LED 数码管显示所需要的数据格式。字形码转换模块调用前面实验所设计的模块。 8 位二十进制
14、异步计数器原理图(程序为 T3-2) 7 进制计数器原理图(程序为 T3-3)八、实验电路连线触发信号数据总线开关 LED 数码管显示计数器 2时钟源 1计数器 1进位时钟源 2低 4 位计数器高 4 位计数器字形码转换4 位二路开关SEL0与使用操作A:为独立扩展下载板上第 86 脚,应接“数码管段位引线”接线组“KPL_AH ”的 AB:为独立扩展下载板上第 87 脚,应接“数码管段位引线”接线组“KPL_AH”的 BC:为独立扩展下载板上第 88 脚,应接“数码管段位引线”接线组“KPL_AH”的 CD:为独立扩展下载板上第 89 脚,应接“数码管段位引线”接线组“KPL_AH ”的 D
15、E:为独立扩展下载板上第 90 脚,应接“数码管段位引线”接线组“KPL_AH ”的 EF:为独立扩展下载板上第 92 脚,应接“数码管段位引线”接线组“KPL_AH ”的 FG:为独立扩展下载板上第 93 脚,应接“数码管段位引线”接线组“KPL_AH ”的 GSEL0:为独立扩展下载板上第 69 脚,为数码管的位选扫描信号,接信号接线组“DS1-8A(T)”的 SS0 引线插孔。SS1、SS2 接地(即在电源引线插孔组 GND 孔处) 。RESET:为独立扩展下载板上第 68 脚,应接“多功能复用按键 F1-F12”信号接线组“F1_12(T) ”的 F9F12 的任意一个插孔CKCNT:
16、为独立扩展下载板上第 70 脚,应接时钟信号源接线组“CLOCK(T)”的“FRQ(1821) ”引线插孔CKDSP:为独立扩展下载板上第 79 脚即 GCLK1,应接时钟信号接线组“CLOCK(T)”的“FRQ(11) ”引线插孔备注:程序 T3-1、T3-2 、T3-3 的插线均相同,其中 T3-3 中 CLK 与 T3-1 的 CKCNT 定义引脚相同。使用操作:8 位二进制同步计数器使用操作(程序为 T3-1):程序下载以后,在“动态键盘显示模块”的二个数码管 DS8.7A 上显示计数值,范围为 00FFH 的二位十六进制数,并循环递增计数。 8 位二十进制异步计数器使用操作(程序为
17、T3-2)程序下载以后,在“动态键盘显示模块”的二个数码管 DS8.7A 上显示计数值,范围为 0099 的二位十进制数,并循环递增计数。 7 进制计数器使用操作(程序为 T3-3)程序下载以后,在“动态键盘显示模块”的二个数码管 DS8.7A 上显示计数值,每个数码管按顺序循环显示七进制数:0,2,5,3,4,6,1。按动复位键几次后,可看到二个数码管显示的数不一样。九、波形仿真分析8 位二进制同步计数器仿真结果(程序为 T3-1):输入信号:RESET:清零信号,低电平下重新开始计数。CKDSP:动态显示数码管扫描频率设定。CKCNT:计数时钟信号。a b c中间信号量:DA70:用于显示
18、计数模块输出的中间计数结果。输出信号:AG:数码管 7 个段位,用于显示计数结果。波形结果分析:如图所示,当计数器 DA70输出为“16”时,坐标轴“b”处对应数码管的段码值为“0000110” ,即共阴数码管显示对应的值为 1,且在坐标轴“a”与坐标轴“c”时间段之间,数码管位选译码输入信号 SEL0 有重复“1” “0”信号出现,表明这个时间段选中二个数码管,并显示为“16” 。其他状态下计数时钟产生的显示结果值类同。结论:由上述分析所得结果,完全达到实验所需的要求。 8 位二十进制异步计数器仿真结果(程序为 T3-2)输入信号:RESET:清零信号,低电平下重新开始计数。CKDSP:动态
19、显示数码管扫描频率设定。CKCNT:计数时钟信号。中间信号量:DA70:用于显示计数模块输出的中间计数结果。输出信号:AG:数码管 7 个段位,用于显示计数结果。波形结果分析:如图所示,当计数器 DA70输出为“91”时,坐标轴“b”处对应数码管的段码值为“1101111” ,即共阴数码管显示对应的值为 9,且在坐标轴“a”与坐标轴“c”时间段之间,数码管位选译码输入信号 SEL0 有重复“1” “0”信号出现,表明这个时间段选中二个数码管,并显示为“91” 。其他状态下计数时钟产生的显示结果值类同。结论:由上述分析所得结果,完全达到实验所需的要求。 7 进制计数器仿真结果(程序为 T3-3)
20、a b ca1 b1 a2 b2SEL0输入信号:RESET:清零信号,低电平下重新开始计数。CKDSP:动态显示数码管扫描频率设定。CLK:计数时钟信号。中间信号量:D_IN20:用于显示计数模块输出的中间计数结果。输出信号:AG:数码管 7 个段位,用于显示计数结果。波形结果分析:如图所示,当中间数据显示切换模块的 D_IN20输出为“5” “0”和“3” “2”时,即坐标轴“a1” “b1”、 “a2”“b2”与之对应所构成的二位数为对应数码管按 SEL0 时序状态显示为“50”和“32” 。在其他 SEL0 时序状态下所对应产生的 7 进制数其显示结果值分析类同。结论:由上述分析所得结
21、果,完全达到实验所需的要求。十、VHDL 语言源程序 8 位二进制同步计数器 VHDL 语言源程序(程序为 T3-1)library IEEE;use IEEE.std_logic_1164.all;entity XSH8_4 isport (D_IN: in STD_LOGIC_VECTOR (7 downto 0);SEL: in STD_LOGIC;D_OUT: out STD_LOGIC_VECTOR (3 downto 0);end XSH8_4;architecture XSH8_4_arch of XSH8_4 isalias dlow : std_logic_vector(3
22、downto 0) is d_in(3 downto 0);alias dhigh : std_logic_vector(3 downto 0) is d_in(7 downto 4); begin- process(sel,D_IN)begincase sel iswhen 1 = d_out d_out null;end case;end process;end XSH8_4_arch;library IEEE;use IEEE.std_logic_1164.all;entity xdeled isport (d_in: in STD_LOGIC_VECTOR (3 downto 0);a
23、: out STD_LOGIC;b: out STD_LOGIC;c: out STD_LOGIC;d: out STD_LOGIC;e: out STD_LOGIC;f: out STD_LOGIC;g: out STD_LOGIC);end xdeled;architecture xdeled of xdeled isbegin - process(d_in)type data_out is array(0 to 6) of std_logic;variable outp: data_out;begincase d_in iswhen “0000“ = outp := “1111110“;
24、when “0001“ = outp := “0110000“;when “0010“ = outp := “1101101“;when “0011“ = outp := “1111001“;when “0100“ = outp := “0110011“;when “0101“ = outp := “1011011“;when “0110“ = outp := “1011111“;when “0111“ = outp := “1110000“;when “1000“ = outp := “1111111“;when “1001“ = outp := “1111011“;when “1010“
25、= outp := “1110111“;when “1011“ = outp := “0011111“;when “1100“ = outp := “1001110“;when “1101“ = outp := “0111101“;when “1110“ = outp := “1001111“;when “1111“ = outp := “1000111“;when others = null;end case;a process(sel,D_IN)begincase sel iswhen 1 = d_out d_out null;end case;end process;end XSH8_4
26、_arch;library IEEE;use IEEE.std_logic_1164.all;entity xdeled isport (d_in: in STD_LOGIC_VECTOR (3 downto 0);a: out STD_LOGIC;b: out STD_LOGIC;c: out STD_LOGIC;d: out STD_LOGIC;e: out STD_LOGIC;f: out STD_LOGIC;g: out STD_LOGIC);end xdeled;architecture xdeled of xdeled isbegin - process(d_in)type dat
27、a_out is array(0 to 6) of std_logic;variable outp: data_out;begincase d_in iswhen “0000“ = outp := “1111110“;when “0001“ = outp := “0110000“;when “0010“ = outp := “1101101“;when “0011“ = outp := “1111001“;when “0100“ = outp := “0110011“;when “0101“ = outp := “1011011“;when “0110“ = outp := “1011111“
28、;when “0111“ = outp := “1110000“;when “1000“ = outp := “1111111“;when “1001“ = outp := “1111011“;when “1010“ = outp := “1110111“;when “1011“ = outp := “0011111“;when “1100“ = outp := “1001110“;when “1101“ = outp := “0111101“;when “1110“ = outp := “1001111“;when “1111“ = outp := “1000111“;when others
29、 = null;end case;a process(reset,current_state) beginif reset=0 thend next_statenext_state next_statenext_state next_statenext_statenext_stateprocess(reset,a)beginif reset=0 then over d d d d d d d null;end case;end if;end process; end xhb1_arch;library IEEE;use IEEE.std_logic_1164.all;entity xs_hs_
30、b isport (dh: in STD_LOGIC_VECTOR (2 downto 0);ds: in STD_LOGIC_VECTOR (2 downto 0);sel: in STD_LOGIC;do: out STD_LOGIC_VECTOR (2 downto 0);end xs_hs_b;architecture xs_hs_b_arch of xs_hs_b isbegin- process(sel,dh,ds)begincase sel iswhen 1 = do do null;end case;end process;end xs_hs_b_arch;library IE
31、EE;use IEEE.std_logic_1164.all;entity xdeled isport (d_in: in STD_LOGIC_VECTOR (3 downto 0);a: out STD_LOGIC;b: out STD_LOGIC;c: out STD_LOGIC;d: out STD_LOGIC;e: out STD_LOGIC;f: out STD_LOGIC;g: out STD_LOGIC);end xdeled;architecture xdeled of xdeled isbegin - process(d_in)type data_out is array(0
32、 to 6) of std_logic;variable outp: data_out;begincase d_in iswhen “0000“ = outp := “1111110“;when “0001“ = outp := “0110000“;when “0010“ = outp := “1101101“;when “0011“ = outp := “1111001“;when “0100“ = outp := “0110011“;when “0101“ = outp := “1011011“;when “0110“ = outp := “1011111“;when “0111“ = o
33、utp := “1110000“;when “1000“ = outp := “1111111“;when “1001“ = outp := “1111011“;when “1010“ = outp := “1110111“;when “1011“ = outp := “0011111“;when “1100“ = outp := “1001110“;when “1101“ = outp := “0111101“;when “1110“ = outp := “1001111“;when “1111“ = outp := “1000111“;when others = null;end case
34、;a d_outd_outd_outd_outd_outprocess(clk,reset,sel1,hour,min,sec)beginif reset=0 thenseld_out(3)d_outd_out(3)d_outd_out(3)d_outnull;end case;end if;end process;end xsettime_arch;library IEEE;use IEEE.std_logic_1164.all;entity xdeled isport (d_in: in STD_LOGIC_VECTOR (3 downto 0);a: out STD_LOGIC;b: o
35、ut STD_LOGIC;c: out STD_LOGIC;d: out STD_LOGIC;e: out STD_LOGIC;f: out STD_LOGIC;g: out STD_LOGIC);end xdeled;architecture xdeled of xdeled isbegin - process(d_in)type data_out is array(0 to 6) of std_logic;variable outp: data_out;begincase d_in iswhen “0000“ = outp := “1111110“;when “0001“ = outp :
36、= “0110000“;when “0010“ = outp := “1101101“;when “0011“ = outp := “1111001“;when “0100“ = outp := “0110011“;when “0101“ = outp := “1011011“;when “0110“ = outp := “1011111“;when “0111“ = outp := “1110000“;when “1000“ = outp := “1111111“;when “1001“ = outp := “1111011“;when “1010“ = outp := “1110111“;
37、when “1011“ = outp := “0011111“;when “1100“ = outp := “1001110“;when “1101“ = outp := “0111101“;when “1110“ = outp := “1001111“;when “1111“ = outp := “1000111“;when others = null;end case;a = outp(0);b = outp(1);c = outp(2);d = outp(3);e = outp(4);f = outp(5);g = outp(6);end process;end xdeled;实验五 键
38、盘扫描设计一、实验前准备本实验例子使用独立扩展下载板 EP1K10_30_50_100QC208(芯片为 EP1K100QC208)。EDAPRO/240H 实验仪主板的 VCCINT 跳线器右跳设定为 3.3V; EDAPRO/240H 实验仪主板的 VCCIO 跳线器组中“VCCIO3.3V ”应短接,其余 VCCIO 均断开;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCINT 跳线器组设定为 2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的 VCCIO 跳线器组设定为 3.3V。请参考前面第二章中关于“电源模块”的说明。二、实验目的熟悉
39、2 行 8 列键盘动态扫描的工作原理。三、实验原理用时钟信号作为键盘扫描的同步信号,通过信号激励行输出、按键信号列输入的键扫方式获得按键状态,同时在LED 发光管上显示其结果。四、实验内容利用 CPLD 器件产生扫描时序,当有键被按下时,即可读取键值,根据不同的按键产生不同的键码,并在 LED指示灯上对应显示相应结果。五、实验要求学习使用原理图方式实现逻辑器件设计键盘扫描电路。六、设计原理框图直接使用逻辑门来实现按键输入响应功能。七、实验电路连线与使用操作LED0LED7:内部已锁定,无需连线。LED9:为独立扩展下载板上第 85 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”
40、的 L9LED10:为独立扩展下载板上第 86 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L10LED11:为独立扩展下载板上第 87 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L11LED12:为独立扩展下载板上第 88 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L12LED13:为独立扩展下载板上第 89 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L13LED14:为独立扩展下载板上第 90 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L14LED15:为独立扩展下载板上第
41、 92 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L15LED16:为独立扩展下载板上第 93 脚,应接“彩色信号指示灯 L9-26”的“L9_L26(T)”的 L16RL0:为独立扩展下载板上第 69 脚,应接信号接线组“KB_RL0_7(T)”的 RL0 引线插孔RL 1:为独立扩展下载板上第 70 脚,应接信号接线组“KB_RL0_7(T)”的 RL1 引线插孔RL 2:为独立扩展下载板上第 71 脚,应接信号接线组“KB_RL0_7(T)”的 RL2 引线插孔RL 3:为独立扩展下载板上第 73 脚,应接信号接线组“KB_RL0_7(T)”的 RL3 引线插孔RL 4:为独立扩展下载板上第 74 脚,应接信号接线组“KB_RL0_7(T)”的 RL4 引线插孔按键输入 输出响应