在VHDL中处理流水线?

时间:2016-04-19 23:08:47

标签: vhdl fpga timing pipelining

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

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

这是我的意思的图片。

Timing Diagram(点击)

如您所见,集成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之后完成,如您所见:

Simulation of Code(点击)

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

由于

0 个答案:

没有答案