目 录实验一 数据选择器设计 2实验二 触发器的设计 4实验三 计数器的设计 6实验四 数控分频器的设计 9实验五 数字秒表的设计 11实验六 序列检测器设计 12实验七 比较器和D/A器件实现A/D转换功能的电路设计 14实验八 正弦信号发生器的设计 16实验九 电子抢答器的设计 18实验一 数据选择器设计一、实验目的熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试二、实验设备GW48系列SOPC/EDA实验开发系统实验箱一台 计算机一台三、实验内容1、首先利用QuartusⅡ完成2选1多路选择器(例1-1)的文本编辑输入(mux21a.vhd)和仿真测试等步骤,最后在实验系统上进行硬件测试,验证本项设计的功能例1-1】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = '0' THEN y <= a ; ELSE y <= b ;END IF; END PROCESS;END ARCHITECTURE one ; 2、将2选1多路选择器看成是一个元件mux21a,利用元件例化语句描述图1-1,并将此文件放在同一目录中。
以下是部分参考程序: COMPONENT MUX21A PORT ( a,b,s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT ; u1 : MUX21A PORT MAP(a=>a2,b=>a3,s=>s0,y=>tmp); u2 : MUX21A PORT MAP(a=>a1,b=>tmp,s=>s1,y=>outy); END ARCHITECTURE BHV ;图1-1 双2选1多路选择器按照本章给出的步骤对上例分别进行编译、综合、仿真并对其仿真波形做出分析说明3、引脚锁定以和硬件下载测试若选择目标器件是EP1C3,建议选实验电路模式5(附录图7),用键1(PIO0,引脚号为1)控制s0;用键2(PIO1,引脚号为2)控制s1;a3、a2和a1分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy仍接扬声器spker(引脚号为129)通过短路帽选择clock0接256Hz信号,clock5接1024Hz,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)四、实验报告1、实验目的2、实验设备3、实验内容:程序、编译图、仿真波形图、RTL电路、引脚锁定图、编程下载图、实验电路模式图在必要的地方需进行分析说明4、实验体会实验二 触发器的设计一、实验目的熟悉QuartusⅡ的VHDL文本设计过程,学习简单时序电路的设计、仿真和测试二、实验设备GW48系列SOPC/EDA实验开发系统实验箱一台 计算机一台三、实验内容1、根据QuartusII的设计开发流程,设计触发器(例2-1),给出程序设计、软件编译、仿真分析、硬件测试和详细实验过程例2-1】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; --类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D ; END IF; END PROCESS ;Q <= Q1 ; --将内部的暂存数据向端口输出(双横线--是注释符号) END bhv;2、设计锁存器(例2-2),同样给出程序设计、软件编译、仿真分析、硬件测试和详细实验过程。
例2-2】PROCESS (CLK,D) BEGIN IF CLK = '1' --电平触发型寄存器 THEN Q <= D ; END IF; END PROCESS ;四、实验报告1、实验目的2、实验设备3、实验内容:程序、编译图、仿真波形图、RTL电路、引脚锁定图、编程下载图、实验电路模式图在必要的地方需进行分析说明如分析比较实验内容1和2的仿真和实测结果,说明这两种电路的异同点4、实验体会实验三 计数器的设计一、实验目的学习7段数码显示译码器设计;学习VHDL的CASE语句应用和多层次设计方法二、实验设备GW48系列SOPC/EDA实验开发系统实验箱一台 计算机一台三、实验内容7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现例3-1作为7段译码器,输出信号LED7S的7位分别接如图2-2数码管的7个段,高位在左,低位在右。
例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,例3-1中的LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)应改为…(7 DOWNTO 0) 1、说明例3-1中各语句的含义,以和该例的整体功能在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图3-1所示图3-1 7段译码器仿真波形【例3-1】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DECL7S IS PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);图3-2共阴数码管及其电路 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ; ARCHITECTURE one OF DECL7S IS BEGIN PROCESS( A ) BEGIN CASE A IS WHEN "0000" => LED7S <= "0111111" ; WHEN "0001" => LED7S <= "0000110" ; WHEN "0010" => LED7S <= "1011011" ; WHEN "0011" => LED7S <= "1001111" ; WHEN "0100" => LED7S <= "1100110" ; WHEN "0101" => LED7S <= "1101101" ; WHEN "0110" => LED7S <= "1111101" ; WHEN "0111" => LED7S <= "0000111" ; WHEN "1000" => LED7S <= "1111111" ; WHEN "1001" => LED7S <= "1101111" ; WHEN "1010" => LED7S <= "1110111" ; WHEN "1011" => LED7S <= "1111100" ; WHEN "1100" => LED7S <= "0111001" ; WHEN "1101" => LED7S <= "1011110" ; WHEN "1110" => LED7S <= "1111001" ; WHEN "1111" => LED7S <= "1110001" ; WHEN OTHERS => NULL ; END CASE ; END PROCESS ; END ;2、引脚锁定和硬件测试。
建议选GW48系统的实验电路模式6(参考附录图8),用数码8显示译码输出(PIO46-PIO40),键8、键7、键6和键5四位控制输入,硬件验证译码器的工作性能3、用教材第3章介绍的例化语句,按图3-3的方式连接成顶层设计电路(用VHDL表述),图中的CNT4B是一个4位二进制加法计数器,可以由例3-2修改获得;模块DECL7S即为例3-1实体元件,重复以上实验过程注意图3-3中的tmp是4位总线,led是7位总线对于引脚锁定和实验,建议选电路模式6,用数码8显示译码输出,用键3作为时钟输入(每按2次键为1个时钟脉冲),或直接接时钟信号clock0例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10;ARCHITECTURE behav OF CNT10 ISBEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF EN = '1' THEN --检测是否允许计数(同步使能) IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清。