触发器在两个信号的边沿触发

2024-01-23

我需要一个对两个不同信号的边缘做出反应的触发器。像这样的东西:

if(rising_edge(sig1)) then
    bit <= '0';
elsif(rising_edge(sig2)) then
    bit <= '1';
end if;

这样的触发器是否存在或者我可以使用其他一些技术? 我需要它可以在 Xilinx Virtex-5 FPGA 上综合。 谢谢


在这种情况下,我通常要做的是保留两个控制信号的延迟版本,并在每个信号的上升沿生成一个时钟宽的脉冲。然后,我将使用这些脉冲来驱动微型 FSM 来生成“位”信号。下面是一些 VHDL。

--                                         -*-vhdl-*-
--  Finding edges of control signals and using the
-- edges to control the state of an output variable
--

library ieee;
use ieee.std_logic_1164.all;

entity stackoverflow_edges is
  port ( clk  : in std_ulogic;
     rst  : in std_ulogic;
     sig1 : in std_ulogic;
     sig2 : in std_ulogic;
     bito : out std_ulogic );

end entity stackoverflow_edges;

architecture rtl of stackoverflow_edges is

  signal sig1_d1  , sig2_d1   : std_ulogic;
  signal sig1_rise, sig2_rise : std_ulogic;

begin 

  -- Flops to store a delayed version of the control signals
  -- If the contorl signals are not synchronous with clk,
  -- consider using a bank of 2 delays and using those outputs
  -- to generate the edge flags
  delay_regs: process ( clk ) is 
  begin 
    if rising_edge(clk) then
      if rst = '1' then 
        sig1_d1 <= '0';
        sig2_d1 <= '0';
      else
        sig1_d1 <= sig1;
        sig2_d1 <= sig2;
      end if;
    end if;
  end process delay_regs;


  -- Edge flags
  edge_flags: process (sig1, sig1_d1, sig2, sig2_d1) is
  begin
    sig1_rise <= sig1 and not sig1_d1;
    sig2_rise <= sig2 and not sig2_d1;
  end process edge_flags;

  -- Output control bit
  output_ctrl: process (clk) is
  begin 
    if rst = '1' then
      bito <= '0';
    elsif sig1_rise = '1' then
      bito <= '1';
    elsif sig2_rise = '1' then
      bito <= '0';
    end if;
  end process output_ctrl;

end rtl;

我对 verilog 更熟悉,所以仔细检查这个 VHDL(任何评论都表示赞赏)。

波形 http://img33.imageshack.us/img33/893/stackoverflowvhdlq.png http://img33.imageshack.us/img33/893/stackoverflowvhdlq.png

该代码假设时钟足够快以捕获所有控制信号脉冲。如果控制信号与时钟不同步,我会保留一个further延迟控制信号的延迟版本(例如sig_d2)然后制作标志sig_d1 and sig_d2.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

触发器在两个信号的边沿触发 的相关文章

  • VHDL:IEEE std_logic 库中的真值表

    我研究了 IEEE 如何定义其库 当我打开的时候标准逻辑库 我看到了一些被定义为常数的真值表 我不知道真值表是如何运作的 请解释如何使用真值表返回结果 这是我找到的 AND 门 TYPE stdlogic table IS ARRAY st
  • 我需要多少个进程来监视两个信号?

    我是一名 vhdl 初学者 需要帮助解决我的问题 我有两个需要监控的信号 一个是 CHECK 另一个是 OK 每次我要求检查时 我都应该得到好的结果 高或低 我需要连续监测6个连续的CHECK脉冲 并计数OK 如果我有 6 OK 低 那么我
  • VHDL 中的行为模型程序和数据流模型程序之间的混淆

    我正在使用 Douglas L Perry 所著的教科书 VHDL 示例编程 第四版 他在第 4 页给出了 Dataflow 编程模型的示例 Code I ENTITY mux IS PORT a b c d IN BIT s0 s1 IN
  • VHDL乘法器

    library IEEE use IEEE STD LOGIC 1164 ALL entity Lab3 Adder1 is Port cin in STD LOGIC a in STD LOGIC VECTOR 3 downto 0 b
  • VHDL:进程块内的多个上升沿检测

    我对 VHDL 以及一般的数字电路 还很陌生 我正在尝试使用 BCD 样式块实现两位数的计数器 该电路的外部有一些按钮 按下这些按钮时 会将感兴趣的数字加一 很像闹钟 这是一个异步操作 会在某种形式的编辑模式下发生 外部强制 我编写的代码在
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 如何在 Sphinx 运行时预处理源文件?

    我已经为我的项目设置了 Sphinx 文档 并希望提取源文件的文档字符串并将它们嵌入到最终文档中 不幸的是 Sphinx 不支持源文件的语言 VHDL VHDL 似乎没有 Sphinx 域 所以我的想法如下 挂钩 Sphinx 运行并在 S
  • Doxygen:使用 C++ 和 VHDL 进行项目的无缝文档

    我正在建立一个关于某种库的文档 该库由 C C 部分和 VHDL 部分以及一些仅包含 doxygen 的指导性页面组成 他们必须被放入一个独立的组中 到目前为止一切正常 漂亮又蓬松 但是如果我想通过使用优化 vhdl 子目录中的输出怎么办O
  • 将整数转换为 std_logic

    假设你有一个循环 for i in 1 downto 0 loop for j in 1 downto 0 loop tS0 lt i 但我需要将整数 这是自然的 转换为 std logic tS0被声明为 std logic 我只做了一位
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • 使用 1 位 ALU 制作 16 位 ALU

    你好 我正在尝试从几个 1 位 ALU 创建一个 16 位 ALU 我创建了一个名为 basic alu1 的包 其中包含 1 位 ALU 的组件 其代码是 library ieee use ieee std logic 1164 all
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 全8位加法器,非逻辑输出

    我创建了一个带全加器的 8 位加法器 正如您所看到的 我开始从右到左添加相应的位 对于 cin 信号 t1 和 t2 并按顺序 cout t2 和 t1 第一个 cin 设置为加法器输入 cin 我在实现中没有看到任何问题 但是当我运行它时
  • VHDL 中的进程是可重入的吗?

    一个进程是否可以连续运行两次或多次VHDL 如果在进程的顺序执行未完成的情况下发生另一个事件 在敏感信号列表上 会发生什么 有可能还是我的VHDL流程中的模型完全错误 进程运行时不会发生任何事件 当进程被事件唤醒时 它会运行到完成 结束进程
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允
  • 在单周期数据路径中加载半字和加载字节

    有人询问如何在单周期数据路径中实现加载字节而无需更改数据存储器 解决方案如下 替代文本 http img214 imageshack us img214 7107 99897101 jpg http img214 imageshack us
  • FPGA 系统中的同步与异步复位

    我刚开始使用各种不同的模块创建 FPGA 系统来驱动 I2C 总线 尽管我认为这个问题适用于任何 FPGA 系统 并且所有模块都使用同步复位 这些模块使用时钟分频器模块进行计时 该模块获取系统时钟并向系统的其余部分输出较低的频率 我遇到的问
  • VHDL STD_LOGIC_VECTOR 通配符值

    我一直在尝试用 VHDL 代码为我在 Altera DE1 板上实现的简单 16 位处理器编写有限状态机 在有限状态机中 我有一个CASE处理不同 16 位指令的语句 这些指令由 16 位 STD LOGIC VECTOR 带入 FSM 但
  • 信号和端口在“箭头”的哪一侧=>

    我如何知道端口 信号 值应放置在箭头的哪一侧 我注意到通过切换port a gt x to x lt port a这看起来非常平等 但我遇到了错误 还 x gt port a不起作用 我什至不知道箭头应该指向哪个方向 lt 是一个分配 具体

随机推荐

  • UTF-8 的多字节安全 wordwrap() 函数

    PHP s wordwrap https www php net wordwrap对于 UTF 8 等多字节字符串 该函数无法正常工作 评论中有一些mb安全函数的例子 但是根据一些不同的测试数据 它们似乎都存在一些问题 该函数应采用与以下完
  • Ionic Android 构建停止工作

    更新 Ionic 和 Cordova CLI 后 我的 Ionic Cordova 应用程序突然停止在 Android 上构建 过去两天我在谷歌上搜索解决方案 但找不到任何有帮助的东西 我假设这与 Cordova 现在使用 Gradle 来
  • 根据字段的值使用不同的 Pydantic 模型

    我有 2 个 Pydantic 模型 var1 and var2 输入的PostExample方法可以接收第一个模型或第二个模型的数据 指某东西的用途Union有助于解决这个问题 但在验证过程中 它会引发第一个和第二个模型的错误 如何做到在
  • 计算减法后剩余多边形的算法

    我有一个大多边形 Pa 多边形内部有很多小 洞 如图 以下是开孔的几个条件 孔不能互相重叠 孔不能超出外多边形 然而 这些洞can触摸多边形的外边 如何高效地获取剩余的多边形 或多边形列表 最简单的方法 蛮力方法 是采取Pa 并通过减去孔逐
  • json.Unmarshal 不返回解码数据[重复]

    这个问题在这里已经有答案了 我在解组从 a 读取的 json 数据时遇到问题 json file type redisConfig struct host string password string func loadRedisConfi
  • 我可以为主键设置ignore_dup_key吗?

    我的表上有一个两列主键 我试图改变它来设置ignore dup key继续使用此命令 ALTER INDEX PK mypk on MyTable SET IGNORE DUP KEY ON 但我收到这个错误 Cannot use inde
  • 循环依赖最佳实践

    我目前正在编写一个网络爬虫 它从互联网上检索信息 简化后看起来像这样 数据访问项目 检索原始数据的对象 将原始数据解析为对象的对象 解析器返回的实体 现在 我正在创建实际的解析器 我将像这样使用它 using Application Dat
  • 为什么我在 Android 设备上无法接收来自 GCM 的消息

    我正在创建一个 android 应用程序 我需要在其中发送 gcm 消息 到目前为止我设法得到设备ID并将其发送到我的服务器 现在 当我尝试将消息从服 务器推送到我的应用程序时 我收到以下消息 multicast id 4987023356
  • EXC_BAD_ACCESS,代码 1,iOS 7.0.x 64 位设备

    我目前正在开发的应用程序在模拟器上完美运行 但自从 Xcode 升级到 5 1 后 我在设备上运行应用程序时遇到问题 如果我在任何 iOS 上的任何非 64 位设备上运行应用程序 它都可以正常运行 但如果我在 64 位设备 iPhone 5
  • 硒页面对象。如何从外部源读取@FindBy定位器?

    我只能在页面对象 FindBy 注释中使用硬编码值 但我想动态解析定位器 public class LoginPage extends BasePage hardocded value works ok FindBy name login
  • 如何正确解析在 ASP.NET Core 3.1 中的ConfigureServices() 中使用的服务?

    我有一个基于 ASP NET Core 3 1 的应用程序 在应用程序启动期间 在ConfigureServices IServiceCollection services 我想注册我的服务 但在配置服务期间 我想根据数据库中找到的设置启动
  • 如何在 Quartz.Net 中让 Job 引发 EventHandler?

    我有一个实例化 Quartz Scheduler 的控制台应用程序 我希望作业能够引发事件处理程序 以便 母应用程序 调用特定的方法 问题是 Job 类似乎与外部类明显是相当隔离的 我确信有一个好方法可以做到这一点 但我还没有偶然发现它 p
  • 如何使用 Visual Studio 2010 从源代码构建 MFC 库

    Visual Studio 历史上始终包含 MFC 库作为源 因此您可以使用提供的 makefile 自行构建它 但在 Visual Studio 2010 中没有 MFC 的 makefile 那么 如何重建它呢 MS 上有文档暗示 ma
  • 使用 jquery 添加和删除 div 的样式属性

    我继承了我正在从事的一个项目 并且正在更新一些 jquery 动画 很少使用 jquery 练习 我有一个 div 需要添加和删除样式属性 这是 div div 在动画中的某个时刻 我需要为其添加一种样式 div 我四处搜寻并找到了 rem
  • 使用 JPL 查询 Prolog 变量

    我想通过JPL进行查询以在java中使用Prolog 我阅读了文档 http www swi prolog org packages jpl java api getting started html prolog 谓词如下 child o
  • 如何避免标题后立即分页

    我有一个 HTML 4 01 CSS 2 1 文档 其中包含一个 H3 标题 后跟一个短 一行 段落块 然后是一个包含多个项目的无序列表 h3 Heading h3 p Some things p ul li Thing one li li
  • PowerShell 和 MS Access 数据库

    我们想使用 PowerShell 创建 AD 用户 使用 CSV 这不是问题 使用脚本就很容易 下一级我们希望使用 PowerShell 和 MS Access 数据库创建 AD 用户 现在我们遇到以下问题 我们可以读取 Access 数据
  • Android 异常 - 来源未知(可能是小部件)

    我有以下 Android 异常 这是由 Bugsense 报告的 我无法找到它来自哪里 因为没有引用我的应用程序的任何类 java lang IndexOutOfBoundsException 无效索引 0 大小为 0 在java util
  • google-maps-sdk-ios - iOS 版 Google 地图 1.4.3 的 arm 7/iphone 5 问题

    我在让我的应用程序引用 iOS 版 Google 地图 1 4 3 sdk 时遇到问题 arm7 和 7s 似乎存在问题 尽管它在模拟器上运行良好 但它拒绝安装到设备 iphone 5 上 我相信我已经遵循了 google 文档中的 API
  • 触发器在两个信号的边沿触发

    我需要一个对两个不同信号的边缘做出反应的触发器 像这样的东西 if rising edge sig1 then bit lt 0 elsif rising edge sig2 then bit lt 1 end if 这样的触发器是否存在或