Forum: FPGA, VHDL & Co. RS232 : signal TX_Start : STD_LOGIC :='0'; nach dem Empfang auf '1' setzen ?


von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.
Dieses RS232 funtioniert mit senden und empfangen.
Beim empfangen kommen die Daten fließend an und werden mit 8 LED 
angezeigt.
Beim senden habe ich vorher TX_Start auf '1' gesetzt ob es funktioniert.

Wie kann ich das Senden am besten machen bzw wie kann man dieses :
signal TX_Start : STD_LOGIC :='0';
so setzen das es nach dem Empfang auf '1' geht und nach dem senden des 
Byte auf '0' geht.

Danke.
Gruss

1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity RS232 is
6
    Generic ( Quarz_Taktfrequenz : integer   := 50000000;  -- Hertz 
7
              Baudrate           : integer   :=  9600      -- Bits/Sec
8
             ); 
9
    Port ( RXD : in   STD_LOGIC;
10
           TXD : out  STD_LOGIC;
11
           CLK : in   STD_LOGIC;
12
     LED : out  STD_LOGIC_VECTOR (7 downto 0)      
13
           );
14
end RS232;
15
16
architecture Behavioral of RS232 is
17
18
signal txstart  : std_logic := '0';
19
signal txsr     : std_logic_vector  (9 downto 0) := "1111111111";  -- Startbit, 8 Datenbits, Stopbit
20
signal txbitcnt : integer range 0 to 10 := 10;
21
signal txcnt    : integer range 0 to (Quarz_Taktfrequenz/Baudrate)-1;
22
23
signal rxd_sr   : std_logic_vector (3 downto 0) := "1111";         -- Flankenerkennung und Eintakten
24
signal rxsr     : std_logic_vector (7 downto 0) := "00000000";     -- 8 Datenbits
25
signal rxbitcnt : integer range 0 to 9 := 9;
26
signal rxcnt    : integer range 0 to (Quarz_Taktfrequenz/Baudrate)-1; 
27
28
signal RX_Data  : STD_LOGIC_VECTOR (7 downto 0);
29
signal RX_Busy  : STD_LOGIC;
30
signal TX_Data  : STD_LOGIC_VECTOR (7 downto 0) := "01000011";
31
signal TX_Start : STD_LOGIC :='0';
32
signal TX_Busy  : STD_LOGIC;
33
34
begin
35
   -- Senden
36
   process begin
37
      wait until rising_edge(CLK);
38
      txstart <= TX_Start;
39
      if (TX_Start='1' and txstart='0') then -- steigende Flanke, los gehts
40
         txcnt    <= 0;                      -- Zähler initialisieren
41
         txbitcnt <= 0;                      
42
         txsr     <= '1' & TX_Data & '0';    -- Stopbit, 8 Datenbits, Startbit, rechts gehts los
43
      else
44
         if(txcnt<(Quarz_Taktfrequenz/Baudrate)-1) then
45
            txcnt <= txcnt+1;
46
         else  -- nächstes Bit ausgeben  
47
            if (txbitcnt<10) then
48
              txcnt    <= 0;
49
              txbitcnt <= txbitcnt+1;
50
              txsr     <= '1' & txsr(txsr'left downto 1);
51
            end if;
52
         end if;
53
      end if;
54
   end process;
55
   TXD     <= txsr(0);  -- LSB first
56
   TX_Busy <= '1' when (TX_Start='1' or txbitcnt<10) else '0';
57
   
58
   -- Empfangen
59
   process begin
60
      wait until rising_edge(CLK);
61
      rxd_sr <= rxd_sr(rxd_sr'left-1 downto 0) & RXD;
62
      if (rxbitcnt<9) then    -- Empfang läuft
63
         if(rxcnt<(Quarz_Taktfrequenz/Baudrate)-1) then 
64
            rxcnt    <= rxcnt+1;
65
         else
66
            rxcnt    <= 0; 
67
            rxbitcnt <= rxbitcnt+1;
68
            rxsr     <= rxd_sr(rxd_sr'left-1) & rxsr(rxsr'left downto 1); -- rechts schieben, weil LSB first
69
         end if;
70
      else                                                   -- warten auf Startbit
71
         if (rxd_sr(3 downto 2) = "10") then                 -- fallende Flanke Startbit
72
            rxcnt    <= ((Quarz_Taktfrequenz/Baudrate)-1)/2; -- erst mal nur halbe Bitzeit abwarten
73
            rxbitcnt <= 0;
74
         end if;
75
      end if;
76
   end process;
77
   RX_Data <= rxsr;
78
   LED     <= RX_Data;
79
   RX_Busy <= '1' when (rxbitcnt<9) else '0';
80
81
end Behavioral;

von Bitflüsterer (Gast)


Lesenswert?

Du kannst jetzt endlich mal, (ein paar Schimpfworte vom Moderator 
gelöscht), ein VHDL-Buch lesen und aufhören hier ständig 'rumzunerven 
mit Deinem Pipifax und kopiertem Code.

: Bearbeitet durch Moderator
von Uwe (Gast)


Lesenswert?

Jetzt mach da endlich ne Statemachine rein (Zustandsautomat).
Auch FSM genannt (nicht das Fliegende Spaghettimonster).
http://vhdlguru.blogspot.de/2010/04/how-to-implement-state-machines-in-vhdl.html

von Thomas T. (knibbel)


Lesenswert?

Bitflüsterer schrieb:
> Du kannst jetzt endlich mal, (ein paar Schimpfworte vom Moderator gelöscht), ein 
VHDL-Buch lesen und
> aufhören hier ständig 'rumzunerven mit Deinem Pipifax und kopiertem
> Code.

Das ist zwar überreagiert und krass ausgedrückt, trifft den Kern der 
Sache aber dennoch.

Die Fragen, welche "Funkheld" hier stellt, sind nicht wirklich 
problembezogene Fragen, sondern schlicht und einfach Arbeitsverteilung, 
der Wunsch das jemand anders sein gestecktes Ziel löst ...

Wenn man sich die Threads anschaut, die "Funkheld" bis jetzt eröffnet 
hat, dann kann man nur zu dem Schluß kommen, dass sowohl das Verständnis 
für die Sprache fehlt (daher ist der Hinweis auf ein VHDL-Buch schon 
sehr passend) als auch offensichtlich Grundlagen für Digitaltechnik 
nicht da sind.

Und der Hinweis von anderen Forenteilnehmern nach FSM, Blockrams, 
VGA-Cores, etc. macht die Sache nur noch schlimmer, da sich "Funkheld" 
im Moment wie ein Ruderer auf einem See verhält, der allerdings mit 
seinen Paddeln nur wild rumrudert und nicht gezielt in eine Richtung 
paddelt, sprich: Endlich anfängt, die Sprache zu lernen.

Mein Tipp: Grundlagen! Grundlagen in der digitalen Schaltungstechnik, 
angefangen bei logischen Verknüpfungen. Diese dann mit dem DE1 
nachbilden. Dazu sind dort schon Schalter und Taster und LEDs vorhanden. 
Lass doch den Blödsinn, externe Schalter anschließen zu wollen, wenn Du 
noch nicht einmal weisst, welches Signal du an deren Eingang setzt.

Wenn Du dann OHNE NACHZUSCHLAGEN deine ersten VHDL-Beschreibungen 
alleine(!) auf die Reihe bekommst, dann ist es Zeit für Serielles und 
VGA. Aber so? Wo soll das denn noch hinführen?

Bei der Fülle der eröffneten Beiträge frage ich mich auch langsam, ob 
das nicht unter Spam fällt... (und hier steht kein Smily am Ende!)

Und dann noch andere Forenteilnehmer beleidigen? Du erwartest ernsthaft 
noch Antworten?

Kopfschüttelnd,
Thomas

: Bearbeitet durch Moderator
von Bitflüsterer (Gast)


Lesenswert?

@ Peter Bierbach

Wenn Du wüsstest, wieviel Alkohol ich tatsächlich trinke...

Kleiner Auszug aus der Funkhelden-Hölle:

16.04.2014 topic/330992 *Du fragst nach einem VHDL-Buch und bekommst den 
Reichard/Schwarz genannt.*

16.04.2014 topic/331011 Endet damit das Du auf die Tutorials und den 
Reichardt/Schwarz verwiesen wirst, wofür Du Dich noch bedankst.

16.04.2014 topic/330934 Verweis auf Lothar Millers Seite.

16.04.2014 topic/330999 Keine Besonderheiten.

16.04.2014 topic/330953 Thread schläft ein.

16.04.2014 topic/331015 Erneuter Hinweis auf Reichardt/Schwarz. Hinweis 
auf ein Youtube-Video.

16.04.2014 topic/331002 Du wirst auf ein VHDL-Buch von Ashenden 
hingewiesen

16.04.2014 topic/330952 Halb genervte Erklärung das VHDL keine 
Programmiersprache ist.

17.04.2014 topic/331081 Endet damit, das Lothar Miller, unser 
anerkannter VHDL-Spezi nachfrag, ob Du eigentlich die Antworten liest.

17.04.2014 topic/331079 Findest nur mit Hilfe den Schaltplan für Dein 
Board

18.04.2014 topic/331139 Verweis auf Dokus von Altera. Die X-te Erklärung 
das VHDL eine Beschreibungssprache ist.

18.04.2014 topic/331145 Genervter Hinweis auf Literatur.

19.04.2014 topic/331279 Es wird Dir eine Schulung empfohlen.

19.04.2014 topic/331261 Hinweis von Lothar Miller Dir endlich mal ein 
Buch zu kaufen. Vorschlag eines Standard-Antwort-Textes für Deine 
Fragen.

22.04.2014 topic/331491 Verweis auf eine ganze Reihe von Online-Quellen, 
Tutorials und wieder mal der gute Reichardt/Schwarz

23.04.2014 topic/331688 Nichts bemerkenswertes.

24.04.2014 topic/331712 Hilfe von mir und erneuter Hinweis auf 
Reichardt/Schwarz.

Davon 80% absoluter Urschleim. Was an sich ja nicht weiter schlimm ist. 
Du bist auch nicht unhöflich oder so. Aber DU NERVST!

von Peter B. (funkheld)


Lesenswert?

---17.04.2014 topic/331079 Findest nur mit Hilfe den Schaltplan für Dein
Board---
Da gibt es kein Schaltplan mit Spannungswerten usw...

Gruss

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


Lesenswert?

Peter Bierbach schrieb:
> Da gibt es kein Schaltplan mit Spannungswerten usw...
Nein. Ab einem bestimmten Punkt und Schwierigkeitsgrad muss der geneigte 
Entwickler (oder der es werden will) einfach selber mal nachdenken. Wer 
sich die Spannungswerte nicht aus dem Datenblatt herleiten kann, der hat 
die nötige Reife für die aktuelle Aufgabe noch nicht erreicht.

Peter Bierbach schrieb:
> Dieses RS232 funtioniert mit senden und empfangen.
Wundert mich nicht, das ist ja von mir. Ein Link hätte allerdings auch 
gereicht...

> Beim empfangen kommen die Daten fließend an und werden mit 8 LED
> angezeigt.
> Beim senden habe ich vorher TX_Start auf '1' gesetzt ob es funktioniert.
Tut es.

> Wie kann ich das Senden am besten machen bzw wie kann man dieses :
> signal TX_Start : STD_LOGIC :='0';
> so setzen das es nach dem Empfang auf '1' geht und nach dem senden des
> Byte auf '0' geht.
Was willst du denn versenden? Woher kommen die Daten? Willst du einfach 
zurück senden, was angekommen ist?

: Bearbeitet durch Moderator
von Peter B. (funkheld)


Lesenswert?

Hmmm...
---------------------------
Was willst du denn versenden? Woher kommen die Daten? Willst du einfach
zurück senden, was angekommen ist?
---------------------------

Es werden Daten in verschiedenen Abständen zum DE1 gesendet zum 
Auswerten und darstellen auf den VGA-Monitor(VGA Darstellung vom DE1 
klappt) und auch wieder andere Daten vom DE1 zum PC. Darum meine Frage.

Das wechselseitige Regeln geht nicht über die seriellen Steuerpins, weil 
nur RX und TX bei mir am DE1 zur Verfügung steht ohne die andere 
Steuerpins von der seriellen Schnittstelle.

Gruss

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


Lesenswert?

Peter Bierbach schrieb:
> Das wechselseitige Regeln geht nicht über die seriellen Steuerpins
Die Flusssteuerung mit CTS, DTR und Co ist bei einem FPGA sicher 
unnötig, weil dort die Daten sicher schnell genug weggeschafft werden 
können.

Und auch sonst ist sicher jeder PC in der Lage, die verwendete Baudrate 
von 9600/s ohne Handshake zu verarbeiten.

Ich sehe also noch nicht, wo das Problem sein sollte.

Und insgesamt gilt was bko gesagt hat:
Also ich bitte doch stets höflich in den Umgangformen zu bleiben, wie 
hier in diesem Beispiel:
http://www.youtube.com/watch?v=7LgWlAUnW9w

: Bearbeitet durch Moderator
von Peter B. (funkheld)


Lesenswert?

Hmmm... es geht nur zum Test um die 9600 später sollen es 115000 werden.

Gruss

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.