Necesito diseñar un generador de paridad que tenga una línea serie bidireccional. Esta línea acepta la entrada de 1 bit a la vez y da paridad para 8 bits en el 9º ciclo de reloj en la misma línea. Parece que no puedo entender esto bien. ¿Podría alguien guiarme como debería ser mi código? Aquí está mi código hasta ahora, solo necesito poner paridad en la línea bidireccional.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity parity_gen is
port (
Data: inout std_logic;
clk : in std_logic;
rst : in std_logic
);
end parity_gen;
architecture arc of parity_gen is
signal count : integer := 0;
signal temp : std_logic_vector(7 downto 0):="00000000";
signal parity : std_logic:='0';
begin
proc :process(clk) is
begin
if clk'event and clk='1' then
parity <= '0';
temp(7 downto 0) <= Data & temp(7 downto 1);
count <= count + 1;
if count = 8 then
parity <= temp(7) xor temp(6) xor temp(5) xor temp(4) xor temp(3) xor temp(2) xor temp(1) xor temp(0);
count <= 0;
end if;
end if;
end process proc;
-- data <= '1' when count = 9 else 'Z';
end arc;
EDITAR
Probé su código pero no obtuve los resultados esperados. Así que modifiqué mi propio código, pero aún tengo un problema que estoy resaltando.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity parity_gen is
port (
Data: inout std_logic;
clk : in std_logic;
rst : in std_logic
);
end parity_gen;
architecture arc of parity_gen is
signal count : integer;
signal parity : std_logic;
signal temp : std_logic_vector(7 downto 0):="00000000";
begin
proc: process (clk) is
begin
if rst = '1' then
parity <= '0';
count <= 0;
temp <= (others => '0');
--data <= 'Z';
elsif clk'event and clk = '1' then
if count = 9 then
count <= 1;
else
count <= count + 1;
temp(7) <= data;
temp(6 downto 0) <= temp(7 downto 1);
parity <= parity xor data;
end if;
end if;
end process proc;
data <= parity when count = 9 else 'Z';
Como se puede ver en la imagen, la paridad de los 8 bits recibidos se da en el noveno ciclo de reloj. También en el noveno ciclo del reloj la temperatura toma datos. No quiero que se muestreen datos en el registro de temperatura en el noveno ciclo de reloj. Quiero mantener la misma temperatura que el octavo ciclo. En el diagrama, vemos que no está sucediendo en el noveno ciclo, sino que sucede después.