1、实验一:QUARTUS 软件使用及组合电路设计仿真实验目的:学习 QUARTUS 软件的使用,掌握软件工程的建立,VHDL源文件的设计和波形仿真等基本内容;实验内容:1. 四选一多路选择器的设计 首先利用Quartus完成4选1多路选择器的文本编辑输入(mux41a.vhd)和仿真测试等步骤,给出仿真波形。步骤:(1) 建立工作库文件夹和编辑设计文件;(2) 创建工程;(3) 编译前设置;(4) 全程编译;(5) 时序仿真;(6) 应用RTL电路图观测器(可选择)实验程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 IS PO
2、RT( S10:IN STD_LOGIC_VECTOR(1 DOWNTO 0); A,B,C,D:IN STD_LOGIC; Q:OUT STD_LOGIC );END ENTITY mux41;ARCHITECTURE bhv OF mux41 ISBEGINPROCESS(A,B,C,D,S10)BEGIN IF S10=00 THEN Q=A; ELSIF S10=01 THEN Q=B; ELSIF S10=10 THEN Q=C; ELSE Q LED7S 0 WHEN 0001 = LED7S 1 WHEN 0010 = LED7S 2 WHEN 0011 = LED7S 3 WH
3、EN 0100 = LED7S 4 WHEN 0101 = LED7S 5 WHEN 0110 = LED7S 6 WHEN 0111 = LED7S 7 WHEN 1000 = LED7S 8 WHEN 1001 = LED7S 9 WHEN 1010 = LED7S A WHEN 1011 = LED7S B WHEN 1100 = LED7S C WHEN 1101 = LED7S D WHEN 1110 = LED7S E WHEN 1111 = LED7S F WHEN OTHERS = NULL ; END CASE ; END PROCESS ; END ;波形仿真如图: 如图,
4、当输入端A依次输入0-15的四位二进制码时,输出端依次输出(0-9及A-F)的数码管所对应的七位二进制数,例如,当输入0000时,输出端输出1000000(即字符的ASCII码),显示在数码段上即0。实验二 计数器设计与显示实验目的:(1)熟悉利用QUARTUS II中的原理图输入法设计组合电路,掌握层次化设计的方法;(2)学习计数器设计、多层次设计方法和总线数据输入方式的仿真,并进行电路板下载演示验证。实验内容:1.完成计数器设计设计含有异步清零和计数使能的4位二进制加减可控计数器。要求:(1)写出设计框图、流程和方法; (2) 利用VHDL设计实现程序; (3)进行波形仿真验证;CLC,C
5、LK,EN开始EN,CLC,CLK开始 (4)完成设计实验报告:将实验原理、设计过程、编译仿真波形和分析结果写进实验报告。CLC=0Q1=Q1-1QQ1=Q1+1EN=1CLKEVENTCLK=1Q10)NOYQ=Q1YN其设计原理:由三个输入端CLC,CLK,EN控制计数器的输出和计数方式,其中当清零端CLC=1时,输出端输出为全零;当CLC=0时,正常计数。其中如果出现时钟上升沿,加减控制端EN=1时,为加法计数,反之则为减法计数。在程序设计时,在进程中引入信号Q1,在进程中完成标准逻辑位的加减,结束进程之后将其给输出。设计框图如上所示。实验程序如下:LIBRARY IEEE;USE IE
6、EE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4 IS PORT(CLK:IN STD_LOGIC; EN:IN STD_LOGIC; CLC:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY CNT4;ARCHITECTURE BHV OF CNT4 IS SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK) BEGIN IF CLC=1 THEN Q10); ELSIF (C
7、LKEVENT AND CLK=1) THEN IF EN=1 THEN Q1=Q1+1; ELSE Q1=Q1-1; END IF; END IF; END PROCESS; Q=Q1;END ARCHITECTURE BHV;波形仿真结果如图:如上图所示,当CLC=1时,清零;否则,正常计数。EN=0时,减法计数,EN=1时,加法计数。仿真验证实验设计成功。2.计数器显示译码设计与下载用原理图输入法的方式,以前面设计的七段译码器DecL7S和计数器为底层元件,完成“计数器显示译码”的顶层文件设计。设计原理:为了使数码管的变化能够用肉眼观察,将输入时钟(50MHz)先进行进行50M分频,输出
8、频率为1Hz的时钟。其中分频器采用M=50M计数器的进位输出端来实现,将分频后的时钟信号送入四位二进制加减可控计数器的时钟输入端。四位二进制加减可控计数器由实验1中提供,其输出作为七段译码器的输入端。50M分频器程序设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT5M IS PORT(CLK:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC );END ENTITY CNT5M;ARCHITECTURE BHV OF CNT5M IS SIGNAL
9、COUNT:STD_LOGIC_VECTOR(26 DOWNTO 0);BEGIN PROCESS BEGIN WAIT UNTIL CLKEVENT AND CLK=1; IF(COUNT49999999) THEN COUNT=COUNT+1; CLK_OUT=0; ELSE COUNT0); CLK_OUT=1; END IF; END PROCESS;END ARCHITECTURE BHV;修改后加减计数器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4 IS
10、 PORT(CLK:IN STD_LOGIC; UPDOWN:IN STD_LOGIC; RESET,ENABLE:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY CNT4;ARCHITECTURE BHV OF CNT4 IS SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK) BEGIN IF ENABLE=1 THEN IF RESET=1 THEN Q10); ELSIF (CLKEVENT AND CLK=1) THEN IF UPDOWN=1
11、THEN Q1=Q1+1; ELSE Q1=Q1-1; END IF; END IF; END IF; END PROCESS; Q=Q1;END ARCHITECTURE BHV;其原理图如下:其中为了便于观察,我们只仿真未加分频器时的的波形图如下:其中,ENABLE为使能端,其为1时,电路正常工作。RESET为复位端,当其为1时,输出为全零。UPDOWAN为加减控制端,其为0时,减法计数,为1时,加法计数。硬件测试:将编译好的的程序下载到实验板上,其引脚对应如原理图所示。引脚及开关对应关系如下:控制引脚enableresetupdown对应的开关SW0SW1SW2上电后,SW0为低电平,数
12、码管输出为0,SW0为高电平时,正常计数。将SW1置为高电平时,清零,数码管显示0;只为低电平时,数码管正常显示。SW2为低电平时,减法计数,为高电平时,加法计数。实验三:大作业设计循环彩灯控制器实验任务:设计一个循环彩灯控制器,该控制器可控制10个发光二极管循环点亮、间隔点亮或者闪烁等花型。要求至少设计三种以上花型,并用按键控制花型之间的转换。实验设计:本实验通过设计一个拥有11个状态的状态机,其11个暂态s0-s10循环链接,将其所代替的二进制码送入led灯,以实现彩灯“流水”的特性。对于每个暂态,都拥有4种二进制码,通过对输入的使能端EN12的判断,决定输出的码值,进而确定显示的彩灯的类
13、型。同时用数码管作为彩灯花型序号的显示装置,当EN12为00时,显示1;01时显示2;10时显示3,11时显示4。为了能搞看清彩灯的变化规律,须先经过50M分频器分频。程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LIUSHUI ISPORT( CLK:IN STD_LOGIC; EN1:IN STD_LOGIC; EN2:IN STD_LOGIC; CON:IN STD_LOGIC; Z:OUT STD_LOGIC_VECTOR(9 DOWNTO 0); LED7S
14、:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );END ENTITY LIUSHUI;ARCHITECTURE BHV OF LIUSHUI IS TYPE STATE_TYPE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9); SIGNAL CURRENT_STATE,NEXT_STATE:STATE_TYPE; SIGNAL EN12:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN EN12=EN1&EN2;TONGBU:PROCESSBEGIN WAIT UNTIL CLKEVENT AND CLK=1; CURRENT
15、_STATE=NEXT_STATE;END PROCESS;ZHUANYI:PROCESS(CURRENT_STATE)BEGIN NEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATENEXT_STATE=S0; END CASE;END PROCESS;SHUCHU:PROCESS(CURRENT_STATE,EN12)BEGIN IF CON=1 THEN Z0); CASE EN12(1 DOWNTO 0) IS WHEN 00=LED7SL
16、ED7SLED7SLED7S Z IF EN12=00 THEN Z=0000000001; ELSIF EN12=01 THEN Z=1000000001; ELSIF EN12=10 THEN Z=0000000001; ELSE Z IF EN12=00 THEN Z=0000000010; ELSIF EN12=01 THEN Z=0100000010; ELSIF EN12=10 THEN Z=0000000011; ELSE Z IF EN12=00 THEN Z=0000000100; ELSIF EN12=01 THEN Z=0010000100; ELSIF EN12=10
17、THEN Z=0000000111; ELSE Z IF EN12=00 THEN Z=0000001000; ELSIF EN12=01 THEN Z=0001001000; ELSIF EN12=10 THEN Z=0000001111; ELSE Z IF EN12=00 THEN Z=0000010000; ELSIF EN12=01 THEN Z=0000110000; ELSIF EN12=10 THEN Z=0000011111; ELSE Z IF EN12=00 THEN Z=0000100000; ELSIF EN12=01 THEN Z=0001001000; ELSIF
18、 EN12=10 THEN Z=0000111111; ELSE Z IF EN12=00 THEN Z=0001000000; ELSIF EN12=01 THEN Z=0010000100; ELSIF EN12=10 THEN Z=0001111111; ELSE Z IF EN12=00 THEN Z=0010000000; ELSIF EN12=01 THEN Z=0100000010; ELSIF EN12=10 THEN Z=0011111111; ELSE Z IF EN12=00 THEN Z=0100000000; ELSIF EN12=01 THEN Z=10000000
19、01; ELSIF EN12=10 THEN Z=0111111111; ELSE Z IF EN12=00 THEN Z=1000000000; ELSIF EN12=01 THEN Z=1000000001; ELSIF EN12=10 THEN Z=1111111111; ELSE Z=0000000000; END IF; END CASE; END IF;END PROCESS;END ARCHITECTURE BHV;其波形仿真结果如图:其中当CON为1时,正常显示,当其为0时,保持上一次最后花型。如图所示,当EN12为00时,LED7S为1111001(即1的二进制码),此时Z9
20、-Z0作为流水灯,依次点亮,视为花型1;当EN12为10时,LED7S为0100100(即2的二进制码),此时Z9-Z0作为流水灯,依次逐渐全部点亮,视为花型2;当EN12为01时,LED7S为0110000(即3的二进制码),此时Z9-Z0作为流水灯,依次逐渐由两头向中间挨个点亮,视为花型3;当EN12为01时,LED7S为0011001(即4的二进制码),此时Z9-Z0作为流水灯,全亮之后全灭之后再全亮,即闪烁,视为花型4。这样可视为完成四种花型的循环彩灯。其原理图如图:引脚及开关对应关系如下:控制引脚CONEN1EN2对应的开关SW0SW1SW2硬件测试:将编译好的的程序下载到实验板中,当SW1与SW2为00时,数码管显示1,Z9-Z0挨个依次点亮后又熄灭。当SW1与SW2为01时,数码管显示2,Z9-Z0挨个依次点亮最终全部点亮。当SW1与SW2为10时,数码管显示3,Z9-Z0依次逐渐由两头向中间挨个点亮。当SW1与SW2为11时,数码管显示4,Z9-Z0全亮之后全灭之后再全亮,完成闪烁功能。当SW0置为0时,彩灯停止变化。验证试验成功。10