Marc10k
Neuling
Beiträge: 7
|
Erstellt: 02.11.04, 12:38 Betreff: VHDL Schieberegister
drucken
Thema drucken weiterempfehlen
|
|
|
Mein VHLD Programm soll 35 bit (jetzt aber erstmal 7) seriell übertragen nach dem die Run-Taste und der Modus abgefragt wurde. Ich wollte erst die beiden Eingänge abfragen und dann mit jedem Clockzyklus ein bit übertragen. Es werden später beim Sender und Empfänger die gleiche Clock benutzt. Bei ansteigender Flanke werden die Daten geschrieben und bei fallender dann gelesen. Damit das ganze statisch bleibt. Ich habe schon folgendes geschrieben:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sender is Port ( Reset : in std_logic; Run : in std_logic; Mode : in std_logic_vector(1 downto 0); clock : in std_logic; Data : out std_logic); end Sender;
architecture Behavioral of Sender is begin
process (Mode, Run, clock) variable shift_reg: std_logic_vector(6 downto 0):= "1111111"; begin if Run = '1' then case Mode is when "00" => -- good header, data segment 1 and checksum Data <= '1'; for I in 0 to 6 loop shift_reg := "0010010"; if (clock'event and clock = '1') then shift_reg(6 downto 1) := shift_reg (5 downto 0); Data <= shift_reg(6); end if; end loop; when "01" => -- good header, data segment 2 and checksum Data <= '1'; when "10" => -- invalid header, data segment 1, checksum Data <= '1'; when "11" => -- good header, datasegment 2, invalid checksum Data <= '1'; when others => Data <= 'X'; end case; end if; end process; end Behavioral;
Nur leider bekommen ich immer folgende Fehlermeldung: Signal Data cannot be synthesized, bad synchronous description.
Kennt jemand Abhilfe?
Gruss
Marcus
|
|
Dr. Faustus
Administrator
Beiträge: 107 Ort: Aßling
|
Erstellt: 02.11.04, 12:45 Betreff: Re: VHDL Schieberegister
drucken
weiterempfehlen
|
|
|
Probier mal das:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sender is Port ( Reset : in std_logic; Run : in std_logic; Mode : in std_logic_vector(1 downto 0); clock : in std_logic; Data : out std_logic); end Sender;
architecture Behavioral of Sender is begin
process (Mode, Run, clock) variable shift_reg: std_logic_vector(6 downto 0):= "1111111"; begin if (clock'event and clock = '1') then if Run = '1' then case Mode is when "00" => -- good header, data segment 1 and checksum Data <= '1'; for I in 0 to 6 loop shift_reg := "0010010"; shift_reg(6 downto 1) := shift_reg (5 downto 0); Data <= shift_reg(6); end loop; when "01" => -- good header, data segment 2 and checksum Data <= '1'; when "10" => -- invalid header, data segment 1, checksum Data <= '1'; when "11" => -- good header, datasegment 2, invalid checksum Data <= '1'; when others => Data <= 'X'; end case; end if; end if; end process; end Behavioral;
Gruesse,
Michael
|
|
Marc10k
Neuling
Beiträge: 7
|
|