Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 1.94 KB | None | 0 0
  1.  
  2. module uart(
  3.     input clk,
  4.     input rst,
  5.     input [3:0] bcd0,
  6.     input [3:0] bcd1,
  7.     output tx_out
  8.     );
  9.  
  10. reg [32:0] tx_shr;   // regiszter amibe betöltjük az egy ciklus során küldendő összes bitet  
  11. reg [5:0] tx_cntr;   // ebben a számlálóban tároljuk, hogy a ciklus melyik fázisánál járunk
  12. reg tx_en;           // CLK engedélyező jel a baud rate beállításához
  13. reg [8:0] rg_cntr;   // számláló a baud rate beállításához
  14. reg [0:0] p0;           // paritásbitek    
  15. reg [0:0] p1;
  16. reg tx_outr;
  17.  
  18.  
  19.  
  20.  
  21.  
  22. always @(posedge clk)
  23. if (rst)              // reset esetén alaphelyzetbe állítunk
  24.     begin
  25.         tx_shr<=0;
  26.         tx_cntr<=0;
  27.         tx_en<=0;
  28.         rg_cntr<=0;
  29.         tx_outr<=1;
  30.     end
  31. else
  32.         begin                 // Baud rate beállítása:
  33.         if(rg_cntr==278)      // 57600 bps-hez 278-el kell leosztani a 16 Mhz-es órajelet
  34.             begin
  35.             rg_cntr<=0;
  36.             tx_en<=1;
  37.             end
  38.         else
  39.             begin
  40.             rg_cntr<=rg_cntr+1;
  41.             tx_en<=0;
  42.             end
  43.         end
  44.  
  45. always @(posedge tx_en)
  46.     begin
  47.         if(tx_cntr!=0)
  48.             begin                       // ha nem a ciklus elején vagyunk minden
  49.             tx_outr<=tx_shr[0];   //fázisnál tx_shr következő elemét küldjük a kimenetre
  50.                 tx_shr<=tx_shr>>1;
  51.                 tx_cntr<=tx_cntr-1;
  52.             end
  53.         else         // a ciklus elején feltöltjük a ciklusho tartozó összes bittel tx_shr-t
  54.             begin
  55.                 //bcd1-hez tartozó bitek: stop bit, paritásbit, ASCII kód, start bit
  56.                 tx_shr[10:0]<={1'b1, p1, 4'b0011, bcd1[3:0] ,1'b0};
  57.                 //bcd0-hoz tartozó bitek:
  58.                 tx_shr[21:11]<={1'b1, p0, 4'b0011, bcd0[3:0], 1'b0};
  59.                 //kocsi vissza karakterhez tartozó bitek:
  60.                 tx_shr[32:22]<={1'b1, 1'b0, 8'b00001101, 1'b0};
  61.                        
  62.                 tx_cntr<=32;  //visszaállítjuk a számlálót
  63.                 tx_outr<=1;   //1-be állítjuk a kimenetet
  64.             end
  65.     end
  66.  
  67. always @(bcd0, bcd1)     //bcd0 vagy bcd1 megváltozásakor újraszámoljuk a paritásbiteket
  68. begin
  69.     p0<=~^bcd0;        
  70.     p1<=~^bcd1;
  71. end
  72.  
  73.  
  74. assign tx_out=tx_outr;
  75.  
  76. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement