Advertisement
Guest User

Untitled

a guest
Oct 25th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer: Visnovszky Lilla
  5. //
  6. // Create Date:    11:31:51 10/25/2014
  7. // Design Name:
  8. // Module Name:    uart
  9. // Project Name: uart
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module uart(    //be- és kimenetek a mérési útmutató alapján
  22.     input clk, 
  23.     input rst,
  24.     input [3:0] bcd0,   //a kétjegyű szám alsó helyiértéke
  25.     input [3:0] bcd1,   //a kétjegyű szám felső helyiértéke
  26.     output tx_out
  27.     );
  28.  
  29. reg [32:0] tx_shr;// 3 karakter->3*11 hosszúságú tároló regiszter
  30. reg [5:0] tx_cntr;  // az átviteli ciklus számlálója ?????????????????
  31. wire tx_en; // órajel engedélyező jel, 57600 bps átviteli sebességhez
  32. reg [8:0] oszto;//órajel osztó számláló regisztere, 278->2^9->9 bit kell
  33.  
  34. //tx_en előállítása 57600 bps sebességhez:
  35. always@(posedge clk)
  36.     if(tx_en|rst)   //az rst jel ezt a számlálót is reszeteli
  37.         oszto<=0;
  38.     else oszto<=oszto+1;
  39.        
  40. // osztás a feladat alapján:
  41. //assign tx_en=(oszto==278);
  42. //osztás a szimulációhoz:
  43. assign tx_en=(oszto==1);
  44.  
  45. // tx_cntr ciklusszámláló beállítása
  46. always@(posedge clk)
  47.     if(rst) //rst jel esetén reszetel
  48.         tx_cntr<=32;
  49.     else if(tx_en)  //engedélyező jel estén ha a számláló elérte a 0-t, akkor betölti a 32-t, és újraszámol????
  50.         if(tx_cntr==0) tx_cntr<=32;
  51.         else tx_cntr<=tx_cntr-1;// egyébként pedig tovább számol lefelé
  52.        
  53. // shift regiszter felöltése
  54. always@(posedge clk)
  55.     begin
  56.     // rst hatására a shift regiszterbe csupa 1-est töltünk?????high???
  57.     if(rst)
  58.         tx_shr<=33'b1111_1111_1111_1111_1111_1111_1111_1111_1;
  59.     if(tx_en)
  60.         if(tx_cntr==0)// ha a tx_cntr ciklusszámláló 0, akkor feltöltjük a a shift regisztert
  61.         //3 karakter: 1 startbit, 8 adatbit(2 ASCII kód+kocsi-vissza(0x0d)karakter),(LSB-vel kezdünk), 1 paritásbit(XOR művelet segítségével) és 1 stop bit
  62.         tx_shr<={1'b0, bcd0[0], bcd0[1], bcd0[2], bcd0[3], 4'b1100, ^bcd0,1'b1,
  63.                     1'b0, bcd1[0], bcd1[1], bcd1[2], bcd1[3], 4'b1100, ^bcd1,1'b1,
  64.                     1'b0,8'b10110000, ^8'h0d, 1'b1};//kocsi-vissza: decimális 13?????????????????
  65.         //ha nem 0 a számláló, akkor léptetjük a shift-regisztert
  66.         else tx_shr<={tx_shr[31:0],tx_shr[32]};
  67.     end
  68. assign tx_out=tx_shr[32];
  69. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement