代码之家  ›  专栏  ›  技术社区  ›  Kelvin Kalariya

VHDL:无法将系统时钟(Sys\U Clk)分配给信号

  •  1
  • Kelvin Kalariya  · 技术社区  · 7 年前

    这里我上传了模拟结果。在突出显示的部分,应将sys\U clk分配给两个信号

    我编写了vhdl代码,用于在定义的sclk\U 1和sclk\U 2信号上延迟一段时间后分配系统时钟(Sys\U clk)。

    当代码运行并执行时,在计数器计数25次后的模拟中,这两个信号的状态仅显示为高(逻辑电平高),而不是系统时钟(Sys\U Clk)。

    我使用的是Artix 7 Basys-3板,其系统时钟为100MHZ。

    有人能帮助我如何在定义的信号上分配系统时钟(Sys\U Clk)??

    architecture Behavioral of Power_Sequence is
    signal counter : integer := 0;
    signal sclk_1 : std_logic := '0';
    signal sclk_2 : std_logic := '0';
    
    begin
    
    process(Sys_Clk)
    
    begin
    
        if(Sys_Clk 'event and Sys_Clk = '1') then
            if(resetb = '0')then
                sclk_1 <= '0';
                sclk_2 <= '0';
            else
                counter <= counter + 1;
                if (counter > 24 and counter < 50) then
                sclk_1 <= Sys_Clk;
                sclk_2 <= Sys_Clk;
                end if;
            end if;
         end if;    
    end process;
    end Behavioral;
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   FabienM    7 年前

    您的代码无法工作。 行之间正在处理的代码:

        if(Sys_Clk 'event and Sys_Clk = '1') then
    ...
        end if;
    

    将在Sys\U clk上升时执行。此时,Sys\U Clk的值为“1”!然后,如果在信号sclk\U tp和sclk\U bt上复制它,它将始终复制“1”。

    要使其工作,您必须在如下异步过程中分配sclk\U tp和sclk\U bt信号:

    sclk_tp <= Sys_Clk when (counter > 24 and counter < 50) else '0';
    

    只需使用同步过程进行计数。

    [编辑]

    正如Paepbels所解释的,上面的这条线并不是制作时钟选通的好方法。您可以在上找到解释 this stackoverflow response 用于冷却浇口。