Vhdl ISE XILINX PhysDesignRules:367-信号<&燃气轮机;这是不完整的。该信号不会驱动设计中的任何负载销
我正在尝试连接一个带有PS/2端口的键盘和basys 2的端口,其中显示8个LED中按键的ASCII码。有以下警告: 警告:Xst:2109-在电路操作过程中,闩锁的内容从未改变。闩锁被移除,信号绑定到值XXXXXXXX。Vhdl ISE XILINX PhysDesignRules:367-信号<&燃气轮机;这是不完整的。该信号不会驱动设计中的任何负载销,vhdl,xilinx-ise,Vhdl,Xilinx Ise,我正在尝试连接一个带有PS/2端口的键盘和basys 2的端口,其中显示8个LED中按键的ASCII码。有以下警告: 警告:Xst:2109-在电路操作过程中,闩锁的内容从未改变。闩锁被移除,信号绑定到值XXXXXXXX。 警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载销。 警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载销。 警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载
警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载销。
警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载销。
警告:PhysDesignRules:367-信号不完整。该信号不会驱动设计中的任何负载销。
警告:Par:288-信号ps2data_IBUF没有负载。PAR将不会尝试路由这个信号。 警告:Par:288-信号ps2clk_IBUF没有负载。PAR将不会尝试路由这个信号。 警告:Par:288-信号CLK_IBUF无负载。PAR将不会尝试路由这个信号。 警告:Par:283-此设计中有3个空载信号。此设计将导致Bitgen发出DRC警告 守则:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity teclado is
Port (
ps2data : in STD_LOGIC;
datoslcd : out STD_LOGIC_VECTOR (7 downto 0);
CLKINT : in STD_LOGIC;
ps2clk : in STD_LOGIC
);
end teclado;
architecture Behavioral of teclado is
signal start: std_logic;
signal paridad : std_logic;
signal stop : std_logic;
signal datos : STD_LOGIC_VECTOR (7 downto 0);
signal vpar : std_logic;
signal reset: std_logic;
signal enablevalidador : std_logic;
signal timeoutor : std_logic;
signal teclacorrecta,resetvalidador: std_logic;
signal tecla : std_logic_vector(7 downto 0);
signal datostemp : std_logic_vector (10 downto 0);
signal contador : integer range 0 to 10;
signal enable : std_logic;
signal contador2 : integer range 0 to 10;
signal cont_divdefreq : integer range 0 to 3000;
signal clkdiv : std_logic;
begin
-------------------------------------------
-------registro de dezplazamiento----------
-------------------------------------------
start <= datostemp(10);
datos <= datostemp(9) & datostemp(8) & datostemp(7) & datostemp(6) & datostemp(5) & datostemp(4) & datostemp(3) & datostemp(2);
paridad <= datostemp(1);
stop <= datostemp(0);
process (ps2data, ps2clk)
begin
if ps2clk'event and ps2clk = '1' then
datostemp(0) <= datostemp(1);
datostemp(1) <= datostemp(2);
datostemp(2) <= datostemp(3);
datostemp(3) <= datostemp(4);
datostemp(4) <= datostemp(5);
datostemp(5) <= datostemp(6);
datostemp(6) <= datostemp(7);
datostemp(7) <= datostemp(8);
datostemp(8) <= datostemp(9);
datostemp(9) <= datostemp(10);
datostemp(10) <= ps2data;
end if;
end process;
-------------------------------------
------ verificador de paridad--------
-------------------------------------
process (datos, paridad)
begin
if((datos(0) xor datos(1) xor datos(2) xor datos(3) xor datos(4) xor datos(5) xor datos(6) xor datos(7)) = paridad) then
vpar <= '1';
else
vpar <= '0';
end if;
end process;
------------------------------
-------contador 0 a 10--------
------------------------------
enablevalidador <= enable;
process (ps2clk, reset)
begin
if reset = '1' then
contador <= 0;
enable <= '0';
else
if ps2clk'event and ps2clk ='1' then
contador <= contador + 1;
enable <= '0';
if contador >= 10 then
contador <= 0;
enable <= '1';
else
contador <= contador;
enable <= '0';
end if;
else
contador <= contador;
enable <= enable;
end if;
end if;
end process;
-----------------------------
----------time out-----------
-----------------------------
process (ps2clk, clkdiv)
begin
if ps2clk'event and ps2clk = '1' then
if clkdiv'event and clkdiv = '1' then
contador2 <= contador2 + 1 ;
if contador2 >= 4 then
timeoutor <= '1' ;
contador2 <= 0;
else
timeoutor <= '0';
contador2 <= contador2;
end if;
end if;
end if;
end process;
process (CLKINT)
begin
if CLKINT'event and CLKINT ='1' then
cont_divdefreq <= cont_divdefreq + 1;
if cont_divdefreq > 1249 then
cont_divdefreq <= 0;
clkdiv <= not clkdiv;
end if;
end if;
end process;
--------------------------------
----------validador-------------
--------------------------------
process (enablevalidador, start, stop,vpar)
begin
if enablevalidador='1' then
if (start = '0') and (stop = '1') and (vpar = '1') then
teclacorrecta <= '1';
resetvalidador <= '0';
else
teclacorrecta <= '0';
resetvalidador <= '1';
end if;
else
teclacorrecta <= '0';
resetvalidador <= '0';
end if;
end process;
---------------------------------
---------memoria tecla-----------
---------------------------------
process (teclacorrecta, datos)
begin
if teclacorrecta'event and teclacorrecta = '1' then
tecla <= datos;
end if;
end process;
-------------------------------------
-----codificador tecla a ascii-------
-------------------------------------
process (tecla)
begin
if tecla = "00011100" then
datoslcd <= "01000001";
elsif tecla = "00110010" then
datoslcd <= "01000010";
else
datoslcd <= "00000000";
end if;
end process;
--------------------------
-------or reset-----------
--------------------------
reset <= timeoutor or resetvalidador;
end Behavioral;
请请格式化您的代码。首先编写一个测试台并模拟它。您可能会发现导致代码无效的错误。。。synth工具有权消除死机逻辑,而死机逻辑什么也不做,这会导致类似于下面的错误消息。Simulate first是一个很好的规则,原因有很多,包括这一条。虽然我同意Brian的观点,但这段代码确实起到了作用。在“memoria tecla”部分中,您显然试图使用
teclacorrecta
作为时钟(顺便提一下,我不建议这样做),在这种情况下datos
不应在灵敏度列表中。XST将您的进程转换为闩锁而不是寄存器,并且已知闩锁会导致许多奇怪的行为。我会用一个带PS/2数据过采样的单时钟进程来完成这项工作。请格式化您的代码。先编写一个测试台并进行模拟。您可能会发现导致代码无效的错误。。。synth工具有权消除死机逻辑,而死机逻辑什么也不做,这会导致类似于下面的错误消息。Simulate first是一个很好的规则,原因有很多,包括这一条。虽然我同意Brian的观点,但这段代码确实起到了作用。在“memoria tecla”部分中,您显然试图使用teclacorrecta
作为时钟(顺便提一下,我不建议这样做),在这种情况下datos
不应在灵敏度列表中。XST将您的进程转换为闩锁而不是寄存器,并且已知闩锁会导致许多奇怪的行为。我会用一个带PS/2数据过采样的单时钟进程来实现这一点。
NET "datoslcd[0]" LOC = M5;
NET "datoslcd[1]" LOC = M11;
NET "datoslcd[2]" LOC = P7;
NET "datoslcd[4]" LOC = N5;
NET "datoslcd[3]" LOC = P6;
NET "datoslcd[5]" LOC = N4;
NET "datoslcd[6]" LOC = P4;
NET "datoslcd[7]" LOC = G1;
NET "CLK" LOC = B8;
NET "ps2clk" LOC = B1;
NET "ps2data" LOC = C3;