首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个信号边沿触发的触发器

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

Stack Overflow用户
提问于 2009-08-19 18:08:49
回答 1查看 3.6K关注 0票数 4

我需要一个能在两个不同信号边缘反应的触发器。如下所示:

代码语言:javascript
复制
if(rising_edge(sig1)) then
    bit <= '0';
elsif(rising_edge(sig2)) then
    bit <= '1';
end if;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-20 19:17:58

在这种情况下,我通常要做的是保持两个控制信号的延迟版本,并在每个信号的上升沿产生一个时钟宽度的脉冲。然后我会用这些脉冲来驱动一个微小的有限状态机来产生“位”信号。下面是一些VHDL。

代码语言:javascript
复制
--                                         -*-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 (任何评论)。

waveforms http://img33.imageshack.us/img33/893/stackoverflowvhdlq.png

此代码假设时钟足够快,可以捕获所有控制信号脉冲。如果控制信号与时钟不同步,我会保留延迟控制信号的进一步延迟版本(例如sig_d2),然后从sig_d1sig_d2生成标志。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1301673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档