TheLegace

Lab8

Nov 14th, 2011
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Lab8(
  2.                 input CLOCK_50,
  3.                 input [3:0] KEY,
  4.                 output reg [1:0] LEDR
  5. );
  6.     reg[2:0] prev1, prev2, prev3, temp1, temp2;  //prev is the last key pressed.  000 if A, 001 B, 010 C, 011 D, 111 null
  7.     wire a, b, c, d;
  8.     reg[0:0] A, B, C, D;
  9.  
  10.     oneshot k0(KEY[0], CLOCK_50, a);
  11.     oneshot k1(KEY[1], CLOCK_50, b);
  12.     oneshot k2(KEY[2], CLOCK_50, c);
  13.     oneshot k3(KEY[3], CLOCK_50, d);
  14.  
  15.     initial begin
  16.         prev1 = 3'b111;
  17.         prev2 = 3'b111;
  18.         prev3 = 3'b111;
  19.         LEDR[0] = 1'b1;
  20.         LEDR[1] = 1'b0;
  21.     end
  22.     always @(posedge CLOCK_50) begin
  23.         if (prev3 == 3'b000 & prev2 == 3'b001 & prev1 == 3'b000 & LEDR[1] == 1'b0) begin
  24.             LEDR[0] = 0;
  25.         end
  26.         else if (prev3 != 3'b111 & prev2 != 3'b111 & prev1 != 3'b111 & LEDR[1] == 1'b0) begin
  27.             LEDR[0] = 1;
  28.             LEDR[1] = 1;
  29.         end
  30.         if (LEDR[1] == 1'b1 & prev2 == 3'b000 & prev1 == 3'b000 & D == 1'b1) begin
  31.             LEDR[1] = 0;
  32.         end
  33.         if (A) begin
  34.             prev1 <= 000;
  35.             prev2 <= prev1;
  36.             prev3 <= prev2;
  37.         end
  38.         if (B) begin
  39.             prev1 <= 001;
  40.             prev2 <= prev1;
  41.             prev3 <= prev2;
  42.         end
  43.         if (C) begin
  44.             prev1 <= 010;
  45.             prev2 <= prev1;
  46.             prev3 <= prev2;
  47.         end
  48.         if (D) begin
  49.             prev1 <= 111;
  50.             prev2 <= 111;
  51.             prev3 <= 111;
  52.             LEDR[0] = 1;
  53.         end
  54.         A = a;
  55.         B = b;
  56.         C = c;
  57.         D = d;
  58.     end
  59. endmodule
  60.  
  61.  
  62. module oneshot(sin, clock, sout);
  63.     input sin, clock;
  64.     output sout;
  65.     reg sout, q;
  66.    
  67.     always @(posedge sin or posedge sout) begin
  68.         if(sout)
  69.             q <= 0;
  70.         else
  71.             q <= 1;
  72.     end
  73.     always @(posedge clock) begin
  74.         sout <= q;
  75.     end
  76. endmodule
  77.  
Advertisement
Add Comment
Please, Sign In to add comment