Advertisement
Guest User

hazi

a guest
Nov 24th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // TOPLEVEL///////////////////////////////////////////////////////////////
  2. `timescale 1ns / 1ps
  3. //////////////////////////////////////////////////////////////////////////////////
  4. // Company: BME
  5. // Engineer: Ecsedi Gergő, Szabó Patrik
  6. //
  7. // Create Date:    22:33:30 11/14/2014
  8. // Design Name:
  9. // Module Name:    toplevel
  10. // Project Name:
  11. // Target Devices:
  12. // Tool versions:
  13. // Description:
  14. //
  15. // Dependencies:
  16. //
  17. // Revision:
  18. // Revision 0.01 - File Created
  19. // Additional Comments:
  20. //
  21. //////////////////////////////////////////////////////////////////////////////////
  22. module toplevel(
  23.             input clk,
  24.             input btn1,
  25.             input sw6,
  26.             input sw7,
  27.             input rst,
  28.             input urst,
  29.            
  30.             output txd,
  31.             output [33:0] LANAL
  32.  );
  33.  reg[2:0] go;
  34.  reg ujra;
  35.  
  36.  wire baud;
  37.  wire btn_sign;
  38.  wire rst_sign;
  39.  wire rtsState;
  40. wire urst_sign;
  41.  wire wordBit;
  42.  wire[1:0] word;
  43.  wire[3:0] wordDigitSel;
  44.  
  45.  
  46. pergesmentesito rstpergment (
  47.         .clk(clk),
  48.         .btn_in(rst),
  49.         .btn_en(rst_sign)
  50. );
  51. pergesmentesito btnpergment(
  52.         .clk(clk),
  53.         .btn_in(btn1),
  54.         .btn_en(btn_sign)
  55. );
  56. pergesmentesito urstpergment(
  57.         .clk(clk),
  58.         .btn_in(urst),
  59.         .btn_en(urst_sign)
  60. );
  61. brgen brgenerator(
  62.         .clk(clk),
  63.         .rst(rst_sign ||ujra),
  64.         .rate(sw7),
  65.         .brout(baud)
  66. );
  67.  
  68. cntr2_ascii counterWord(
  69.         .clk(clk),
  70.         .en( (wordDigitSel == 4'b1010) & !(go==0 ) &baud ),
  71.         .rst(rst_sign||ujra),
  72.         .out(word)
  73. );
  74. cntr4_kivalaszto counterDigit(
  75.         .clk(clk),
  76.         .en(baud & !(go==0 ) ),
  77.  
  78.         .rst(rst_sign||ujra),
  79.         .parity(sw6),
  80.         .out(wordDigitSel )
  81. );
  82. RTS rts(
  83.         .clk(clk),
  84.         .stop(rst_sign||ujra),
  85.         .btn(btn_sign),
  86.         .out(rtsState)
  87. );
  88. multiplexer mux(
  89.         .sel(wordDigitSel ),
  90.         .din(word),    
  91.         .outAscii(wordBit)
  92. );
  93.  
  94.  always@(posedge clk)
  95.     begin    
  96.    
  97.         if(rst_sign)
  98.             go<=0;
  99.         else if( urst_sign && (go==0 || go==3'b101) )
  100.                     begin go<=0; ujra<=1;  end
  101.         else if(baud && (wordDigitSel == 4'b1010) && ~(go==3'b101) )
  102.                 begin go<=go+1; end
  103.         else if(btn_sign && go==0 )
  104.                  begin go<=1; ujra<=0; end
  105.                  
  106.     end
  107.  
  108.  
  109. assign txd = (go==0 || go==3'b101)? 1: wordBit;     //ha go==0, tehát ha nincs adás. akkor idle(magas).
  110.  
  111. assign LANAL[33] = clk;
  112. assign LANAL[0] = btn1;
  113. assign LANAL[1] = btn_sign;
  114. assign LANAL[2] = sw6;          //parity
  115. assign LANAL[3] = sw7;          //rate
  116. assign LANAL[4] = rst_sign;
  117. assign LANAL[5] = baud;
  118. assign LANAL[6] = rtsState;
  119. assign LANAL[7] = wordBit;
  120. assign LANAL[9:8] = word;
  121. assign LANAL[13:10] = wordDigitSel;
  122. assign LANAL[14] = txd;
  123. assign LANAL[17:15] = go;
  124. assign LANAL[18]=urst;
  125. assign LANAL[19]=urst_sign;
  126. assign LANAL[32:20] = 0;
  127.  
  128. endmodule
  129.  
  130. //PERGESMENTESITO//////////////////////////////////////////////////////////////
  131. `timescale 1ns / 1ps
  132. module pergesmentesito(
  133.     input clk,
  134.     input btn_in,
  135.     output btn_en
  136.     );
  137.    
  138.     reg[1:0] perg;
  139.    
  140.     always@(posedge clk)
  141.         perg <= {perg[0],btn_in};
  142.  
  143.     assign btn_en = perg[0] & perg[1];          //ha 00 vagy 11 akkor nem pereg
  144.  
  145. endmodule
  146. //////BAUD-RATE-GENERATOR /////////////////////////////////////////////////////////
  147. `timescale 1ns / 1ps
  148. module brgen(
  149.     input clk,
  150.     input rst,
  151.     input rate,
  152.     output brout
  153.      //output[12:0] brcntr   //debug
  154.     );
  155.      
  156. reg[12:0] baudRate;
  157. reg[12:0] baudRateCounter;
  158.  
  159.  
  160. //BaudRate számláló
  161. always@(posedge clk)
  162.     if(rst || brout )
  163.             baudRateCounter <= 0;
  164.     else
  165.             baudRateCounter <= baudRateCounter +1;
  166.  
  167. //baudRate= clock/sample*br  sample=1; br={9600, 19200} clock = 50 000 000
  168. always@(posedge clk)
  169.     baudRate <= (rate == 0) ? 5208 : 2604;  //9600 és 19200 Br
  170.    
  171.  
  172. //assign brcntr = baudRateCounter;  //debug
  173. assign brout = ( baudRateCounter == baudRate) ? 1 : 0;
  174.  
  175. endmodule
  176.  
  177. ////////CNTR2BIT_ASCI KÓD GENERÁLÓ //////////////////////////////////////////////
  178. `timescale 1ns / 1ps
  179. module cntr2_ascii(
  180.     input clk,
  181.     input en,
  182.     input rst,
  183.     output [1:0] out
  184.     );
  185. reg[1:0] data;
  186.  
  187. always@(posedge clk)
  188. begin
  189.     if(rst )
  190.         data<=2'b01;
  191.     else if(en)
  192.         data<=data+1;
  193. end
  194.  
  195. assign out = data;
  196. endmodule
  197.  
  198. ////////////CNTR4BIT_MUXSELECTER //////////////////////////////////////////////
  199. `timescale 1ns / 1ps
  200.  
  201. module cntr4_kivalaszto(
  202.     input clk,
  203.     input en,
  204.      
  205.     input rst,
  206.      input parity,
  207.     output [3:0] out
  208.  );
  209. reg[3:0] Q;
  210.  
  211.  
  212. always@(posedge clk)
  213.     begin
  214.         if (rst)
  215.             Q<=0;
  216.         else
  217.             if(en)
  218.                     if(~parity & Q == 8)
  219.                         Q<=Q + 2;
  220.                     else if( Q ==10)
  221.                         Q<=1;
  222.                     else
  223.                         Q<=Q+1;
  224.         end
  225.    
  226. assign out = Q;
  227.  
  228. endmodule
  229.  
  230. ///////////RTS////////////////////////////////////////////////////
  231. `timescale 1ns / 1ps
  232. module RTS(
  233.     input clk,
  234.     input stop,
  235.     input btn,
  236.     output out
  237.     );
  238. reg q;
  239.  
  240. always@(posedge clk)
  241. begin
  242.     if(btn & !stop)
  243.         q<=1;
  244.     else if(stop)
  245.         q<=0;
  246. end
  247.  
  248. assign out = q;
  249. endmodule
  250.  
  251. ///////////////MUX_16///////////////////////////////////////////////////////////////////////////
  252. `timescale 1ns / 1ps
  253. module multiplexer(
  254.     input [3:0] sel,
  255.     input [1:0] din,
  256.    
  257.     output outAscii
  258.     );
  259.  
  260. reg rr;
  261.  
  262. always @ (*)
  263. case (sel)
  264.         4'b0000: rr <= 1;               //0
  265.          4'b0001: rr <= 0;          //1
  266.          4'b0010: rr <= din[0];         //2
  267.          4'b0011: rr <= din[1];         //3
  268.          4'b0100: rr <= ( (~din[0]) & (~din[1]) );          //4
  269.          4'b0101: rr <= 0;          //5
  270.          4'b0110: rr <= 0;          //6
  271.          4'b0111: rr <= 1;          //7
  272.          4'b1000: rr <= 1;          //8
  273.          4'b1001: rr <= ~(din[0]^din[1]^( (~din[0]) & (~din[1]) ));         //9
  274.          4'b1010: rr <= 1;          //10
  275.         default: rr<=1;         //11!!!
  276.  
  277. endcase
  278.  
  279. assign outAscii = rr;
  280.  
  281. endmodule
  282. ///LANAL.UCF//////////////////////////////////
  283. NET "LANAL<33>"     LOC = "C10"; #CLK2
  284. NET "LANAL<32>"     LOC = "C15"; #CLK1
  285.  
  286.  
  287. NET "LANAL<31>"     LOC = "T3";  #D31
  288. NET "LANAL<30>"     LOC = "E10"; #D30
  289. NET "LANAL<29>"     LOC = "N11"; #D29
  290. NET "LANAL<28>"     LOC = "C11"; #D28
  291. NET "LANAL<27>"     LOC = "P10"; #D27
  292. NET "LANAL<26>"     LOC = "D11"; #D26
  293. NET "LANAL<25>"     LOC = "R10"; #D25
  294. NET "LANAL<24>"     LOC = "C12"; #D24
  295. NET "LANAL<23>"     LOC = "T7";  #D23
  296. NET "LANAL<22>"     LOC = "D12"; #D22
  297. NET "LANAL<21>"     LOC = "R7";  #D21
  298. NET "LANAL<20>"     LOC = "E11"; #D20
  299. NET "LANAL<19>"     LOC = "N6";  #D19
  300. NET "LANAL<18>"     LOC = "B16"; #D18
  301. NET "LANAL<17>"     LOC = "M6";  #D17
  302. NET "LANAL<16>"     LOC = "R3"; #D16
  303. NET "LANAL<15>"     LOC = "C16"; #D15
  304. NET "LANAL<14>"     LOC = "D15"; #D14
  305. NET "LANAL<13>"     LOC = "D16"; #D13
  306. NET "LANAL<12>"     LOC = "E15"; #D12
  307. NET "LANAL<11>"     LOC = "E16"; #D11
  308. NET "LANAL<10>"     LOC = "F15"; #D10
  309. NET "LANAL<9>"      LOC = "G15"; #D9
  310. NET "LANAL<8>"      LOC = "G16"; #D8
  311. NET "LANAL<7>"      LOC = "H15"; #D7
  312. NET "LANAL<6>"      LOC = "H16"; #D6
  313. NET "LANAL<5>"      LOC = "J16"; #D5
  314. NET "LANAL<4>"      LOC = "K16"; #D4
  315. NET "LANAL<3>"      LOC = "K15"; #D3
  316. NET "LANAL<2>"      LOC = "L15"; #D2
  317. NET "LANAL<1>"      LOC = "N9";  #D1
  318. NET "LANAL<0>"      LOC = "M11"; #D0
  319.  
  320. /////////////////////PINS.UCF/////////////////////////////////
  321. NET clk LOC = T9;
  322. NET rst LOC = M13;
  323. NET btn1 LOC = M14;
  324. NET sw6 LOC = K14;
  325. NET sw7 LOC = K13;
  326. NET txd LOC = R6;
  327. NET urst LOC = L14;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement