Vhdl 信号led无法合成,同步描述不好?

Vhdl 信号led无法合成,同步描述不好?,vhdl,fpga,xilinx,Vhdl,Fpga,Xilinx,我已经创建了一个分频器,我想用FPGA板测试它。为了测试它,我想让led在开关打开的情况下以分频闪烁。问题是,如果时钟不在上升沿,我不知道如何更改led的值 下面是我得到的确切错误: 第51行:信号led无法合成,同步描述不良。当前软件版本不支持用于描述同步元素(寄存器、内存等)的描述样式。 --> IEEE库; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 实体divi

我已经创建了一个分频器,我想用FPGA板测试它。为了测试它,我想让led在开关打开的情况下以分频闪烁。问题是,如果时钟不在上升沿,我不知道如何更改led的值

下面是我得到的确切错误:

第51行:信号led无法合成,同步描述不良。当前软件版本不支持用于描述同步元素(寄存器、内存等)的描述样式。 -->

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.STD_LOGIC_ARITH.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
实体divizor1是
端口(时钟:在标准逻辑中;
--时钟输出:输出标准逻辑;
btn:标准逻辑中;
led:输出标准逻辑
);
终端实体divizor1;
divizor1的架构divizor_frecv是
信号cnt:std_逻辑_向量(24向下至0);
信号时钟:标准逻辑;
信号bec:标准逻辑;
开始
过程(clk)
开始
如果上升沿(clk),则

cnt错误消息似乎在抱怨您正在使用
cnt
计数器的输出作为时钟

相反,您可以将其用作切换启用和
clk
作为时钟:

--process (clock, btn)
process (clk, btn)
    begin
        -- if btn = '0' then
        if btn = '1' then  -- reset led
            led <= '0';    -- or '1' which ever turns it off
            -- if clock'event and clock = '1' then
        elsif clock = '1' and rising_edge(clk) then -- clock as enable
            -- led <= '1';
            led <= not led;
            -- else
            --     led <= '0';
        end if;

        -- end if;
    end process;
——进程(时钟,btn)
过程(时钟、btn)
开始
--如果btn='0',则
如果btn='1',则--重置led
带路

如果您只想让LED指示时钟脉冲(可能太快而无法检测),您可以直接将时钟路由到LED。您的分频器已经产生非常短的脉冲(通常我们的目标是50%的占空比,这有0.000003%)

我仍然有一个小错误,因为led是一个输出端口,我无法在led上“读取”它的值看到答案“btn的
btn
状态进行了方便的重置,为
led
提供初始值,以便能够使用
非led
。这可能需要将端口信号led设置为模式
inout
,或者您需要一个代理变量或分配给led的信号,以便非led工作(因此led可以读取)”。我可能也有反向的
btn
感测,您可能希望它“0”在重置时保持
led
,无法判断它是常开还是常闭。
--process (clock, btn)
process (clk, btn)
    begin
        -- if btn = '0' then
        if btn = '1' then  -- reset led
            led <= '0';    -- or '1' which ever turns it off
            -- if clock'event and clock = '1' then
        elsif clock = '1' and rising_edge(clk) then -- clock as enable
            -- led <= '1';
            led <= not led;
            -- else
            --     led <= '0';
        end if;

        -- end if;
    end process;
process (clock, btn)
begin
    if btn = '1' then
            if clock'event and clock = '1' then
                led <= '1';
            else
                led <= '0';
            end if;

    end if;
end process;
process (clock)
begin
    if clock'event and clock = '1' then
        led <= btn;
    end if;
end process;