关于上升沿和下降沿触发

以一个计数器为例:

 

 
  
1 --------------------------------------------------------------------------------
2   -- Created by : Vorx Ltd.com
3   -- Filename : edge.vhd
4   -- Author : ChenYong
5   -- Created On : 2010 - 11 - 02 13 : 17
6 -- Last Modified : 2010 - 11 - 02 13 : 51
7 -- Update Count : 2010 - 11 - 02 13 : 17
8 -- Description : 关于上升沿和下降沿触发的讨论
9 -- q 输出为对 pulse 跳变沿的递增计数。clock 为系统高速时钟。
10 --
11 --------------------------------------------------------------------------------
12
13 library ieee;
14 use ieee.std_logic_1164. all ;
15 use ieee.std_logic_arith. all ;
16 use ieee.std_logic_unsigned. all ;
17
18 entity edge is
19 port
20 (
21 clock: in std_logic ;
22 pulse: in std_logic ;
23 q: out std_logic_vector ( 3 downto 0 )
24 );
25 end prot;
26
27 architecture arc of edge is
28
29 signal dly1pul : std_logic ;
30 signal dly2pul : std_logic ;
31 signal en : std_logic ;
32 signal cnt : std_logic_vector ( 3 downto 0 ): = ( others => ' 0 ' );
33
34 begin
35 Process(clock) begin
36 if rising_edge (clock) then
37 dly1pul <= pulse;
38 dly2pul <= dly1pul;
39 end if ;
40 End process ;
41
42 en <= dly1pul and not dly2pul; -- 上升沿
43 -- en <= not dly1pul and dly2pul; -- 下降沿
44 -- en <= dly1pul xor dly2pul; -- 上升沿和下降沿
45
46 Process(clock) begin
47 if rising_edge (clock) then
48 if en = ' 1 ' then
49 cnt <= cnt + 1 ;
50 end if ;
51 end if ;
52 End process ;
53
54 q <= cnt;
55
56 end arc;
57

 

 

一些设计中,动辄采用某一信号作为时钟,应该说这种做法是欠妥的。因为不是全局时钟的时钟信号最大扇出是有限的,其很难保证时钟延时应小于信号延时的基本要求。当遇到要对某个信号的跳变沿处理时,建议采用上述小例子中 en 信号的处理办法。

 

转载于:https://www.cnblogs.com/ifys/archive/2010/11/02/edge.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值