1、EDA实验五学号计数器的设计与仿真EDA实验五 学号计数器的设计与仿真一、实验目的:了解计数器的设计原理和方法,并且学会用数码管显示二、实验内容:本实验内容是:在QuartusII平台上,利用VHDL代码实现学号230计数器的设计,并在三位数码管显示出来。三、实验方法:实验方法:采用基于FPGA进行数字逻辑电路设计的方法。采用的软件工具是QuartusII软件仿真平台,采用的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。实验步骤:1、编辑源文件。打开QuartusII软件平台,建立工程文件夹,工程所在文件夹名字为xuehao_230。然后编辑源文件,保存,文件名与工程
2、文件夹名一致。2、按照实验箱上FPGA的芯片名更改编程芯片的设置。操作是点击Assign/Device,选取芯片的类型。3、编译与调试。确定状态图文件为当前工程文件,点击Complier进行文件编译。编译结果有错误或警告,则将要调试修改直至文件编译成功。4、波形仿真及验证。在编译成功后,点击Waveform开始设计波形。点击“insert the node”,按照程序所述引脚,任意设置各输入节点的输入波形点击保存按钮保存。5、FPGA芯片编程及验证,应记录实验结果进行分析。四、实验具体步骤与过程分析1、建立工程。打开Quartus II软件平台,点击File-new project wizar
3、d建立一个工程xuehao_230,工程所在文件夹名字为xuehao_230,设置顶层实体名称为xuehao_230,点击next设置device,按照实验箱上FPGA的芯片名更改编程芯片的设置。2、 添加VHDL文件。在所在工程添加文件cnt10.vhd(十进制计数器),cnt_xuehao.vhd(230进制计数器),scan_led3_vhd.vhd(三位数码管显示),exp_cnt_xuehao230_7seg.vhd(数码管显示230三位学号计数器)四个文件。 这里通过老师给出的代码进行修改且理解:cnt10.vhd如下:分析:这是十进制计数器的VHDL代码设计,因为十进制有十个状态
4、,所以输入数据和输出状态需要四位宽,其中输入端口有aclr 清零端,clock时钟信号,cnt_en使能端,data3.0数据输入,sload装载使能,当aclr为高电平有效时,输出清零,从0开始,计数为时钟信号clock的上升沿到来时且使能端cnt_en为高电平有效时自动加1(sload为低电平时),如果装载使能sload为高电平有效时,则装载数据data3.0,输出端口有两个,分别为cout(当q3.0为9时输出为高电平),q3.0变化为09循环变化。 cnt_xuehao.vhd如下:library ieee;use ieee.std_logic_1164.all;use ieee.st
5、d_logic_unsigned.all;LIBRARY lpm;USE lpm.all;entity cnt_xuehao isport( aclr,clock,cnt_en,sload:in std_logic; datab,datas,datag:in std_logic_vector(3 downto 0); cout:out std_logic; qb,qs,qg:out std_logic_vector(3 downto 0) );end cnt_xuehao; architecture a of cnt_xuehao iscomponent cnt10 ISPORT ( aclr
6、 : IN STD_LOGIC ; clock : IN STD_LOGIC ; cnt_en : IN STD_LOGIC ; data : IN STD_LOGIC_VECTOR (3 DOWNTO 0); sload : IN STD_LOGIC ; cout : OUT STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END component;signal regb,regs,regg:std_logic_vector(3 downto 0);signal lkaclr,couts,coutg:std_logic;begincn
7、tb:cnt10 port map( aclr=(lkaclr or aclr),clock=clock,cnt_en=(couts and coutg),data=datab,sload=sload,q=regb);cnts:cnt10 port map( aclr=(lkaclr or aclr),clock=clock,cnt_en=coutg,data=datas,sload=sload,cout=couts,q=regs);cntg:cnt10 port map( aclr=(lkaclr or aclr),clock=clock,cnt_en=cnt_en,data=datag,s
8、load=sload,cout=coutg,q=regg);lkaclr= 1 when ( regb=x3 and regs=x6 and regg=x5) else 0 ;cout= 1 when ( regb=x2 and regs=x3 and regg=x0) else 0;qb=regb;qs=regs;qgNetlist viewers-RTL viewer命令查看经软件解释生成的原理图如下:分析: 如上图由两部分组成,一部分是cnt_xuehao(230计数器),另一部分是scan_led3_vhd(三位数码管),输出端为cout和wei2.0,seg76.0.输入端为aclr
9、(清零命令),clock(计数器时钟信号),cnt_en(使能端),sload(装载使能),数据输入datab3.0(百位),datas3.0(十位),datag3.0(个位),scan_clk(数码管时钟源).容易验证RTL调试与VHD文件相符。点击cnt_xuehao部分生成cnt_xuehao的RTL部分如下图:分析:如图知道409计数器主要部分是由三个十进制计数器组成的。与相应的VHDL代码的实现功能是一致的。5、功能仿真下面我只对文件cnt_xuehao.vhd进行功能仿真,即对(学号)230计数器进行功能仿真。首先设置cnt_xuehao.vhd为顶层实体文件(因为之前exp_cn
10、t_xuehao230_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(装载使能)在前一周期为高电平有效,得以第一周期转载输入的数据,接着一个周期后恒为低电平无效
11、,之后只做时钟计数;手动设置输入数据datab,datas,datag均恒为0,然后在第一周期把它们设置为399得以第一周期装载(装载使能sload有效)数据,则计数从399开始。则初始设置完成,如下图:保存波形文件为cnt_xuehao.vwfc) 选择ProcessingGenerate Functional Simulation Netlist命令,产生功能仿真网表。d)选择AssignmentsSettings命令,单击Simulator Settings选项,在右侧的Simulation mode下拉列表中选择Functional项,并指定Simulation input波形文件为c
12、nt_xuehao.vwf,单击OK按键完成设置e)选择ProcessingStart Simulation命令,完成功能仿真,仿真结果为:综上分析,230计数器设计成功,且有清零命令,装载输入功能,自动计数功能。6、引脚设置与下载测试a) 目标器件选择及管脚分配。选择菜单AssignmentsPins,然后在分配窗口为输入端和输出端设置管脚。如图为详细的引脚设置:b) 进行一次全编译后,开始下载验证:分析:通过上述验证,得到了实验结论,与验证结果相符。虽然实验过程中出现了几处错误,但最后都得到解决。五、实验心得和总结:这次实验难点较多,但是通过讨论和查阅资料,最后都得到解决。通过这次实验感觉此次实验最大收获是搞清楚了计数器的功能原理和完全接触到了元件例化的用法。这次实验对这么多次元件例化的接触,印象很深刻。还有通过波能仿真的过程也收获很大,在初始化输入端的设置用了很多技巧,得以把计数器的清零功能装载功能和计数功能都仿真出来。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1