1

亲爱的 SO 知识分子,

我只是想澄清一些关于确定迭代完整循环所需时间的疑虑。考虑我有一个 50Mhz 时钟,这意味着时钟周期为 20 ns。

现在,如果我有一个从 0 计数到 500 的计数器,这个计数器是否需要 20ns x 500 = 10 us 才能完成整个循环?

谢谢你。

4

1 回答 1

2

简短的回答:是的。

长答案:在 FPGA 中,您对硬件进行编程。您使用的process语句并行运行,而不是像 C/C++/等那样按顺序运行。代码在一个普通的微处理器上。

例子:

signal sig_a : UNSIGNED(3 downto 0) := (others => '0');
signal sig_b : SIGNED(7 downto 0) := (others => '0');
signal sig_c : std_logic := '0';

process(clk)
begin
    if(rising_edge(clk)) then
        sig_a <= sig_a + 1;
        sig_b <= sig_b - 1;
        sig_c <= not sig_c;
    end if;
end process;

每当您收到一个时钟信号(每 20ns 和 50 MHz 时钟),进程内的所有三个语句都将同时执行。所有三个信号都将在触发器中实现,因此当传播延迟结束时(请参阅您的 FPGA 数据表以获取您设备的确切值),所有三个信号都将具有它们的新值。

因此,该过程不会“等待”语句完成,而是由时钟“触发”。这将在时钟的每个上升沿发生,因此要执行 500 次语句,您需要 500 个时钟周期 = 50 MHz 时的 10 us。

于 2012-08-31T07:05:15.297 回答