VHDL - 确定计数器周期

时间:2012-08-31 01:57:11

标签: counter vhdl clock frequency period

亲爱的SO知识分子,

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

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

三江源。

1 个答案:

答案 0 :(得分:2)

简答:是的。

答案很长:在FPGA中,您可以编程硬件。您使用的process语句并行运行,而不是作为C / C ++ / etc顺序运行。代码在普通的微处理器上运行。

示例:

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带50MHz时钟)时,进程内的所有三个语句都将同时执行。所有三个信号都将在触发器中实现,因此当传播延迟结束时(请参阅FPGA数据表以获取器件的确切值),所有三个信号都将具有新值。

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