2

如何在时钟信号的上升沿设置位并在时钟信号的下降沿重置该位?我想知道我怎样才能做到这一点。根据我想在上升沿设置并在下降沿重置的条件。这就像在输出端获得时钟脉冲一样。

我实现了两个不同的时钟脉冲,但我遇到了这样的故障。

在此处输入图像描述

我的代码是这样的

process(clk)
begin 
   if rising_edge(clk) then
      d0 <= new_data;
   end if;
end process;

process(clk)
begin 
   if falling_edge(clk) then
      d1 <= new_data;
   end if;
end process;

out <= d0 when clk = '1' else d1;

在此处输入图像描述

4

3 回答 3

1

如果你想要 DDR 数据,这是我唯一能看到你真的想要这样做的时候,有很多建模方法。如果您想要综合,请实例化适当的供应商原语

但是,对于模型:

process(clk)
begin
   -- you could use this
   if clock'event = '1' then
      bit <= new_data;
   end if;
   -- or this
   if rising_edge(clk) ot falling_edge(clk) then
     bit <= new_data;
   end if;
end process;

您还可以将其建模为 2 个进程和一个多路复用器

process(clk)
begin 
   if rising_edge(clk) then
      d0 <= new_data;
   end if;
end process;

process(clk)
begin 
   if falling_edge(clk) then
      d1 <= new_data;
   end if;
end process;

out <= d0 when clk = '1' else d1;
于 2013-09-06T16:23:00.290 回答
0

现在已经看到了您的波形,您可以执行以下操作来获得无毛刺脉冲序列

process(clk)
begin
    if falling_edge(clk) then
       if pass_next_clock = '1' then
          mask <= '1';
       else
          mask <= '0';
       end if;
    end if;
end process;

pulse <= clk and mask;

这需要您有一个名为 pass_next_clock 的信号,该信号可以与任一时钟沿对齐,以表示您希望输出下一个时钟高脉冲。

于 2013-09-06T22:40:04.753 回答
0

好的,我得到了它的工作。我的最终代码看起来像

shared variables d0 ,d1 : std_logic;
process(clk)
begin 
   if rising_edge(clk) then
      d0 := new_data;
   end if;
end process;

process(clk)
begin 
   if falling_edge(clk) then
      d1 := new_data;
   end if;
end process;

out <= d0 when clk = '1' else d1;

最终波形

于 2013-09-07T02:36:58.443 回答