模可变16位加法计数器.docx
- 文档编号:7662146
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:15
- 大小:24.54KB
模可变16位加法计数器.docx
《模可变16位加法计数器.docx》由会员分享,可在线阅读,更多相关《模可变16位加法计数器.docx(15页珍藏版)》请在冰点文库上搜索。
模可变16位加法计数器
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题 目:
模可变16位加法计数器设计
初始条件:
可用仪器:
PC机(QuartusII软件)硬件:
EDA-IV型实验箱。
要求完成的主要任务:
(1)设计任务
设计一个模可变16位加法计数器。
(2)设计指导
设计可变16位加法计数器,可通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式,例如可构成5、10、16、46、100、128、200、256进制,共8种计数模式。
(3)时间安排:
第1天
课程设计任务布置、选题、查阅资料
第2~5天
设计,软件编程、仿真和调试
第6~8天
实验室检查仿真结果,验证设计的可行性和正确性
第9~10天
设计的硬件调试
第11天
机房检查设计成果,提交设计说明书及答辩
指导教师签名:
年 月 日
系主任(或责任教师)签名:
年 月 日
摘要 I
Abstract II
1绪论 1
2计数器的工作原理 2
3设计原理 3
3.1整体设计原理 3
3.2单元模块的设计 4
3.3顶层模块(整体电子线路系统)的设计 8
4电路系统的功能仿真 12
5硬件调试 14
6个人小结 16
参考文献 17
摘要
计数器是数字电子技术中应用的最多的时序逻辑电路。
计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。
但是并无法显示计算结果,一般都是要通过外接LCD或LED屏才能显示。
计数器的种类按照计数器中的触发器是否同时翻转分类,可将计数器分为同步计数器和异步计数器两种,如果按照计数过程中数字增减分类,又可将计数器分为加法计数器、减法计数器和可逆计数器,随时钟信号不断增加的为加法计数器,不断减少的为减法计数器,可增可减的叫做可逆计数器,另外还有很多种分类不一一列举,但是最常用的是第一种分类,因为这种分类可以使人一目了然,知道这个计数器到底是什么触发方式,以便于设计者进行电路的设计。
本次课程设计将利用众多集成电路软件中的QuartusII软件,使用VHDL语言编程来设计一个可通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式的16位二进制加法计数器,并把程序下载到相关可编程逻辑器件(如Cyclone系列的EP1C3T144C8型号芯片),结合相关外围电路来实现硬件的调试。
调试结果表明,所设计的计数器正确实现了5、10、16、46、100、128、200、256进制,共8种可选计数模式的计数功能。
关键词:
二进制;计数器;VHDL语言
Abstract
Thecounteristhemostsequentiallogiccircuitapplicationsinthedigitalelectronictechnology.Thecounterisnotonlyusedtocountclockpulses,canalsobeusedtodivide,fromtimetotime,thebeatpulseandthepulsesequenceandnumbercrunching.CannotdisplaythecalculationresultsaregenerallythroughanexternalLCDorLEDscreentodisplay.Thetypeofthecounterflip-flopinthecounteratthesametimefliptheclassification,canbecountertobedividedintosynchronouscountersandasynchronouscounters,digitalchangesinclassificationinaccordancewiththecountingprocess,butalsothecounterisdividedintoaddingcounter,downcounterandreversiblecounter,atanytimetheclocksignalincreasingfortheadditioncounterdwindlingdowncounter,growthcanbereducediscalledthereversiblecounter,inadditiontoavarietyofclassificationdoesnotenumerate,butthemostcommonlyusedisthefirstclassification,thisclassificationmakesclear,thecounterintheendiswhattriggersthecircuitdesign,sothatthedesigner.
ThecurriculumdesignwilltakeadvantageofmanyICsoftwareQuartusIIsoftware,usingtheVHDLlanguagetodesigna3-bitselecttheM2,theM1,M0upto8differentmodecount16-bitbinaryaddercounteranddownloadtheprogramtotheprogrammablelogicdevice(suchastheCycloneseriesEP1C3T144C8modelschips),combinedwithrelatedperipheralcircuitstohardwaredebugging.Thedebugresultsshowthatthedesigncountercorrectlyimplemented5,10,16,46,100,128,200,256ofofhex,atotalofeightkindsofoptionalcountingmodecount.
Keywords:
binary;Counter;VHDLlanguage
1绪论
现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化,即EDA(ElectronicDesignAutomation)技术。
EDA技术就是依赖功能强大的计算机,在集成电路软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
一般所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。
EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。
常用的EDA工具软件平台有:
Matlab、Protel、Proteus、OrCAD以及本次课程设计所用到的QuartusII等。
而且EDA工具软件平台一般都有第三方软件接口,以便于与其他软件联合使用。
本次课程设计在设计16位二进制模可变的计数器时所用到的EDA软件工具平台是QuartusII。
QuartusII是Altera公司的综合性PLD(可编程逻辑器件)开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
本文将介绍在QuartusII平台上利用VHDL语言来实现16位二进制模可变的计数器的程序设计以及实现硬件调试的原理方法。
2计数器的工作原理
计数器是数字系统中使用较多的一种时序逻辑器件。
计数器的基本功能是统计时钟脉冲的个数,即对脉冲实现计数操作。
其工作原理可概述为:
当输入时钟脉冲的一个上升沿(也可以是下降沿)来临时,二进制数据的低一位加1(或减1),并向高位进1(或借1)。
在没有外部约束条件时,计数器可进行与其二进制位数对应的数值的相应进制的自循环计数,如位数为3的计数器可进行8进制的自循环加法或减法计数。
可根据需要来设置计数器的位数,并通过外部约束条件来人为设定计数器的计数模数,来得到计数进制符合需要的N进制计数器。
所谓N进制计数器,是指一个计数器的计数过程,在经历时钟脉冲信号的个为N之后,二进制数据又回到初始状态的计数器。
表1计数器的状态表
时钟
Q0
Q1
……
Qn-1
Qn
0
0
0
0..00
0
0
1
0
0
……
0
1
2
0
0
1
0
3
0
0
……
1
1
…..
…..
……
……
……
……
2n-1
1
1
…..
1
0
2n
1
1
1..11
1
1
2n+1
0
0
0..00
0
0
图1计数器的状态图
3设计原理
本文所设计的为模可变的16位加法计数器,可通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式,例如可构成5、10、16、46、100、128、200、256进制,共8种计数模式。
并编程设计相关配套外围电路,通过把程序下载到实验箱来实现硬件的调试。
3.1整体设计原理
根据层次化设计理念,可分解成计数模块、模数选择模块、显示模块来进行模块化设计,再把各模块综合得到所设计的电子线路系统。
因为现实时需要用到点阵的某行作为16位LED灯来显示所设计的电子系统功能,所以需要设计显示模块。
又因为实验箱上的时钟脉冲频率过高,不符合本次设计的使用要求,所以还需要设计时钟分频模块对时钟进行分频以得到频率合适的时钟脉冲信号。
图2整体设计原理框图
原始时钟经过分频模块后得到符合要求的时钟脉冲信号作为计数模块的时钟输入,通过3位拨码开关来控制模数选择模块的模数输出,该模数输出作为计数模块的模数选择信号输入,计数模块的16为数据输出作为显示模块的16位数据输入,该16位数据输出接到实验箱上的点阵模块的相应的16个引脚上。
3.2单元模块的设计
1.计数模块的设计
计数模块的源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitycntis
port(clk:
instd_logic;
jz:
inintegerrange0to65535;——定义进制选择输入端口
dout:
outstd_logic_vector(15downto0));
endcnt;
architecturef1ofcntis
signalsd:
std_logic_vector(15downto0);——定义16位矢量信号变量
begin
process(clk)
begin
ifclk'eventandclk='1'then
sd<=sd+1;
ifsd>=jz-1thensd<="0";endif;——达到计数模数返回初值
endif;
endprocess;
dout<=sd;——矢量信号变量值赋予输出矢量变量
endf1;
源程序中定义矢量信号变量是为了实现变量自赋值,因为一般的输出变量不能实现自赋值,而计数过程中又需要变量自赋值来实现计数。
因为信号变量具有暂存功能,所以可实现自赋值。
因此需要设置信号变量,再把信号变量的置赋予输出变量,以使程序正确实现功能。
2.模数选择模块的设计
模数选择模块的源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityselis
port(seli:
instd_logic_vector(2downto0);——定义控制输入变量
selo:
outintegerrange0to65535);——模数选择输出变量
endsel;
architecturef2ofselis
begin
withseliselect
selo<=5when"000",——不同模数的选取
10when"001",
16when"010",
46when"011",
100when"100",
128when"101",
200when"110",
256when"111",
nullwhenothers;
endf2;
程序中使用withselect语句可使程序设计变得简单,null为空操作语句,程序中使用nullwhenothers语句是为了避免当拨码开关输入出现错误输入时造成程序功能错误。
3.显示模块的设计
显示模块的源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitydpyis
port(dpyi:
instd_logic_vector(15downto0);
dpyo:
outstd_logic_vector(15downto0)——定义点阵行选变量
dyo:
outstd_logic_vector(3downto0));——定义点阵列选变量
enddpy;
architecturef3ofdpyis
signaldsel:
std_logic_vector(3downto0);——定义4位信号矢量变量
begin
dsel<="0111";
withdselselect
dpyo<=dpyiwhen"0111",
"0"whenothers;
dyo<=dsel;——信号矢量变量值赋予列选变量
endf3;
因为需要使用点阵来显示,所以需要定义4位信号矢量变量来选择点阵的某一列来作为16位LED灯使用,以显示16个数据位的状态变化,程序中所选的为点阵的第8列。
“0”whenothers语句表示点阵的除第8列外的其余列均未被选中,即不会被点亮。
4.分频模块的设计
分频模块的源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfpis
port(fck:
instd_logic;
fpo :
outstd_logic);——分频后的时钟脉冲输出
endfp;
architecturef4offpis
signalso:
std_logic_vector(24downto0);
begin
process(fck)
begin
iffck'eventandfck='1'then
ifso=19999999then——对原始时钟进行20M分频
so<="0000000";
fpo<='1';
elseifso=4999999then——使分频后的时钟占空比为50%
fpo<='0';
endif;
so<=so+1;
endif;
endif;
endprocess;
endf4;
利用计数器的进位输出作为分频后的时钟脉冲信号输出,计数器的计数进制就是分频器的分频数,即N进制的计数器就可以对原始时钟进行N分频。
3.3顶层模块(整体电子线路系统)的设计
顶层模块的设计可通过把单元模块的源程序生成原理图器件,再把单元原理图器件用原理图连接的方法来实现整体电子线路系统的设计。
程序中顶层模块的lck输入变量作为原始时钟的输入口,其值赋予分频模块的fck输入变量,显示模块的16位输出矢量变量dpyo值赋予顶层模块的16位lout输出矢量变量,顶层模块的16位lout输出矢量变量用于与点阵的行的16个引脚相连,显示模块的4位输出变量dyo值赋予顶层模块的输出变量lso作为点阵的列选信号,选择模块的3位模数选择输入变量seli值赋予顶层模块的输入变量lin作为模数控制端口,3位lin输入变量端口与3位拨码开关相连。
计数模块的clk端口通过信号变量sp与分频模块的fpo相连,分频模块的fpo端口输出的是频率为20M的原始时钟经20M分频后的周期为1HZ的矩形脉冲信号,进制控制端口jz通过信号变量sl与模数选择模块的selo相连,16为输出端口dout通过信号变量so与显示模块的dpyi相连。
各单元模块间连接时需要通过中间变量——信号变量才能正确相连,这是因为一般的输出变量不能作为信号输入,而信号变量具有暂存功能,一般的输出变量经过信号变量后就可以当做一般的输入信号使用。
整体电子线路系统的设计通过把各单元模块生成器件原理图后,用连接原理图生成bdf文件的方法来完成,该方法简单具体,可视化效果较好,工作量比编写顶层例化程序少了很多,而且不易出错。
单元模块元件原理图的生成:
选中所要的单元模块的vhd源程序文件后,单击右键,选中“CreateSymbolFilesforCurrentfile”选项即可,操作过程如图3.2。
图3生成原理图的操作示意图
各单元模块的器件原理图:
图4计数模块原理图 图5显示模块原理图
图6分频模块原理图 图7模数选择模块原理图
整体电子线路系统原理连接图:
图8整体电子线路系统原理图
图8中clki端口作为原始时钟输入端口,端口cout[15..0]作为控制点阵16个行引脚高低电平的变量,端口cout[3..0]作为点阵列选控制变量,端口seli[2..0]作为与3位拨码开关连接的控制计数模数选择的输入端口。
多位矢量变量之间用总线连接,一位矢量变量之间用单线连接。
4电路系统的功能仿真
利用QuartusII软件平台的仿真功能来对所设计的电子线路系统进行时序仿真,以检测所设计的系统是否能够实现预期的功能,以便对源程序进行修改。
完成整体电子线路系统的设计工作后,新建vwf仿真文件,对所设计的电子线路系统进行功能仿真,检测电子线路系统的正确性。
图9新建仿真文件示意图
图10计数模数为10的功能仿真波形
图11计数模数为16的功能仿真波形
以上是以10进制和16进制计数模式为例的功能仿真波形在,从图中可看出所设计的电子线路系统可实现正确功能,即该电子线路系统的设计是正确的。
在仿真过程中由于源程序中时钟分频过大,会导致看不到波形,所以需要修改分频参数,降低分频数,以使在仿真过程中能够看到完整波形,仿真正确后再改回原来的参数。
在仿真过程中,可根据需要设置仿真时间长度,以看到更多的仿真波形,有利于从仿真波形中检测所设计的电子线路系统的正确性。
5硬件调试
在对所设计的电子线路系统进行功能仿真,确定所设计的电子线路系统是正确的后,接着把用QuartusII软件平台设计的电子线路系统程序文件下载到实验箱,连接好相关外围电路,进行硬件的调试。
在进行程序文件的下载前,需要根据实验箱的设置和所用芯片的特点来进行芯片管脚的分配。
在分配完管脚后,关闭管脚分配窗口,再对程序进行一次全编译后即可进行程序的下载。
在下载过程中有时候可能会不能正确下载,这时在检查下载线连接实验箱无问题后,可通过多次对程序文件进行全编译、下载来解决。
下图为在QuartusII软件平台对芯片进行管脚分配的示意图。
图12芯片管脚分配示意图
在对芯片分配完管脚,连接好数据下载线,连接好实验箱上的外围电路,给实验箱上电后,即可点击QuartusII操作界面上的工具栏的“Program”按钮的图标,在选择“Program/Configure”后,点击“Star”按钮进行程序文件的下载。
下图为程序文件的下载操作示意图。
图13程序文件的下载操作示意图
程序下载完毕后,通过实验箱上的3位拨码开关来选择所设计的可实现多进制计数功能的电子线路系统的计数进制,通过实验箱上点阵的第8列作为16位LED灯来显示系统的计数进程,调试结果表明所设计的计数器电子线路系统能够实现通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式,例如可构成5、10、16、46、100、128、200、256进制,共8种计数模式的正确功能。
6个人小结
这次EDA课程设计历时一个星期,在整整一个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在顶层模块设计时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:
在设定输入的时钟信号后,在数十次的调试之后,才发现是因为输入的时钟信号对于器件的延迟时间来说太短了。
经过屡次调试,终于找到了比较合适的输入数值。
其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可变 16 加法 计数器