亲爱的 SO 知识分子,
我只是想澄清一些关于确定迭代完整循环所需时间的疑虑。考虑我有一个 50Mhz 时钟,这意味着时钟周期为 20 ns。
现在,如果我有一个从 0 计数到 500 的计数器,这个计数器是否需要 20ns x 500 = 10 us 才能完成整个循环?
谢谢你。
简短的回答:是的。
长答案:在 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。