实验三设计含异步清0和同步时钟使能的加法计数器•(1)实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。•(2)实验原理:实验程序为例3-22,•(3)实验内容1:在QuartusⅡ上对例3-22进行编辑、编译、综合、适配、仿真。说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。•(4)实验内容2:引脚锁定以及硬件下载测试,引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。•(5)实验报告:将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。•LIBRARYIEEE;•USEIEEE.STD_LOGIC_1164.ALL;•USEIEEE.STD_LOGIC_UNSIGNED.ALL;•ENTITYCNT10IS•PORT(CLK,RST,EN:INSTD_LOGIC;•CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);•COUT:OUTSTD_LOGIC);•ENDCNT10;•ARCHITECTUREbehavOFCNT10IS•BEGIN•PROCESS(CLK,RST,EN)•VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);•BEGIN•IFRST='1'THENCQI:=(OTHERS='0');--计数器异步复位•ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿•IFEN='1'THEN--检测是否允许计数(同步使能)•IFCQI9THENCQI:=CQI+1;--允许计数,检测是否小于9•ELSECQI:=(OTHERS='0');--大于9,计数值清零•ENDIF;•ENDIF;•ENDIF;•IFCQI=9THENCOUT='1';--计数大于9,输出进位信号•ELSECOUT='0';•ENDIF;•CQ=CQI;--将计数值向端口输出•ENDPROCESS;•ENDbehav;实验四、7段数码显示译码器设计(1)实验目的:学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。(2)实验原理:7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。•【例5-18】•LIBRARYIEEE;•USEIEEE.STD_LOGIC_1164.ALL;•ENTITYDECL7SIS•PORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);•LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));•END;•ARCHITECTUREoneOFDECL7SIS•BEGIN•PROCESS(A)•BEGIN•CASEAIS•WHEN0000=LED7S=0111111;•WHEN0001=LED7S=0000110;•WHEN0010=LED7S=1011011;•WHEN0011=LED7S=1001111;•WHEN0100=LED7S=1100110;•WHEN0101=LED7S=1101101;•WHEN0110=LED7S=1111101;•WHEN0111=LED7S=0000111;•WHEN1000=LED7S=1111111;•WHEN1001=LED7S=1101111;•WHEN1010=LED7S=1110111;•WHEN1011=LED7S=1111100;•WHEN1100=LED7S=0111001;•WHEN1101=LED7S=1011110;•WHEN1110=LED7S=1111001;•WHEN1111=LED7S=1110001;•WHENOTHERS=NULL;•ENDCASE;•ENDPROCESS;•END;图5-18共阴数码管及其电路例5-18作为7段译码器,输出信号LED7S的7位分别接如图5-18数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,例5-18中的LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0)应改为…(7DOWNTO0)。图5-177段译码器仿真波形•(4)实验内容2:引脚锁定及硬件测试。建议选GW48系统的实验电路模式6(参考附录图8),用数码8显示译码输出(PIO46-PIO40),键8、键7、键6和键5四位控制输入,硬件验证译码器的工作性能。••(5)实验内容3:用第3章介绍的例化语句,按图5-19的方式连接成顶层设计电路(用VHDL表述),图中的CNT4B是一个4位二进制加法计数器,可以由例3-22修改获得;模块DECL7S即为例5-18实体元件,重复以上实验过程。注意图5-19中的tmp是4位总线,led是7位总线。对于引脚锁定和实验,建议选电路模式6,用数码8显示译码输出,用键3作为时钟输入(每按2次键为1个时钟脉冲),或直接接时钟信号clock0。图5-19计数器和译码器连接电路的顶层文件原理图实验五8位数码扫描显示电路设计•(1)实验目的:学习硬件扫描显示电路的设计。•(2)实验原理:图5-20所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。•图5-20所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。。图5-208位数码扫描显示电路•【例5-19】•LIBRARYIEEE;•USEIEEE.STD_LOGIC_1164.ALL;•USEIEEE.STD_LOGIC_UNSIGNED.ALL;•ENTITYSCAN_LEDIS•PORT(CLK:INSTD_LOGIC;•SG:OUTSTD_LOGIC_VECTOR(6DOWNTO0);--段控制信号输出•BT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--位控制信号输出•END;•ARCHITECTUREoneOFSCAN_LEDIS•SIGNALCNT8:STD_LOGIC_VECTOR(2DOWNTO0);•SIGNALA:INTEGERRANGE0TO15;•BEGIN•P1:PROCESS(CNT8)•BEGIN•CASECNT8IS•WHEN000=BT=00000001;A=1;•WHEN001=BT=00000010;A=3;•WHEN010=BT=00000100;A=5;•WHEN011=BT=00001000;A=7;•WHEN100=BT=00010000;A=9;•WHEN101=BT=00100000;A=11;•WHEN110=BT=01000000;A=13;•WHEN111=BT=10000000;A=15;•WHENOTHERS=NULL;•ENDCASE;•ENDPROCESSP1;•P2:PROCESS(CLK)•BEGIN•IFCLK'EVENTANDCLK='1'THENCNT8=CNT8+1;•ENDIF;•ENDPROCESSP2;•P3:PROCESS(A)–-译码电路•BEGIN•CASEAIS•WHEN0=SG=0111111;WHEN1=SG=0000110;•WHEN2=SG=1011011;WHEN3=SG=1001111;•WHEN4=SG=1100110;WHEN5=SG=1101101;•WHEN6=SG=1111101;WHEN7=SG=0000111;•WHEN8=SG=1111111;WHEN9=SG=1101111;•WHEN10=SG=1110111;WHEN11=SG=1111100;•WHEN12=SG=0111001;WHEN13=SG=1011110;•WHEN14=SG=1111001;WHEN15=SG=1110001;•WHENOTHERS=NULL;•ENDCASE;•ENDPROCESSP3;•END;•例5-19是扫描显示的示例程序,其中clk是扫描时钟;SG为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a7个段;BT是位选控制信号,接图5-20中的8个选通信号:k1、k2、…k8。程序中CNT8是一个3位计数器,作扫描计数信号,由进程P2生成;进程P3是7段译码查表输出程序,与例5-18相同;进程P1是对8个数码管选通的扫描程序,例如当CNT8等于001时,K2对应的数码管被选通,同时,A被赋值3,再由进程P3译码输出1001111,显示在数码管上即为“3”;当CNT8扫变时,将能在8个数码管上显示数据:13579BDF。•(3)实验内容1:说明例5-19中各语句的含义,以及该例的整体功能。对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。实验方式:若考虑小数点,SG的8个段分别与PIO49、PIO48、…、PIO42(高位在左)、BT的8个位分别与PIO34、PIO35、…、PIO41(高位在左);电路模式不限,引脚图参考附录图12。将GW48EDA系统左下方的拨码开关全部向上拨,这时实验系统的8个数码管构成图5-20的电路结构,时钟CLK可选择clock0,通过跳线选择16384Hz信号。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。•(4)实验内容2:修改例5-19的进程P1中的显示数据直接给出的方式,增加8个4位锁存器,作为显示数据缓冲器,使得所有8个显示数据都必须来自缓冲器。缓冲器中的数据可以通过不同方式锁入,如来自A/D采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等。实验六数字频率计的设计1.设计思路图3是8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。以下分别叙述频率计各逻辑模块的功能与设计方法。图38位十进制数字频率计逻辑图SD[31..0]REG32BTESTCTLGNDFSINCLKDOUT[31..0]SD[31..28]SD[27..24]SD[23..20]SD[19..16]SD[15..12]SD[11..8]SD[7..4]SD[3..0]DOUT[31..0]DIN[31..0]LOADCLKCQ[3..0]CARRY_OUTENACL