我正在尝试使用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信号我可以应用逻辑(检查巧合等)。
我的问题是:
这会起作用吗?
这是一个很好的方法,有没有我可能没有看到的缺点或捕获?
如果这不是一个好方法,应该怎么做?
提前获得所有反馈/帮助。
答案 0 :(得分:1)
看起来您在 memory_A 和 memory_B 上有多个驱动程序。 你应该只在过程中分配它们。
此外,我不确定在非时钟信号上使用信号'事件是否是一个好的设计做法。 可能取决于你的综合工具。我会使用一个时钟进程并通过移位寄存器获得上升沿。 或者它们不应该是时钟寄存器输出?
我也错过了复位和时钟信号;)