2

在过去的几天里,我一直在寻找一种为项目编写一点 VHDL 的方法,该方法将允许我触发一组数据的处理并传输结果。我正在使用的设备可以开始收集第二组数据,同时为我的 FPGA 传输完整的第一组数据提供服务,我想通过流水线来利用这一点,但我没有成功。

要触发收集,我需要以特定顺序发送一组特定的信号。在几个时钟周期和来自 FPGA 的信号之后,完整的集合然后从设备的几个端口输出。我的目标是让整个过程由一个简单的输入脉冲启动,并且在第一个脉冲的分配仍在发生的同时,有可能发生第二个脉冲。有没有办法让我发送第一组信号,然后再发送信号以输出数据,同时为第二个集合发送第一组信号,如果这有意义的话?

这是我的意思的图片。

时序图(可点击)

如您所见,来自集成 1 的数据是在第二甚至第三集成阶段发送的。load_pulse 是请求在 上输出数据的信号,DATA它可能会在发送积分 2 的第二组信号时发生很久。

这是我写的一些测试VHDL,看看是否可以通过一个简单的过程:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity test is
    port(
        x : in STD_LOGIC;
        y : out STD_LOGIC := '0';
        z : out STD_LOGIC := '0'
    );
end test;

architecture test_behav of test is
begin

    process(x) is
    begin

        y <= '0', '1' after 10 NS, '0' after 20 ns;
        z <= '0', '1' after 30 NS, '0' after 40 ns;

    end process;
end test_behav;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testbench is
end testbench;

architecture testbench_behav of testbench is

    component test is
        port(
            x : in STD_LOGIC;
            y : out STD_LOGIC;
            z : out STD_LOGIC
        );
    end component test;

    signal x : STD_LOGIC := '0';
    signal y : STD_LOGIC := '0';
    signal z : STD_LOGIC := '0';

begin

    testo: component test
        port map(
            x => x,
            y => y,
            z => z
        );

    x <= '1' after 25 ns;

end testbench_behav;

在此示例中,我在其信号分配仍在执行时触发该进程。这里的结果是原来的信号分配被中断,新的信号分配在之后完成x <= '1' after 25 ns,你可以在这里看到:

代码模拟(可点击)

有没有办法做到这一点,你可以向我解释或指出我的解释,或者我需要采取另一种方法吗?

谢谢

4

0 回答 0