EDA实验报告——计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模323计数器设计实验报告
一、实验内容
在QuartusII平台上,利用VHDL代码实现学号323计数器的设计,并在三位数码管显示出来。
二、实验步骤与过程分析
1、建立工程。
打开Quartus II软件平台,点击File---〉new project wizard建立一个工程xuehao_323,工程所在文件夹名字为xuehao_323,设置顶层实体名称为xuehao_323,点击next设置device,按照实验箱上FPGA的芯片名更改编程芯片的设置。
分析:
选择的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。
2、添加VHDL文件。
在所在工程添加文件cnt10.vhd(十进制计数器),cnt_xuehao.vhd(323进制计数器),scan_led3_vhd.vhd(三位数码管显示),exp_cnt_xuehao323_7seg.vhd(数码管显示323三位学号计数器)四个文件。
这里通过老师给出的代码进行修改且理解:
cnt10.vhd如下:
分析:
这是十进制计数器的VHDL代码设计,因为十进制有十个状态,所以输入数据和输出状态需要四位宽,其中输入端口有aclr 清零端,clock时钟信号,cnt_en使能端,data[3..0]数据输入,sload装载使能,当aclr为高电平有效时,输出清零,从0开始,计数为时钟信号clock的上升沿到来时且使能端cnt_en 为高电平有效时自动加1(sload为低电平时),如果装载使能sload为高电平有效时,则装载数据data[3..0],输出端口有两个,分别为cout(当q[3..0]为9时输出为高电平),q[3..0]变化为0—9循环变化。
cnt_xuehao.vhd分析如下:
这里是调用cnt_10十进制计数器的元件例化来设计323(学号)计数器。输入端口aclr(高电平有效清零端),clock(时钟信号上升沿有效),cnt_en(使能端),sload(装载时能,高电平有效时装在输入的数据),datab[3..0],datas[3..0],datag[3..0](三位学号的数据输入端,每位变化相当于一个十进制计数器);输出端口qb[3..0](百位)qs[3..0](十位)qg [3..0](个位)变化为qb qs qg=000到322共323中状态,当等于322时,输出cout为高电平指示达到一个循环。
这里的主要思想是用三次十进制计数器分别生成323计数器的三位。
scan_led3_vhd.vhd如下:
分析:
这里是七段数码管的显示,显示八个数码管中的三个。输入引脚scan_clk为时钟源,cnt_aclr为清零端,datab[3..0],datas[3..0],datag[3..0]为数据输入,用以显示得到三位十六进制的数,已在数码管上显示出来,输出接口seg7[6..0]用来接七段数码管的abcdefg段,wei[2..0]用来选择八个数码管中的三个来显示输入数据。
exp_cnt_xuehao323_7seg.vhd如下:
分析:
这里是用到元件例化把323计数器和3位数码管结合,达到在七段数码管上显示323计数器的输出的三位。也是我们实验的最终目的,显示计数器的状态变化。输入引脚和输出引脚都是上面几个vhd文件的结合,主要有输入接口aclr (高电位清零),clock(计数器时钟信号),scan_clk(数码管时钟源),cnt_en (时能端),sload(装在时能),数据装载输入datab[3..0](百位),datas[3..0](十位),datag[3..0](个位);输出端口cout(当输出状态为322时cout输出为高电平),seg7[6..0](七段数码管的abcdef段), wei[2..0]三位数码管显示。
3、简单编译
这里首先点击左上角files中,选择exp_cnt_xuehao323_7seg.vhd 右击选择Set as T op-level Entity设为为顶层文件,然后键盘按下Ctrl+L进行编译。提示成功。
4、RTL调试
点击Tools->Netlist viewers->RTL viewer命令查看经软件解释生成的原理图如下:
分析:
如上图由两部分组成,一部分是cnt_xuehao(323计数器),另一部分是scan_led3_vhd(三位数码管),输出端为cout和wei[2..0],seg7[6..0].输入端为aclr(清零命令),clock(计数器时钟信号),cnt_en(使能端),sload(装载使能),数据输入datab[3..0](百位),datas[3..0](十位),datag[3..0](个位),scan_clk(数码管时钟源).
容易验证RTL调试与VHD文件相符。
点击cnt_xuehao部分生成cnt_xuehao的RTL部分如下图:
分析:
如图知道323计数器主要部分是由三个十进制计数器组成的。与相应的VHDL代码的实现功能是一致的。
4.功能仿真
下面我只对文件cnt_xuehao.vhd进行功能仿真,即对(学号)323计数器进行功能仿真。
首先设置cnt_xuehao.vhd为顶层实体文件(因为之前exp_cnt_xuehao323_7seg.vhd为顶层实体文件)。然后进行简单编译一次。
a). 点击File->New->Vector Waveform File建立波形文件。点击“insert the node”,插入输入端和输出端接口。
b). 然后设置输入端colck的周期为10ns;设置datab,datas,datag,qb,qs,qg 为ASCII显示;手动设置aclr(清零命令)为低电平,然后在180ns左右设置一小段为高电平以验证清零作用;手动设置cnt_en(使能端)恒为高电平有效;手动设置sload(装载使能)在前一周期为高电平有效,得以第一周期转载输入的数据,接着一个周期后恒为低电平无效,之后只做时钟计数;手动设置输入数据datab,datas,datag均恒为0,然后在第一周期把它们设置为399得以第一周期装载(装载使能sload有效)数据,则计数从399开始(我的学号为323)。则初始设置完成,如下图:
保存波形文件为cnt_xuehao.vwf
c) 选择Processing→Generate Functional Simulation Netlist命令,产生功能仿真网表。
d)选择Assignments→Settings命令,单击Simulator Settings选项,在右侧的Simulation mode下拉列表中选择Functional项,并指定Simulation input 波形文件为cnt_xuehao.vwf,单击OK按键完成设置
e)选择Processing→Start Simulation命令,完成功能仿真,仿真结果为: