Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >VHDL边缘检测

VHDL边缘检测
EN

Stack Overflow用户
提问于 2013-07-02 15:12:49
回答 2查看 16.3K关注 0票数 4

我想检测串行数据信号(din)上的边沿。我已经用VHDL语言写了下面的代码,它运行成功,但是边沿是以一个时钟周期延迟检测的,即在每个边沿产生一个clk_50mhz周期延迟的变化输出。有没有人能帮我尽快检测出边缘?谢谢。

代码语言:javascript
运行
AI代码解释
复制
 process (clk_50mhz)
 begin
        if clk_50mhz'event and clk_50mhz = '1' then
            if (rst = '0') then
                shift_reg <= (others => '0');
            else
                shift_reg(1) <= shift_reg(0);
                shift_reg(0) <= din;    
                        end if;      
        end if;
 end process;

    process (clk_50mhz)
    begin
        if clk_50mhz'event and clk_50mhz = '1' then
            if rst = '0' then
                change <= '0' ;
            elsif(clk_enable_2mhz = '1') then
                change <= shift_reg(0) xor shift_reg(1);                    
            end if ;
        end if ;
    end process ;

当我将我的代码改为下面的代码时,我能够检测到边缘

代码语言:javascript
运行
AI代码解释
复制
 process (clk_50mhz)
begin
    if clk_50mhz'event and clk_50mhz = '1' then
        if (RST = '0') then
            shift_reg <= (others=>'0');
        else
            shift_reg(1) <= shift_reg(0);
            shift_reg(0) <= din;    
  end if;     
    end if;
end process;

change <= shift_reg(1) xor din; 
EN

回答 2

Stack Overflow用户

发布于 2013-07-02 15:48:11

这就是你要的

代码语言:javascript
运行
AI代码解释
复制
library ieee;
use ieee.std_logic_1164.all;

entity double_edge_detector is
    port ( 
        clk_50mhz   : in std_logic;
        rst         : in std_logic;
        din         : in std_logic;
        change      : out std_logic
    );
end double_edge_detector;

architecture bhv of double_edge_detector is

signal din_delayed1 :std_logic;

begin
    process(clk_50mhz)
    begin
        if rising_edge(clk_50mhz) then
            if rst = '1' then
                din_delayed1 <= '0';
            else
                din_delayed1 <= din;
            end if;
        end if;

    end process;

    change <= (din_delayed1 xor din); --rising or falling edge (0 -> 1 xor 1 -> 0)


end bhv;
票数 4
EN

Stack Overflow用户

发布于 2013-07-02 16:19:13

您必须使用组合过程来检测差异,而不会导致额外的时钟周期延迟。(您仍然需要一个寄存器来延迟输入。)

代码语言:javascript
运行
AI代码解释
复制
DELAY: process(clk_50mhz)
begin
    if clk_50mhz'event and clk_50mhz = '1' then
        din_reg <= din;
    end if;
end process;

change <= din xor din_reg;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17429280

复制
相关文章
什么时候使用Dockerfiles(什么时候不使用……)
在这篇文章中,我们将讨论一些使用 Dockerfile 的最佳实践,探索一些注意事项,并使用 Dockerfile 和云原生 Buildpacks 构建应用。你将了解每种工具最擅长的工作是什么,以及如何决定何时使用它们。
CNCF
2021/12/15
1.8K0
什么时候使用Dockerfiles(什么时候不使用……)
什么时候,使用Excel?
极力推崇PowerBI是创作PowerBI大师的初衷,虽然从Excel到PowerBI有极其诱人的理由,但我们不可否认的是Excel本身作为全世界最广泛的办公工具它具有不可替代的应用场景。
公众号PowerBI大师
2019/08/07
2K0
什么时候,使用Excel?
我应该在什么时候使用 Apache Druid
许多公司都已经将 Druid 应用于多种不同的应用场景。请访问 使用 Apache Druid 的公司 页面来了解都有哪些公司使用了 Druid。
HoneyMoose
2021/07/24
7080
我应该在什么时候使用 Apache Druid
什么时候使用 CAP?
大多数人很难理解变革。当员工已经习惯了他们操作某个流程的方式时,他们很少会接受创新或改进。然而,我们总是需要变革。无论是提高生产效率,减少浪费,还是提高制造速度,变革都会因多种原因而发生。尽管变革是必要的,但很难确保它们的成功。对于执行过程改进项目的六西格玛专业人员,有一种简单有效的方法可以轻松、顺利地完成变革。本文,与大家讨论CAP方法,它是什么,以及它如何防止新流程失败。
用户9972271
2022/09/14
4020
什么时候应该使用volatile
volatile 修饰符告诉编译程序不要对该变量所参与的操作进行某些优化。在两种特殊的情况下需要使用volatile 修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
杨源鑫
2019/07/22
2.1K0
什么时候使用SWOT分析?
SWOT分析,一种结构化的规划方法,用于评估项目或企业中涉及的优势、劣势、机会和威胁。SWOT分析可以对产品、地点、行业或个人来进行。它包括明确企业或项目的目标,并确定对实现该目标有利和不利的内部和外部因素。
用户9972271
2023/02/22
5230
什么时候使用前置声明
我们可以站在编译器的角度来思考这个问题:当你前置声明一个类型时,编译器就会知道这个类型的存在,但没法知道它的布局、大小、成员…所以我们也把前置声明的类型叫做不完全类型(incomplete type)。
ClearSeve
2022/02/10
8800
什么时候用Goroutine?什么时候用Channel?
什么场景下用channel合适呢? 通过全局变量加锁同步来实现通讯,并不利于多个协程对全局变量的读写操作。 加锁虽然可以解决goroutine对全局变量的抢占资源问题,但是影响性能,违背了原则。 总结:为了解决上述的问题,我们可以引入channel,使用channel进行协程goroutine间的通信。 Go语言中的操作系统线程和goroutine的关系: 一个操作系统线程对应用户态多个goroutine。 go程序可以同时使用多个操作系统线程。 goroutine和OS线程是多对多的关系,即m:n。 Go
王中阳Go
2022/10/26
9900
什么时候使用 useMemo 和 useCallback
性能优化总是会有成本,但并不总是带来好处。我们来谈谈 useMemo 和 useCallback 的成本和收益。
Nealyang
2020/03/15
2.5K0
究竟什么时候该使用MQ?
任何脱离业务的组件引入都是耍流氓。引入一个组件,最先该解答的问题是,此组件解决什么问题。
架构师之路
2020/03/23
6460
究竟什么时候该使用MQ?
JS箭头函数 什么时候用 ,什么时候不能用,我总结出了4点
大家好,我是zz,相信大家平时在码代码中,都知道箭头函数的用法,但是在面试中,让他讲讲箭头函数的用法,都讲的很片面,通过阅读本文,我们带大家系统的总结下箭头函数,形成自己的箭头函数的知识结构,这样在面试是面试官问到就小菜一碟。
玖柒的小窝
2021/09/24
1.3K0
什么时候才应该使用HBase?
在使用HBase一定要明白HBase的适用场合,因为HBase并非适用于每种情况。 首先,要确认有足够多的数据存入HBase。 如 果有几亿或者几十亿条记录要存入HBase,那么HBase就是一个正确的选择;否则如果你仅有几百万条甚至更少的数据,那么HBase当然不是正确的选 择,这种情况下应当选择传统的关系型数据库,因为如果这么少的数据存入HBase,就会导致数据堆积在一两个节点上,而HBase集群内部的其他节点都处 于空闲状态。 其次,要确认即便不使用传统关系型数据库提供的额外功能(比如数据库的列有强类
cloudskyme
2018/03/20
1.2K0
到底什么时候该使用MQ?
一、缘起 一切脱离业务的架构设计与新技术引入都是耍流氓。 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。 就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。 最近分享了几篇MQ相关的文章: 《MQ如何实现延时消息》 《MQ如何实现消息必达》 《MQ如何实现幂等性》 不少网友询问,究竟什么时候使用MQ,MQ究竟适合什么场景,故有了此文。 二、MQ是干嘛的 消息总线(Message Queue),后文称MQ,是一种跨进程的通
架构师之路
2018/03/01
2.4K0
到底什么时候该使用MQ?
守护线程是什么_守护线程什么时候结束
守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。
全栈程序员站长
2022/11/03
6980
R变量索引 - 什么时候使用 @或$
单细胞分析经常用到Seurat包,整个分析过程中的中间结果都在一个Seurat对象中存储。常需要从里面提取对应数据进行后续分析,有时会用$,有时会用@,怎么选择呢?
生信宝典
2019/12/11
1.5K0
什么时候使用@Controller和@RestController
而@RestController注解就是@ResponseBody + @Controller合在一起的作用。
余生大大
2022/11/02
4370
什么时候调用layoutSubviews
如果你想强制更新布局,不要直接调用此方法。你可以调用setNeedsLayout方法;如果你想立即数显你的views,你需要调用layoutIfNeeded方法。
全栈程序员站长
2022/09/13
4390
Python异步: 什么时候使用异步?(3)
从广义上讲,Asyncio 是新的、流行的、讨论广泛的和令人兴奋的。然而,对于何时应该在项目中采用它存在很多困惑。
数据科学工厂
2023/02/27
1K0
Python异步: 什么时候使用异步?(3)
Python异步: 什么时候使用异步?(3)
从广义上讲,Asyncio 是新的、流行的、讨论广泛的和令人兴奋的。然而,对于何时应该在项目中采用它存在很多困惑。
数据科学工厂
2023/01/28
1.1K0
什么时候索引失效
强制走索引 使用explain执行计划看,走的那个查询范围是什么,影响行数是多少,是否走了全表查询
2021/09/07
3330

相似问题

我什么时候使用fabs,什么时候使用std::abs就足够了?

40

质量对ROI -什么时候足够好,足够好?

89

在创建GeoSeries时,我什么时候需要使用GeoDataFrame,什么时候列表就足够了?

116

我什么时候使用ByteString,什么时候不使用?

23

我什么时候能打破混叠规则?

46
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档