您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验五基于CPLD时序逻辑电路设计
实验五基于CPLD/FPGA时序逻辑电路设计一N进制加法计数器设计(N=学号+5)二含并行置位的8位移位寄存器设计三数控分频器的设计四*16位定时/计数器的设计五*频率和占空比可调PWM的设计实验目的学习任意进制计数器的设计、分析和测试方法学习串入并出/并入串出的设计、分析和测试方法学习数控分频器的设计、分析和测试方法学习通用定时计数器的设计、分析和测试方法学习通用PWM控制器的设计、分析和测试方法实验内容用VHDL语言编写实现下列器件功能的程序并进行编译、波形仿真,下载测试。一N进制加/减法计数器设计(N=学号+5)二含并行置位的8位移位寄存器设计三数控分频器的设计四16位定时/计数器的设计五频率和占空比可调PWM的设计实验报告写出实验电路的设计过程。实验体会及实验收获。仿真,下载,记录实验数据、结果。设计示例1数控分频器的设计实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比.数控分频器可以用计数值可并行预置的加法计数器设计完成的.设计示例1数控分频器的设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDVFISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(7DOWNTO0);FOUT:OUTSTD_LOGIC);ENDENTITYDVF;ARCHITECTUREoneOFDVFISSIGNALFULL:STD_LOGIC;BEGINP_REG:PROCESS(CLK)VARIABLECNT8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENIFCNT8=11111111THENCNT8:=D;--当计数计满时,输入数据D被同步预置给计数器CNT8FULL=‘1’;--同时使溢出标志信号FULL输出为高电平ELSECNT8:=CNT8+1;--否则继续作加1计数FULL=‘0’;--且输出溢出标志信号FULL为低电平ENDIF;ENDIF;设计示例1数控分频器的设计ENDPROCESSP_REG;---------------------------------------------------------为使输出信号占空比为50%,再进行2分频-------------------------------------------------------P_DIV:PROCESS(FULL)VARIABLECNT2:STD_LOGIC;BEGINIFFULL'EVENTANDFULL='1'THENCNT2:=NOTCNT2;IFCNT2='1'THENFOUT='1';ELSEFOUT='0';ENDIF;ENDIF;ENDPROCESSP_DIV;ENDRCHITECTUREone;设计示例216位并进/并出移位寄存器设计实验原理:移位寄存器的功能就是当在输入端给定输入数据和进位结果时,在输入的时钟信号作用下完成数据的左移/右移(带进位和不带进位)多种功能.这个电路模型十分容易用到MCU的设计中。MSP430X2XXFamilyInstructionSet设计示例216位并进/并出移位寄存器设计LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(CLK,C0:INSTD_LOGIC;--时钟和进位输入MD:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字D:INSTD_LOGIC_VECTOR(15DOWNTO0);--待加载移位的数据QB:OUTSTD_LOGIC_VECTOR(15DOWNTO0);--移位数据输出CN:OUTSTD_LOGIC);--进位输出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTISSIGNALREG:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALCY:STD_LOGIC;BEGINPROCESS(CLK,MD,C0)BEGINIFCLK'EVENTANDCLK='1'THENCASEMDISWHEN001=--带进位循环左移REG(0)=C0;REG(15DOWNTO1)=REG(14DOWNTO0);CY=REG(15);WHEN“010”=--自循环左移REG(0)=REG(15);REG(15DOWNTO1)=REG(14DOWNTO0);设计示例2(续)16位并进/并出移位寄存器设计WHEN011=--自循环右移REG(15)=REG(0);REG(14DOWNTO0)=REG(15DOWNTO1);WHEN100=--带进位循环右移REG(15)=C0;REG(14DOWNTO0)=REG(15DOWNTO1);CY=REG(0);WHEN101=--加载待移数REG(15DOWNTO0)=D(15DOWNTO0);WHENOTHERS=--保持REG=REG;CY=CY;ENDCASE;ENDIF;ENDPROCESS;--移位后输出QB(15DOWNTO0)=REG(15DOWNTO0);CN=CY;ENDBEHAV;16位定时/计数器的设计16位定时/计数器的设计模型16位定时/计数器的设计设计原理:根据要求设计模型要求采用4选一多路选择器完成输入信号的选择.采用8进制计数器对所选择的信号进行计数,则输出信号分别为输入信号的2/4/8分频,通过预分频选择器选择进入16进制计数器的计数信号(时钟输出信号).采用可预置计数初值的16位加法计数器完成对输入信号的定时计数.16位定时/计数器的设计-----------------------------------------------------------------16位定时/计数器所使用的库和包---------------------------------------------------------------LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;-----------------------------------------------------------------16位定时/计数器的实体---------------------------------------------------------------ENTITYTIME16ISPORT(TACLK,ACLK.SMCLK,INCLK:INSTD_LOGIC;--时钟输入TACLR:INSTD_LOGIC;--分频器/计数器清零ID:INSTD_LOGIC_VECTOR(1DOWNTO0);--预分频选择TASSEL:INSTD_LOGIC_VECTOR(1DOWNTO0);--输入时钟选择DATAIN:INSTD_LOGIC_VECTOR(15DOWNTO0);--计数器重装载值的数据DATAOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0);--移位数据输出TIMECLOCK:OUTSTD_LOGIC);--预分频输出时钟SETTAIFG:OUTSTD_LOGIC--定时到输出信号);ENDENTITYTIME16;16位定时/计数器的设计-----------------------------------------------------------------------16位定时/计数器结构体--3个进程(1)输入信号选择(2)预分频(3)16位可预置初值的加法计数器---------------------------------------------------------------------ARCHITECTUREBEHAVOFTIME16ISSIGNALFOUT:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALFSL0:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALFSL1:STD_LOGIC;SIGNALFSEL:STD_LOGIC;BEGIN-----------------------------------------------------------------------定时/计数输入信号选择--当ID=00FSEL=TACLK定时状态--当ID=01FSEL=ACLK定时状态--当ID=10FSEL=SMCLK定时状态--当ID=11FSEL=INCLK计数状态---------------------------------------------------------------------P0:PROCESS(TASSEL)BEGINFSEL=TACLKWHENTASSEL=“00”ELSEACLKWHENTASSEL=“01”ELSESMCLKWHENTASSEL=“10”ELSEINCLK;ENDPROCESSP0;16位定时/计数器的设计-----------------------------------------------预分频计数器/2/4/8/16---------------------------------------------P_DIV:PROCESS(FSEL)VARIABLECNT2:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFTACLR=‘0’THENCNT2:=“0000”ELSIFFSEL'EVENTANDFSEL='1'THENCNT2:=CNT2+1;ENDIFFSL0=CNT2;ENDPROCESSP_DIV;FSL1=FSL(0)WHENID=“00”ELSEFSL(1)WHENID=“01”ELSEFSL(2)WHENID=“10”ELSEFSL(3);TIMECLOCK=FSL1;16位定时/计数器的设计-----------------------------------------------16位可预置计数器的设计---------------------------------------------P_count:PROCESS(FSL1)signalCNT3:STD_LOGIC_VECTOR(15DOWNTO0);BEGINIFTACLR=‘0’THENCNT3:=“0000”ELSIFFSL1'EVENTANDFSL1='1'THENIF(CNT3=“1111111111111111”THENCNT3:=DATAIN;SETTAIFG=‘1’;ELSECNT3:=CNT3+1;SETTAIFG=‘0’;ENDIF;ENDIFDATAOUT=CNT3;ENDPROCESSP_count;--------------------------------------------------------------------------------ENDARCHITECTUREBEHAVOFTIME16-----------------------------END----------------------------------频率和占空比可调PWM的设计频率和占空比可调PWM的设计模型频率和占空比可调PWM的设计输出频率100HZ~3KHZ占空比1~99%可调设计原理:采用分频器,计数器加比较器就可以完成PWM的设计根据要求设计
本文标题:实验五基于CPLD时序逻辑电路设计
链接地址:https://www.777doc.com/doc-2531427 .html