Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module ps8(input CLOCK_50,
  2.                     input [2:0] SW,
  3.                     input [1:0] KEY,
  4.                     output [0:0] LEDR);
  5.     wire C;
  6.     delay_0_5_sec(CLOCK_50, C);
  7.     FSM_Morse_code(SW, C, KEY[1], KEY[0], LEDR[0]);
  8. endmodule
  9.  
  10. module delay_0_5_sec(input CLK,
  11.                            output Q);
  12.     wire [25:0] A;
  13.     wire E;
  14.    
  15.     counter_mod_M #(25000000) ex0(CLK, 1'b1, 1'b1, A);
  16.     assign E = ~|A;
  17.     counter_mod_M #(2) ex1(CLK, 1'b1, E, Q);
  18.  
  19. endmodule
  20.  
  21. module counter_mod_M #(parameter M = 8) (input CLK, ACLR, ENABLE,
  22.                                 output reg [N - 1:0] Q);
  23.     localparam N = clogb2(M - 1);
  24.    
  25.     function integer clogb2(input [31:0] v);
  26.         for (clogb2 = 0; v > 0; clogb2 = clogb2 + 1)
  27.             v = v >> 1;
  28.     endfunction
  29.    
  30.     always@(posedge CLK, negedge ACLR)
  31.         if(~ACLR)   Q <= {N{1'b0}};
  32.         else if(Q == M - 1) Q <= {N{1'b0}};
  33.         else if(ENABLE) Q <= Q + 1'b1;
  34.         else    Q <= Q;
  35. endmodule
  36.  
  37. module FSM_Morse_code(input [2:0] W,
  38.                              input CLK, ENABLE, ACLR,
  39.                              output reg Z);
  40.     reg [0:0] YQ, YD;
  41.     reg [0:13] ZNAK;
  42.     localparam [0:0] SWIECI = 1'b1,
  43.                           NIESWIECI = 1'b0;
  44.     localparam [0:13] A = 14'b01011100000000,
  45.                            B = 14'b01110101010000,
  46.                            C = 14'b01110101110100,
  47.                            D = 14'b01110101000000,
  48.                            E = 14'b01000000000000,
  49.                            F = 14'b01010111010000,
  50.                            G = 14'b01110111010000,
  51.                            H = 14'b01010101000000;
  52.     integer I = 0;
  53.     integer START = 0;
  54.    
  55.     always @(*)
  56.         case (W)
  57.             3'b000: ZNAK = A;
  58.             3'b001: ZNAK = B;
  59.             3'b010: ZNAK = C;
  60.             3'b011: ZNAK = D;
  61.             3'b100: ZNAK = E;
  62.             3'b101: ZNAK = F;
  63.             3'b110: ZNAK = G;
  64.             3'b111: ZNAK = H;
  65.             default: ZNAK = 14'bxxxxxxxxxxxxxx;
  66.         endcase
  67.        
  68.     always @(*)
  69.         case (YQ)
  70.             SWIECI:  if(ZNAK[I] == 0)
  71.                             YD = NIESWIECI;
  72.                         else if(ZNAK[I] == 1)
  73.                             YD = SWIECI;
  74.                         else
  75.                             YD = 1'bx;
  76.             NIESWIECI:  if(ZNAK[I] == 0)
  77.                                 YD = NIESWIECI;
  78.                             else if(ZNAK[I] == 1)
  79.                                 YD = SWIECI;
  80.                             else
  81.                                 YD = 1'bx;
  82.             default: YD = 1'bx;
  83.         endcase
  84.     always @(posedge CLK, negedge ACLR)
  85.         if(~ACLR)
  86.             begin
  87.                 YQ <= 0;
  88.                 I <= 0;
  89.                 START <= 0;
  90.             end
  91.         else if(I > 12 || (ZNAK[I] == 0 && ZNAK[I + 1] == 0))
  92.             begin
  93.                 YQ <= 0;
  94.                 I <= 0;
  95.                 START <= 0;
  96.             end
  97.         else if(~ENABLE || START == 1)
  98.             begin
  99.                 YQ = YD;
  100.                 START <= 1;
  101.                 I <= I + 1;
  102.             end
  103.         else
  104.             YQ <= YQ;
  105.        
  106.     always @(*)
  107.         Z = YQ;
  108. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement