Vhdl 将1秒时钟转换为0.1秒时钟

Vhdl 将1秒时钟转换为0.1秒时钟,vhdl,fpga,Vhdl,Fpga,我有一个50兆赫时钟的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 si

我有一个50兆赫时钟的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;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体clk_gen是
港口(
时钟50米:标准逻辑;
时钟1:输出标准逻辑
);
完九龙根;;
clk_gen的建筑拱门是
信号p_reg:无符号(31至0);
常数PHA:无符号(31到0):=x“00000056”;
开始
--1秒脉冲的ddfs(基于50 MHz时钟)
工艺(clk_50M)
开始
如果(clk_50M'事件和clk_50M='1'),则

p_reg50Mhz FPGA时钟意味着每秒有50000000(50e6)个时钟边缘

因此,如果你想要1/10秒,只需将你的50 Mhz时钟除以10,就可以得到需要通过的时钟边缘总数,从而获得0.1秒的延迟

50000000/10=5000000时钟边缘

我不确定你的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;
过程(50_Mhz)
开始
如果上升沿(50兆赫兹),则
如果计数器<5000000,则

计数器您是否了解算法,即此代码的作用?如果是,请向我解释一下,我相信你会的。因为如果你这样做了,你应该能够自己解决这个问题,如果你不这样做,你有很多东西要学。你不能期望我们为你做你的工作。我认为你的代码什么都做不了,因为p_reg(其他=>'U')会一直保持(其他=>'U')。。。你需要的是一个频闪发生器。