RS-232 mit Bitsampling

Moderator (Firma: Titel) Persönliche Seite #3968910
Lesenswert?

VHDLer schrieb:
> Die Siumlation läuft gut  aber es gibt eine Bit-Verschiebung.
Dann läuft sie als nicht gut, oder?
Wo ist die TB zur Waveform? Und wo genau sollte man da jetzt schauen? 
Was sind das alles für Signale? Haben die auch Namen oder ist das ein 
Ratespiel?

> Wenn einer oder der andere Vorschläge hat
Ich hätte da was... ;-)

1.
1
use IEEE.STD_LOGIC_ARITH.ALL;
2
use IEEE.STD_LOGIC_UNSIGNED.ALL;
3
use IEEE.NUMERIC_STD.all;
Niemals alle drei zusammen! Die letzte reicht locker aus...
Siehe den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" und viele 
Andere...

2.
1
        COUNT1_SIM      : OUT INTEGER RANGE 0 TO 519;
2
        COUNT2_SIM      : OUT INTEGER RANGE 0 TO 1560;
3
        COUNT3_SIM      : OUT INTEGER RANGE 0 TO 2603;
4
        COUNT4_SIM      : OUT INTEGER RANGE 0 TO 3645;
5
        COUNT5_SIM      : OUT INTEGER RANGE 0 TO 4686;
6
        BIT_COUNT2_SIM    : OUT INTEGER RANGE 0 TO 9;
7
        FLAG_SIM        : OUT STD_LOGIC;
8
        OFFSET_SIM      : OUT INTEGER RANGE 0 TO 199;
9
        RECEIVE_COUNT_SIM  : OUT INTEGER RANGE 0 TO 5207;
10
        NOADD_COUNT_SIM    : OUT INTEGER RANGE 0 TO 2 := 2;
11
        FILL_COUNT_SIM    : OUT INTEGER RANGE 0 TO 7 := 0;
Wozu Ports für solche Signale? Mit dem Simulator kann man auch interne 
Signale von instantiierten Modulen ansehen. Einfach mal ein wenig mit 
den Listen/Bäumen links am Rand herumklicken...

3.
1
            zCLK <= not zCLK;
So werden keine Takte erzeugt. Überhaupt sollte so ein Anfängerdesign 
nur 1 einzigen Takt enthalten. Wenn man unbedingt in höchster Not 
mehrere Takte braucht, dann verwendet man die Taktmanager im FPGA.

Auf den zweiten Blick: Glück gehabt, der zCLK ist gar kein Takt sondern 
nur ein Clock-Enable und trägt zu Unrecht diesen großen Namen "CLK" in 
sich...

4.
1
      :
2
      ELSIF (RISING_EDGE(CLK)) THEN
3
            CASE STATE2 is
4
                      
5
                    WHEN IDLE2 =>
6
                        ...
7
                        IF (RXD   = '0' AND zCLK = '0') THEN
8
                        ...                
9
                                        CASE RXD IS
RXD ist ein asynchrones Signal, das in eine FSM geht. Jedes asynchrone 
Signal MUSS einsynchronisiert werden. Siehe das dort:
http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren

5.
DIESE AUSUFERNDE GROSSSCHREIBEREI BRINGT EINEM JA DIE KRÄTZE ANS AUGE!

6.
Warum ist dein RS232 Modul so unübersichtlich, aufwändig (so viele 
Ressourcen/Flipflops für die Zähler!) und umständlich?
(Warum) wurdest du gezwungen, das so zu machen?

Ich würde da mal damit kontern:
http://www.lothar-miller.de/s9y/categories/42-RS232
http://www.lothar-miller.de/s9y/archives/60-RS232-IO.html#extended

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren