Vhdl 信号led无法合成,同步描述不好?
我已经创建了一个分频器,我想用FPGA板测试它。为了测试它,我想让led在开关打开的情况下以分频闪烁。问题是,如果时钟不在上升沿,我不知道如何更改led的值 下面是我得到的确切错误: 第51行:信号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
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;