2022年定时器VHDL设计.pdf
《2022年定时器VHDL设计.pdf》由会员分享,可在线阅读,更多相关《2022年定时器VHDL设计.pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、定时器 VHDL设计定时器1、实验任务设计要求 :整体清零 ;可以定时最高到99min;以秒速度递增至预定时间,以分速度递减至零。总体框图如下图所示:clr 用来整体复位清零;clk 提供了秒信号 ,频率为 1HZ(在仿真中取10MHZ);clky 就是用来扫描输出的 ,选用频率大于50HZ 的方波 (为便于观察结果,在仿真中取10MHZ);set 就是用来置位的 ,低电平时有效,将以秒的速度 ,从零递增到所需定时的时间,为高电平时以分的速度递减 ,实现定时 ,直到零 ,定时结束 ;alm 输出高电平 ,可启动各种电路或发出警报。时间的变化都将在数码管上显示出来。2、模块及模块功能模块 AAA
2、见下图示。它就是核心模块,用来实现定时器的逻辑功能,计数结果用十进制数输出。LIBRARY ieee; USE ieee、std_logic_1164、all; USE ieee、std_logic_unsigned、all; ENTITY aaa IS PORT(clk, clr, set: in std_logic; alm: out std_logic; q1,q0: out std_logic_vector(3 downto 0); END aaa; ARCHITECTURE aaa_arc OF aaa IS BEGIN PROCESS (clk,clr) variable cnt1
3、,cnt0:std_logic_vector(3 downto 0); variable cnt: integer range 0 to 59; BEGIN IF clr=0 THEN -整体复位精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计alm=0; cnt:=0; cnt1:=0000; cnt0:=0000; ELSIF clkEVENT AND clk=1 THEN -设计数初值IF set=0 THEN cnt
4、:=0; IF cnt01001 THEN cnt0:=cnt0+1; ELSE cnt0:=0000; IF cnt11001 THEN cnt1:=cnt1+1; ELSE cnt1:=0000; END IF; END IF; ELSE IF cnt0000 THEN cnt0:=cnt0-1; IF cnt1=0000 AND cnt0=0000 THEN -判断计时就是否结束alm0000 THEN cnt1:=cnt1-1; ELSE cnt1:=1001; END IF; END IF; END IF; END IF; END IF; q0=cnt0; q1=cnt1; END
5、PROCESS; END aaa_arc; 模块 CH 如下图示。由于只用了两个数码管,所以片选信号直接接一个较快的时钟。此模块的功能就是对应片选信号,送出要显示的数据。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计LIBRARY ieee; USE ieee、std_logic_1164、all; ENTITY ch IS PORT(sel:in std_logic; a1,a0:in std_logic_vector(
6、3 downto 0); q:out std_logic_vector(3 downto 0); END ch; ARCHITECTURE ch_arc OF ch IS BEGIN PROCESS(sel,a0,a1) BEGIN IF sel=0 THEN q=a0; ELSE qqqqqqqqqqqq=0000000; END CASE; END PROCESS; END disp_arc; 3、仿真结果分析总体仿真结果如下: 由图可见 ,clr = 0 可实现整体复位功能。set = 0 ,输出以秒的速度从零递增。本图中当递增到26 后,set = 1 ,输出经 60 分频后以分的速度
7、递减,实现定时 ,直到零 ,定时结束。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计定时结束后 ,clm = 1 ,此时可启动各种电路或发出报警,定时结束。clr = 0 ,整体复位 ,clm = 0 。该设计采用动态扫描电路,经过二选一模块将结果显示出来。从上图可见,q 交替输出两位结果。 sel= 1 时输出高位 ,sel= 0 时输出低位。自动售货机控制器一、设计一个自动售货机的控制电路。该自动售货机销售价格为25
8、美分的糖果 ,利用有限状态机进行电路设计。控制器的输入输出如图所示: 输入信号就是nickel_in( 投入 5 美分 ),dime_in( 投入 10 美分 ),quarter_in( 投入 25 美分 )。 另外两个必要的输入就是clk(时钟 )与 rst(复位 )。控制器相应的有3 个输出 :candy_out 用于控制发放糖果 , nickel_out 用于控制找回5 美分的零钱 , dime_out 用于控制找回10 美分的零钱。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 23
9、页 - - - - - - - - - - 定时器 VHDL设计上图给出了有限状态机的状态转移图。圆圈里的数代表顾客投进来的总钱数(接受 5 美分、 10 美分或 25 美分的硬币 )。状态 0 就是空闲状态。从它开始,如果投入5美分硬币 ,将跳转到状态 5;如果投入 10 美分硬币 ,将跳转到状态10;如果投入 25 美分硬币 ,将跳转到状态25。随着投币数量的增加,状态不断跳转 ,如果投入的币值达到25 美分 ,就可以进入状态25,然后售货机会发放糖果,并跳转回状态0。如果投入的币值超过了25 美分 ,那么售货机要进入与找零钱相关的状态。例如,当投入的币值达到40 美分时 ,需要先退出5
10、美分硬币 (进入状态35),然后再退出 10 美分 ,发放糖果并进入状态0。二、该设计的VHDL 源码如下 : 在代码中定义了枚举类型state,它包含 10 个状态 ,所以至少需要用4 位对其进行编码(将产生4 个寄存器 )。在默认状态下,编译器将按照它们的排列顺序对其进行编码,所以有st0=” 0000” (十进制的 0),st5=” 0001” (十进制的 1),与 st45=” 1001” (十进制的9)。在仿真中 ,这些数字将替代状态的名称出现在仿真波形中。LIBRARY ieee; USE ieee、std_logic_1164、all; ENTITY vending_machin
11、e IS PORT (clk, rst:IN STD_LOGIC; nickel_in, dime_in, quarter_in: IN BOOLEAN; 0 25 5 10 15 20 40 45 30 35 ni ni ni ni qi qi qi qi qi no do di no+co do+co co di di di di ni 自动售货机控制器的顶层电路图与状态转移图信号说明 :ni=nickel_in, di=dime_in, qi=quarter_in, no=nickel_out, do=dime_out, co=candy_out 精品资料 - - - 欢迎下载 - -
12、- - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计candy_out, nickel_out, dime_out: OUT STD_LOGIC); END vending_machine; ARCHITECTURE fsm OF vending_machine IS TYPE state IS(st0,st5,st10,st15,st20,st25,st30,st35,st40,st45); SIGNAL present_state,next_state: STA
13、TE; BEGIN PROCESS(rst,clk) BEGIN IF(rst=1) THEN present_state=st0; ELSIF (clkEVENT AND clk=1) THEN present_state candy_out=0; nickel_out=0; dime_out=0; IF(nickel_in) THEN next_state=st5; ELSIF(dime_in) THEN next_state=st10; ELSIF(quarter_in) THEN next_state=st25; ELSE next_state candy_out=0; nickel_
14、out=0; dime_out=0; IF(nickel_in) THEN next_state=st10; ELSIF(dime_in) THEN next_state=st15; ELSIF(quarter_in) THEN next_state= st30; ELSE next_state candy_out=0; nickel_out=0; dime_out=0; IF(nickel_in) THEN next_state=st15; ELSIF(dime_in) THEN next_state=st20; ELSIF(quarter_in) THEN next_state=st35;
15、 ELSE next_state candy_out=0; nickel_out=0; dime_out=0; IF(nickel_in) THEN next_state=st20; ELSIF(dime_in) THEN next_state=st25; ELSIF(quarter_in) THEN next_state=st40; ELSE next_state candy_out=0; nickel_out=0; dime_out=0; IF(nickel_in) THEN next_state=st25; ELSIF(dime_in) THEN next_state=st30; ELS
16、IF(quarter_in) THEN next_state=st45; ELSE next_state candy_out=1; nickel_out=0; dime_out=0; next_state candy_out=1; nickel_out=1; dime_out=0; next_state candy_out=1; nickel_out=0; dime_out=1; next_state candy_out=0; nickel_out=1; dime_out=0; next_state candy_out=0; nickel_out=0; dime_out=1; next_sta
17、te=st35; END CASE; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计END PROCESS; END fsm; 三、仿真结果分析仿真结果如下图示: 由上图可以瞧到:第一个周期内 ,一共投入了3 个 5 美分硬币与1 个 25 美分硬币。在第一个 5 美分硬币投进去后的第一个时钟上升沿出现时,有限状态机的状态从st0(十进制的0)转到了 st5(十进制的1)。在投入第二个5 美分硬币后状态转到st10(十进制
18、的2),投入第二个5美分硬币后状态转到st15(十进制的 3),在 25 美分硬币投进去以后,状态变为 st40(十进制的 8)。此后 ,售货机退还顾客一个5 美分硬币 (nickle_out= 1 ),同时状态机进入st35(十进制的 7),接着退还 10 美分硬币 (dime_out= 1 )并发放糖果 (candy_out= 1 ),同时状态回到空闲状态(st0)。其她输入组合的分析同上。二、 2、 设计帧同步检测电路,输入位宽1 位的二进制序列及时钟,输出高电平脉冲的检测结果。对输入的二进制序列检测帧同步序列“01011”,即当输入的二进制序列中出现帧同步序列时 ,输出一个高电平脉冲。
19、(1)、设计原理用状态机 ,状态转换图如下图示: 状态转换图各状态定义如下:S0:空闲状态或仅输入“1”; S1:输入一个“ 0”后的状态 ; S2:输入序列“ 01”后的状态 ; S3:输入序列“ 010”后的状态 ; State/Y X 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 23 页 - - - - - - - - - - 定时器 VHDL设计S4:输入序列“ 0101”后的状态 ; S5:输入帧同步序列“01011”后的状态 ,此时输出一个高电平脉冲。管脚图管脚说明 :CLK
20、时钟信号 ;X输入二进制序列;Y输出变量。(2)、VHDL 源程序 : LIBRARY ieee; USE ieee、std_logic_1164、all; USE ieee、std_logic_arith 、all; USE ieee、std_logic_unsigned、all; ENTITY check IS PORT(clk,x:in std_logic; y:out std_logic); END check; ARCHITECTURE check_arc OF check IS type state is(s0,s1,s2,s3,s4,s5); signal present_sta
21、te:state; signal next_state:state; BEGIN s:PROCESS(clk) BEGIN IF clkevent and clk=1 THEN present_state y=0; if x=0 then next_state=s1; else next_state y=0; if x=1 then next_state=s2; else next_state y=0; if x=0 then 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 23 页 - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 定时器 VHDL 设计
限制150内