如何解决将 1 秒时钟转换为 0.1 秒时钟
我有一个 50 MHz 时钟的 fpga 板,我有这个功能可以将信号转换为 1 秒时钟。我想知道我应该进行哪些调整才能获得 0.1 秒而不是 1 秒的输出。
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity clk_gen is
port(
clk_50M: in std_logic;
clk_1s: out std_logic
);
end clk_gen;
architecture arch of clk_gen is
signal p_reg: unsigned(31 downto 0);
constant PHA: unsigned(31 downto 0):= x"00000056";
begin
-- ddfs for 1-sec pulse (based on 50 MHz clk)
process(clk_50M)
begin
if (clk_50M'event and clk_50M='1') then
p_reg <= p_reg + PHA;
end if;
end process;
clk_1s <= p_reg(31);
end arch;
非常感谢任何帮助,谢谢!
解决方法
一个 50Mhz 的 FPGA 时钟意味着每秒有 50,000,000 (50e6) 个时钟边沿。
因此,如果您想要 1/10 秒,只需将 50 Mhz 时钟除以 10 即可获得获得 0.1 秒延迟所需通过的时钟边沿总数。
50,000 / 10 = 5,000 个时钟边沿
我不确定你的 VHDL 是做什么的;没有计数器或值的更改...
简单描述应该做什么...
process(50_Mhz)
begin
if rising_edge(50_Mhz) then
if counter < 5000000 then
counter <= counter + 1;
else
counter <= 0; -- when it get's here .1 seconds have passed
end if;
end if;
当然这并不完整。您必须适当地声明变量并在 0.1 秒过后切换您想要的信号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。