您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > cpld-VHDL实验报告-数字系统设计
数字系统设计与实验实验一.基础练习一.实验目的1.初步学习QuartusII的使用方法2.运用QuartusII进行简单的仿真二.实验内容实现十以内计数,并用数码管显示。要求同步计数并拥有置数功能。三.实验过程1.代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitycount10isport(clk,load,en:instd_logic;data_in:instd_logic_vector(3downto0);seg:outstd_logic_vector(6downto0));endcount10;architecturebehaofcount10issignalqout:std_logic_vector(3downto0);signalq_temp:std_logic_vector(3downto0);beginprocess(clk,load)beginif(load='1')thenq_temp=data_in;elsif(clk'eventandclk='1')thenif(en='0')thenqout=qout;elsif(qout=1001)thenqout=0000;elseqout=qout+1;endif;q_temp=qout;endif;endprocess;process(q_temp)begincaseq_tempiswhen0000=seg=1000000;when0001=seg=1111001;when0010=seg=0100100;when0011=seg=0110000;when0100=seg=0011001;when0101=seg=0010010;when0110=seg=0000010;when0111=seg=1111000;when1000=seg=0000000;when1001=seg=0010000;whenothers=seg=0001000;endcase;endprocess;endbeha;2.仿真步骤新建工程,在工程下建立相同名称的VHDLFile,输入代码,编译成功后点击New-VectorWaveformFile,插入要观察的对象(如图)设置初值设置时序\功能仿真保存然后进行仿真3.结果(1)直接装数式(2)功能仿真(3)时序仿真四.小结通过实验可以看出,时序仿真和功能仿真的区别在于功能仿真是理想情况下的,而时序仿真是实际中的情况,每个信号的上升、下降沿并不是直上直下的,而是有一定过渡时间,这个过渡时间造成交汇处出现抖动。学习QuartusII这款软件要多练习,同时要掌握好VHDL语言,逐渐学会用其进行程序设计,并学会使用QuartusII进行仿真。实验二.秒表计数器的设计一.实验目的通过设计实现四种频率可选的二位显示秒表,以熟悉VHDL语言编程。二.实验内容通过选取计数器count的不同位实现不同分频,即clk2=count(0);clk4=count(1);clk8=count(2);clk16=count(3);选择一个频率并以之作为时钟。实验要求进行六十进制计数,即个位进行十进制计数,十位进行六进制计数。三.实验过程1.各模块功能分频器模块设计:选用计数器模块实现,如下所示:if(rst=’1’)thencount=”0000”elsif(clk’eventandclk=‘1’)thencount=count+1;endif;clk2=count(0);clk4=count(1);clk8=count(2);cl16=count(3);多路选择器模块设计:可以考虑使用选择语句来实现:caseseliswhen“00”=clk=clk2;when“01”=clk=clk4;when“10”=clk=clk8;when“11”=clk=clk16;whenothers=null;endcase;计数器模块的实现:在本设计中总共要设计两个个计数器分别用于实现个位(9-0),十位(5-0)的计数。If(rst=’1’)thencount10=”0000”;elsif(clk’eventandclk=’1’)thenifcount10/=”1010”thencount10=count10+1;elsecount10=”0000”;endif;endif;2.代码libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitymiaobiaojishuisport(clk:std_logic;rst:std_logic;sel1:std_logic;sel0:std_logic;count1:outstd_logic_vector(3downto0);count2:outstd_logic_vector(3downto0));endmiaobiaojishu;architecturebehaofmiaobiaojishuissignalcount:std_logic_vector(3downto0);signalcount0:std_logic_vector(3downto0);signalcount10:std_logic_vector(3downto0);signalsel:std_logic_vector(1downto0);signalclk1:std_logic;beginsel(0)=sel0;sel(1)=sel1;count1=count0;count2=count10;process(rst,clk)beginif(rst='1')thencount=0000;elsif(clk'eventandclk='1')thencount=count+1;endif;endprocess;process(sel)begincaseseliswhen00=clk1=count(0);when01=clk1=count(1);when10=clk1=count(2);when11=clk1=count(3);whenothers=null;endcase;endprocess;process(rst,clk1)beginif(rst='1')thencount0=0000;count10=0000;elsif(clk1'eventandclk1='1')thenif(count0/=1001)thencount0=count0+1;elsecount0=0000;if(count10/=0101)thencount10=count10+1;elsecount10=0000;endif;endif;endif;endprocess;endbeha;分析:VHDL程序包括:(1)库(library)libraryIEEE;(2)包集合(Package)useIEEE.std_logic_1164.all;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;(3)实体(Entity)entitymiaobiaojishuisport(clk:std_logic;rst:std_logic;sel1:std_logic;sel0:std_logic;count1:outstd_logic_vector(3downto0);count2:outstd_logic_vector(3downto0));endmiaobiaojishu;(4)构造体(Architecture)architecturebehaofmiaobiaojishuissignalcount:std_logic_vector(3downto0);signalcount0:std_logic_vector(3downto0);signalcount10:std_logic_vector(3downto0);signalsel:std_logic_vector(1downto0);signalclk1:std_logic;begin[功能描述语句]endbeha;(5)配置(Configuration)(本实验没有用到)此外要注意程序中每一个process是并行的,其格式为:process(参数)begin[具体程序]Endprocess3.结果(1)二分频(2)四分频(3)八分频(4)十六分频四.小结本次实验综合使用分频器、多路选择器和计数器。运行过程中,count计数、频率选择和六十进制计数并行执行。频率选择好后保持不变。六十进制计数需要count的某一位作为时钟来触发(边沿触发)。实验三.模十状态机与7段译码器显示一.实验目的通过设计频率可选的模十状态机以及7段译码电路以进一步掌握VHDL硬件描述语言。二.实验内容先分频,进行频率选择(同实验二),再以选定频率作为时钟信号触发状态机工作,实现按指定状态变化,并用数码管显示每个状态值。三.实验过程1.各模块功能分频器模块设计:选用计数器模块实现,如下所示:if(rst=’1’)thencount=”0000”elsif(clk’eventandclk=‘1’)thencount=count+1;endif;clk2=count(0);clk4=count(1);clk8=count(2);clk16=count(3);多路选择器模块设计:可以考虑使用选择语句来实现:caseseliswhen“00”=clk=clk2;when“01”=clk=clk4;when“10”=clk=clk8;when“11”=clk=clk16;whenothers=null;endcase;状态机模块设计:signalnow_state,last_state:std_logic_vector(3downto0);Process(rst,clk)beginif(rst=‘1’)thennow_state=”0000”;elsif(clk’eventandclk=’1’)now_state=next_state;endif;process(now_state)begincasenow_stateiswhen“0000”=next_state=”0010”;when“0001”=next_state=”1001”;when“0010”=next_state=”0101”;when“0011”=next_state=”0000”;when“0100”=next_state=”1000”;when“0101”=next_state=”0110”;when“0110”=next_state=”0001”;when“0111”=next_state=”0011”;when“1000”=next_state=”0111”;when“1001”=next_state=”0100”;whenothers=next_state=”0000”;endcase;endprocess;2.代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitystateisport(clk,rst:instd_logic;sel:instd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);no
本文标题:cpld-VHDL实验报告-数字系统设计
链接地址:https://www.777doc.com/doc-3832841 .html