0

我正在尝试使用 VHDL 对可能在预设时间范围内进入 FPGA 的信号实施巧合检查,我担心我可能正在尝试发明一些已经做过很多次的非常基本的东西......

所需的模块功能:

记住其中一个输入上有一个信号,在预设时间段后,将这些记住的信号视为同步信号,并将它们进一步发送到电路中。

示例:侦听 2 个输入端口 (A,B),以防在输入上检测到至少一个 10 ns 长的信号,将其存储,并在 500ns 周期内进一步发送存储的信号并复位。

到目前为止,我想出了这个:

存储输入:

memory_A <= A when ( memory_A = '0' );
memory_B <= B when ( memory_B = '0' );

现在我需要进一步发送它们并重置。我有一个模块,它以 500ns 的间隔为我提供 10ns 长脉冲,所以我将使用它的输出来为我的进程计时:

process(pulse)
  begin
     if(pulse'event and pulse='1') then
                                          -- generate output signals
        modified_output_A <= memory_A
        modified_output_B <= memory_B
                                          -- reset the storage
        memory_A <= '0'
        memory_B <= '0'
     end if;

  end process;

我将把它包装成一个模块

输入:A、B 和脉冲
输出:modified_A、modified_B。

现在我得到了同步的 A、B 信号,我可以应用逻辑(检查巧合等)。

我的问题是:

  • 这行得通吗?

  • 这是一个好方法吗,有什么我可能看不到的缺点或问题吗?

  • 如果这不是做到这一点的好方法,应该如何做到这一点?

感谢您提前提供所有反馈/帮助。

4

1 回答 1

1

看起来您在memory_Amemory_B上有多个驱动程序。您应该只在此过程中分配它们。

另外我不确定在非时钟信号上使用信号'事件是否是好的设计实践。可能取决于您的综合工具。我会使用时钟过程并通过移位寄存器获得上升沿。或者它们不应该是时钟寄存器输出吗?

我也错过了重置和时钟信号;)

于 2012-07-03T11:33:12.707 回答