Suche Projekt mit Lothar Miller RS232 - Modul

Gast #3687326
Lesenswert?

but y? schrieb:
> wieso nicht einfach das von seiner seite nehmen und einfach die UCF
> passend machen?



Habe ein neues Projekt aufgesetzt und das Modul von der Seite eingefügt.

Jedoch weis ich nicht, wie ich das TOP-Level-Modul konfiguriere muss, 
damit ich das RS232 - Modul verwenden kann.
Gast #3687353
Lesenswert?

Nur falls ich das Projekt erweitern möchte,
würde ich trotzdem gern ein TOP-Level anlegen.

Kann mir jemand sagen, was ich dann dort und im UCF-File
eintragen muss, damit es funktioniert?


Danke schonmal!

Gruss
Gast #3687359
Lesenswert?

TXRX schrieb:
> Jedoch weis ich nicht, wie ich das TOP-Level-Modul konfiguriere muss,
> damit ich das RS232 - Modul verwenden kann.

Wenn Du das nicht weißt, dann weißt Du es auch bei einer simplen 
UND-Komponente nicht. Am besten Du schaust dir eines der vielen 
VHDL-Tutorials an.
Gast #3687366
Lesenswert?

> Deswegen würde mir ein Beispielprojekt sehr helfen. ;)
Nein. Eben nicht. Ein Beispiel ist eben nur ein Beispiel.
Du brauchst erstmal das grundlegende Wissen.

Nachtigall, so blöd sind wir auch schon, dass wir wissen wie man sich 
Arbeit spart.
Gast #3687375
Lesenswert?

Bitflüsterer schrieb:
> Nein. Eben nicht. Ein Beispiel ist eben nur ein Beispiel.
> Du brauchst erstmal das grundlegende Wissen.
>
> Nachtigall, so blöd sind wir auch schon, dass wir wissen wie man sich
> Arbeit spart.

Naja,

vll. hat doch jemand etwas für mich oder kann mir zumindest zeigen,
wie ich das ucf-File konfig. muss.

Danke!
#3687514
Lesenswert?

Hmm.., ich habe hier eine geänderte für mich.

Mit dem Switch kann ich Daten senden zum PC :
TX_Data  : in   STD_LOGIC_VECTOR (7 downto 0); --8 Switch

Und die empfangenen Daten werden am DE1 an den LED ausgegeben:
RX_Data  : out  STD_LOGIC_VECTOR (7 downto 0); -- 8 LED
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4

5
entity RS232_tx_rx is
6
    Generic ( Quarz_Taktfrequenz : integer   := 50000000; 
7
              Baudrate           : integer   := 9600
8
             ); 
9
    Port ( RXD      : in   STD_LOGIC;
10
           RX_Data  : out  STD_LOGIC_VECTOR (7 downto 0); -- LEDG        
11
           TXD      : out  STD_LOGIC;
12
           TX_Data  : in   STD_LOGIC_VECTOR (7 downto 0);
13
           CLK      : in   STD_LOGIC
14
           );
15
end RS232_tx_rx;
16

17
architecture Behavioral of RS232_tx_rx is
18
signal txstart : std_logic := '0';
19
signal txsr    : std_logic_vector  (9 downto 0) := "1111111111"; 
20
signal txbitcnt : integer range 0 to 10 := 10;
21
signal txcnt    : integer range 0 to (Quarz_Taktfrequenz/Baudrate)-1;
22
signal TX_Busy  : STD_LOGIC :='0';
23
signal TX_Start : STD_LOGIC :='0';
24

25
type rx_state_t is (IDLE, BUSY, READY);
26
signal rx_state : rx_state_t := IDLE;
27
signal rxd_sr   : std_logic_vector (3 downto 0) := "1111";         
28
signal rxsr     : std_logic_vector (7 downto 0) := "00000000";    
29
signal rxbitcnt : integer range 0 to 9 := 9;
30
signal rxcnt    : integer range 0 to (Quarz_Taktfrequenz/Baudrate)-1; 
31
signal rx_en  : STD_LOGIC :='0';
32

33
signal c : integer range 0 to 9000000 := 0; 
34

35
begin
36
  process
37
  begin
38
    wait until rising_edge(CLK);   
39
      if (c<9000000 ) then        
40
        c <= c+1; 
41
        Tx_Start <= '0';         
42
      else                         
43
        c <= 0;                                       
44
        Tx_Start <= '1';        
45
      end if;   
46
  end process; 
47
  
48
  process
49
  begin
50
    wait until rising_edge(CLK);
51
      txstart <= TX_Start;
52
      if (TX_Start='1' and txstart='0') then 
53
         txcnt    <= 0;                      
54
         txbitcnt <= 0;                      
55
         txsr     <= '1' & TX_Data & '0';    
56
      else
57
         if(txcnt<(Quarz_Taktfrequenz/Baudrate)-1) then
58
            txcnt <= txcnt+1;
59
         else  
60
            if (txbitcnt<10) then
61
              txcnt    <= 0;
62
              txbitcnt <= txbitcnt+1;
63
              txsr     <= '1' & txsr(txsr'left downto 1);
64
            end if;
65
          end if;
66
       end if;    
67
  end process;
68
  TXD     <= txsr(0); 
69
  TX_Busy <= '1' when (TX_Start='1' or txbitcnt<10) else '0';
70
 
71
  process
72
  begin
73
    wait until rising_edge(CLK);   
74
    rxd_sr <= rxd_sr(rxd_sr'left-1 downto 0) & RXD;
75
    RX_en  <= '0';
76
    
77
    case rx_state is
78
      when IDLE => -- warten auf Startbit
79
        if (rxd_sr(3 downto 2) = "10") then                 
80
          rxcnt    <= ((Quarz_Taktfrequenz/Baudrate)-1)/2; 
81
          rxbitcnt <= 0;
82
          rx_state <= BUSY;
83
        end if;
84
      when BUSY =>
85
        if (rxbitcnt<9) then  
86
          if(rxcnt<(Quarz_Taktfrequenz/Baudrate)-1) then 
87
            rxcnt    <= rxcnt+1;
88
          else
89
            rxcnt    <= 0; 
90
            rxbitcnt <= rxbitcnt+1;
91
            rxsr     <= rxd_sr(rxd_sr'left-1) & rxsr(rxsr'left downto 1); 
92
          end if;
93
        else
94
          rx_state <= READY;
95
        end if;
96
      when READY =>
97
        RX_Data  <= rxsr;
98
        rx_state <= IDLE;   
99
    end case;
100
  end process;  
101

102
end Behavioral;

Gruss
#3687521
Lesenswert?

Du kannst meines Wissens nach die pins in quartus mit dem pin Planner 
zuweisen, oder eine csv Datei mit den Zuordnungen importieren.

Ich habe es noch nciht gemacht, nur mal gelesen, weil ich mich für 
Altera interessiere. Du kannst mal nach DE1 csv pins o.ä. suchen bzgl. 
der Konfigurationsdatei. (Hat für mich irgendwie den Vorteil, dass man 
die auch weiterbenutzen kann ohne immer pin Planner zu benutzen, denn 
die Hardware ändert sich beim üben ja i.d.R. nicht)

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