您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数字电路设计实验vhdl语言实验报告
1实验一秒表计数器的设计一、实验目的:本实验通过设计四种频率可选的数字时钟系统,以达到熟悉VHDL语言编程语法、设计思路和熟练掌握QuartusII开发软件的目的。二、实验内容:该数字时钟的显示格式如下所示:HH:MM:SS,其中HH表示时计数的两位,MM表示分计数的两位,SS表示秒计数的两位。本系统输入信号分别为复位信号rst(高有效)、sel(两位信号,分别可以选择2分频、4分频8分频和16分频)、clk_in(时钟信号)、8位时输出、8位分输出、8位秒输出(其中高4为表示对应的高半字节、低4位表示的低半字节,譬如当时间为08:59:30时,时输出为”0000_1000”,分输出为”0101_1001”,秒输出为”0011_0000”)。该时钟系统可以通过Sel信号时钟运行的快慢。三、实验流程:通过对实验内容的分析:可以考虑时钟系统的可由三部分组成:1、分频器:分频器为时序电路并且通过《数字电路》理论课程的学习可知由计数器来实现,同学可以回想一下实验1中是如何实现计数器电路的设计),该模块主要产生2、4、8、16分频的时钟信号;2、多路选择器:在VHDL中多路选择器为组合逻辑,可以有多种实现方法,在这里主要选用了case语句来实现。该模块的作用是从分频器中根据Sel2信号选择适当的时钟信号;3、时钟控制器:该模块比较复杂,主要实现功能是实现一个24小时的计时。当时间为00:00:59的时候下一个时钟到来时状态的跳变为00:01:00,计时中多数计数为加1操作,有几个特殊状态需要重点考虑:当时间产生分进数时,譬如上例。当时间产生时进数时,譬如00:01:59时刻的下一个状态为00:02:00;当时间产生时进数时,譬如00:59:59是个的下一个状态为01:00:00。当时间产生天进数时,譬如23:59:59的下一个状态为00:00:00。四、仿真要求:本次试验的结果全部采用功能仿真分析:1、在结果图中能够看到让复位信号rst为有效的情况下,所有的输出为00:00:00;2、当频率选择输出分别为”00”、”01”、”10”、”11”时秒为的进数分别包含2、4、8、16倍clk_in的时钟周期;3、可以看到完整的计时周期00:00:00-23:59:59-00:00:00。五、实验代码:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;3entityfpgaisport(clk_in:instd_logic;rst:instd_logic;sel:instd_logic_vector(1downto0);hour_high_out:outstd_logic_vector(3downto0);hour_low_out:outstd_logic_vector(3downto0);minute_high_out:outstd_logic_vector(3downto0);minute_low_out:outstd_logic_vector(3downto0);second_high_out:outstd_logic_vector(3downto0);second_low_out:outstd_logic_vector(3downto0));endfpga;architecturebehaoffpgaissignalclk:std_logic;signalclk_cnt:std_logic_vector(3downto0);signalhour_high:std_logic_vector(3downto0);signalhour_low:std_logic_vector(3downto0);signalminute_high:std_logic_vector(3downto0);signalminute_low:std_logic_vector(3downto0);signalsecond_high:std_logic_vector(3downto0);signalsecond_low:std_logic_vector(3downto0);4beginprocess(rst,clk_in)beginif(rst='1')thenclk_cnt=0000;elsif(rising_edge(clk_in))thenclk_cnt=clk_cnt+1;endif;endprocess;process(sel)begincaseseliswhen00=clk=clk_cnt(0);when01=clk=clk_cnt(1);when10=clk=clk_cnt(2);when11=clk=clk_cnt(3);whenothers=clk='0';endcase;endprocess;process(clk,rst)begin5if(rst='1')thenhour_high=0000;hour_low=0000;minute_high=0000;minute_low=0000;second_high=0000;second_low=0000;elsif(rising_edge(clk))thenif(second_low/=1001)thensecond_low=second_low+1;elseif(second_high/=0101)thensecond_high=second_high+1;elsesecond_high=0000;if(minute_low/=1001)thenminute_low=minute_low+1;elseif(minute_high/=0101)thenminute_high=minute_high+1;elseminute_high=0000;6if((hour_low/=0011)and((hour_high/=0010)or(hour_low/=1001)))thenhour_low=hour_low+1;elsehour_low=0000;if(hour_high=0010andhour_low=0011)thenhour_high=0000;elsehour_high=hour_high+1;endif;endif;endif;minute_low=0000;endif;endif;second_low=0000;endif;endif;endprocess;process(clk)begin7hour_high_out=hour_high;hour_low_out=hour_low;minute_high_out=minute_high;minute_low_out=minute_low;second_high_out=second_high;second_low_out=second_low;endprocess;endbeha;1、六、实验结果分析:在结果图中能够看到让复位信号rst为有效的情况下,所有的输出为00:00:00;2、当频率选择输出分别为”00”、”01”、”10”、”11”时秒为的进数分别包含2、4、8、16倍clk_in的时钟周期;二分频图8四分频图八分频图9十六分频图3、可以看到完整的计时周期00:00:00-23:59:59-00:00:00。七、实验心得通过上一节课的学习,了解实验软件QuartusII基本的操作方法后,这次的实验就娴熟了很多,实验的设计想法不是很复杂,因为这次要求是实现偶数分频以及计数功能。这次实验老师给定了代码的模板,给我们的编写和设计提供了很大的帮助,认真思考原理过后,对以后的更难一些的实验一定会有很大帮助。10实验二奇数分频的模十状态机的设计一、实验目的:通过设计频率可选的模十状态机以达到进一步掌握VHDL硬件描述语言的目的。二、实验流程:本设计有分频器、多路选择器、状态机。1.时钟输入作为分频器的输入,输出时钟分别为3分频和5分频;2.分频器输出由2选1的多路选择器选择其中之一作为状态机的时钟输入;3.使用选中的时钟频率作为输入时钟驱动状态机按照以下的次序输出:0-A-5-6-1-F-4-8-E-3-0的顺序输出。三、实验代码:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycounterisport(clk:instd_logic;rst:instd_logic;clk_div:outstd_logic;sel:instd_logic_vector(0downto0);11out1:outstd_logic_vector(3downto0));endcounter;architectureBehavioralofcounterissignalshangsheng:std_logic_vector(2downto0);signalcount1:std_logic_vector(2downto0);signalcount2:std_logic_vector(2downto0);signallevel_div3:std_logic;signalnow_state:std_logic_vector(3downto0);signalnext_state:std_logic_vector(3downto0);beginprocess(sel)begincaseseliswhen0=shangsheng=010;when1=shangsheng=100;endcase;endprocess;p1:process(clk)begin12if(clk'eventandclk='1')thenif(count2=shangsheng)thencount2=000;elsecount2=count2+1;endif;endif;endprocessp1;p2:process(clk)beginif(clk'eventandclk='0')thenif(count1=shangsheng)thencount1=000;elsecount1=count1+1;endif;endif;endprocessp2;level_div3=count1(1)orcount2(1);clk_div=level_div3;13Process(rst,clk)beginif(rst='1')thennow_state=0000;elsif(level_div3'eventandlevel_div3='1')thennow_state=next_state;endif;endprocess;process(now_state)begincasenow_stateiswhen0000=next_state=1010;when1010=next_state=0101;when0101=next_state=0110;when0110=next_state=0001;when0001=next_state=1111;when1111=next_state=0100;when0100=next_state=1000;when1000=next_state=1110;when1110=next_state=0011;14when0011=next_state=0000;whenothers=next_state=0000;endcase;endprocess;out1=now_state;endBehavioral;四、实验结果分析:1、通过实验结果,rst有效时,所有的状态为零。15三分频五、实验心得这次
本文标题:数字电路设计实验vhdl语言实验报告
链接地址:https://www.777doc.com/doc-3232095 .html