Advertisement
Guest User

Untitled

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