Forum: FPGA, VHDL & Co. Test_FSM_Sender


von harri (Gast)


Lesenswert?

hallo zusammen,
ich möchte die Leute fragen, die Ahnung in VHDL haben, ob diesen Code 
richtig von der Funktionalität ist.Da beim simulieren Fehler gibt.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity sender is
    Port ( clk     : in  STD_LOGIC;
           reset  : in  STD_LOGIC;
           parin  : in  STD_LOGIC_VECTOR (7 downto 0);
           serout : out  STD_LOGIC);
end sender;

architecture Behavioral of sender is

type state_type is (senden, pause );
signal state   : state_type;

signal delaycnt : integer range 0 to 9999;
signal bitcnt : integer range 0 to 8;
signal bits  : std_logic_vector(7 downto 0);

begin
    process (clk, reset,parin)
  begin
    if reset = '1' then
      state <= senden;
      delaycnt <= 0; -- Bitdelay zurücksetzen
      bitcnt <= 8;  -- 8 Bits sind zu übertragen
      bits <= parin;
      elsif (clk'EVENT and clk='1') then
      case state is
        when senden =>
            if (bitcnt/=0) then     -- sind noch Bits übrig?
              bits <= '0' & (bits(7 downto 1));
              bitcnt <= bitcnt-1;
              serout <= bits(0);
              else
              state <= pause;
            end if;

        when pause =>
            if (delaycnt/=9999) then   -- 1 ms vorbei?
              delaycnt <= delaycnt+1; -- nein: weiterzählen
              else
              delaycnt <= 0;
              state <= senden ;
            end if;
      end case ;
    end if ;
   end process;
end Behavioral;


danke euch im voraus.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

harri schrieb:
> hallo zusammen,
> ich möchte die Leute fragen, die Ahnung in VHDL haben, ob diesen Code
> richtig von der Funktionalität ist.Da beim simulieren Fehler gibt.
Wenn das Simulieren Fehler gibt ist der Code nicht 'richtig' in seiner 
Funktionalität.

von harri (Gast)


Lesenswert?

ja, richtig ist ja nicht sonst hätte ich nicht gefragt !!!
aber woran es liegt weiss ich leider nicht !!
 Danke auf jedenfall...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Da beim simulieren Fehler gibt.
Welchen Fehler?
Dieser Code gibt, nachdem der Reset inaktiv wurde, sofort mit jedem Takt 
ein Bit (von insgesamt 9 Bits) aus. Danach wird (laut Kommentar) 1 ms 
gewartet. Und dann wird im Zustand senden bis zum nächsten Reset 
gewartet.

Abgesehen davon, dass das Laden der Zähler und Register nicht asynchron 
erfolgen sollte (unsaubere Designpraxis), könnte man sich das Warten 
nach dem Senden sparen...

Oder sollte nach jedem einzelnen Bit 1 ms gewartet werden?

von harri (Gast)


Lesenswert?

hi Lothar,
das sollte eigentlich die 8Bit serielle senden und dann in den Zustand 
Pause sollte 1ms warten und danach sollte das spielschen von Anfang 
wiederholen.

beim simulieren lässt sich eingentlich nicht simulieren.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

harri schrieb:
> beim simulieren lässt sich eingentlich nicht simulieren.
Gibts einen Fehler? Oder wie?

von Frank (Gast)


Lesenswert?

ES gibt kein Unterschied zwischen 'lässt sich simulieren ' und 'gibt 
Fehler beim simulieren'.

aber danke für dein Hinweise.

von Frank (Gast)


Lesenswert?

ist erledigt.funktioniert sowie es sein soll.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank schrieb:
> ist erledigt.funktioniert sowie es sein soll.
Na toll...  :-/
Schön wäre jetzt nur noch, dem Forum zu sagen woran es gelegen hat. 
Nur so können andere was davon lernen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.