我是 VHDL 的新手,正在尝试为可编程 FPGA 制作延迟/门应用程序,延迟和门输出长度可调。一旦接收到输入信号,这个东西应该忽略任何其他输入,直到门信号的生成完成。
我想稍后将此组件用于 8 个不同的输入和 8 个不同的输出,并通过写入寄存器的方式为每个单独设置所需的延迟/门参数。
当试图在 Quartus II v 11.0 中编译时,我收到了这个错误:
错误 (10821):clkgen.vhd(46) 处的 HDL 错误:无法推断“control_clkgen”的寄存器,因为它的行为与任何支持的寄存器模型都不匹配
还有
错误 (10822):clkgen.vhd(37) 处的 HDL 错误:无法在此时钟沿实现分配寄存器
不知道出了什么问题,这是组件的代码:
library ieee;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_arith.all;
use IEEE.Std_Logic_unsigned.all;
ENTITY clkgen is
port(
lclk : in std_logic;
start_clkgen : in std_logic;
gate_clkgen : in std_logic_vector(31 downto 0);
delay_clkgen : in std_logic_vector(31 downto 0);
output_clkgen : out std_logic
);
END clkgen ;
ARCHITECTURE RTL of clkgen is
signal gate_cycles_clkgen : std_logic_vector(32 downto 0);
signal delay_cycles_clkgen : std_logic_vector(32 downto 0);
signal total_cycles_clkgen : std_logic_vector(32 downto 0);
signal counter_clkgen : std_logic_vector(32 downto 0);
signal control_clkgen : std_logic;
begin
gate_cycles_clkgen <= '0' & gate_clkgen;
delay_cycles_clkgen <= '0' & delay_clkgen;
total_cycles_clkgen <= gate_cycles_clkgen + delay_cycles_clkgen;
start_proc: process(lclk, start_clkgen)
begin
if (start_clkgen'event and start_clkgen = '1') then
if control_clkgen = '0' then
control_clkgen <= '1';
end if;
end if;
if (lclk'event and lclk = '1') then
if control_clkgen = '1' then
counter_clkgen <= counter_clkgen + 1;
if (counter_clkgen > delay_cycles_clkgen - 1 AND counter_clkgen < total_cycles_clkgen + 1) then
output_clkgen <= '1';
elsif (counter_clkgen = total_cycles_clkgen) then
counter_clkgen <= (others => '0');
output_clkgen <= '0';
control_clkgen <= '0';
end if;
end if;
end if;
end process start_proc;
END RTL;
非常感谢您的帮助。