RenHao

1012期末懶人包_2

Jun 18th, 2013
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module mod2(input clk_50M, reset, output reg clk_25M);
  2.   always @(posedge clk_50M or negedge reset)
  3.     begin
  4.       if(!reset)
  5.         clk_25M <= 0;
  6.       else
  7.         clk_25M <= ~clk_25M;
  8.     end
  9. endmodule
  10.  
  11. --------------------------------------------------------------------
  12.  
  13. module mod4(input clk_50M, reset, output reg clk_25M, clk_12_5M);
  14.  always@(posedge clk_50M or negedge reset)
  15.     begin
  16.       if(!reset)
  17.         clk_25M <= 0;
  18.       else
  19.         clk_25M <= ~clk_25M;
  20.     end  
  21.  always@(posedge clk_25M or negedge reset)
  22.     begin
  23.       if(!reset)
  24.         clk_12_5M <= 0;
  25.       else
  26.         clk_12_5M <= ~clk_12_5M;
  27.     end
  28. endmodule
  29.  
  30. --------------------------------------------------------------------
  31.  
  32. module FSM_practice(input en,ck,reset,output reg [2:0]state);
  33. parameter A = 3'b000 ,B = 3'b001 ,C = 3'b010 ,D = 3'b011 ,E = 3'b100 ,F = 3'b101 ,G = 3'b110 ;
  34.  
  35. // 0246135 --> ACEGBDF
  36.  
  37. always @(posedge ck or posedge reset)
  38. begin
  39.     if(reset) state <= A ;
  40.     else if(~en) state <= state ;
  41.     else
  42.         begin
  43.             case(state)
  44.             A: if(en) state <= C;
  45.             C: if(en) state <= E;
  46.             E: if(en) state <= G;
  47.             G: if(en) state <= B;
  48.             B: if(en) state <= D;
  49.             D: if(en) state <= F;
  50.             F: if(en) state <= A;
  51.             default: state <= A;
  52.             endcase
  53.         end
  54. end
  55. endmodule
  56.  
  57. ---------------------------------------------------------------------
  58.  
  59. module seg_scan(clk, rst, seg_en, seg);
  60. input  clk, rst;
  61. output [3:0] seg_en;
  62. output [7:0] seg;
  63.  
  64. wire scan_clk, count_clk;
  65. wire [3:0] scan_code;
  66. reg [31:0] div;
  67. reg [15:0] count;
  68. reg [3:0] seg_en;
  69.  
  70. always@(posedge clk, negedge rst)
  71. begin
  72.     if(!rst)
  73.       div <= 32'b0;
  74.     else
  75.       div <= div + 1;
  76. end
  77.  
  78. assign scan_clk  = div[16];  // 約5ms   250Hz scan period 20ms / 4(segs)
  79. assign count_clk = div[17];  // 約10ms  100Hz
  80.  
  81. always@(posedge scan_clk, negedge rst) //low level to enable seg
  82. begin
  83.     if(!rst)
  84.         seg_en <= 4'b1110 ;
  85.     else
  86.         seg_en <= !seg_en[0]?4'b1101:
  87.                   !seg_en[1]?4'b1011:
  88.                   !seg_en[2]?4'b0111:
  89.                   4'b1110;
  90.                  
  91.         //seg_en <= {seg_en[0] , seg_en[3:1]} ;
  92. end
  93.  
  94.  
  95. assign scan_code =  (seg_en == 4'b1110) ? (count[3:0]) :
  96.             (seg_en == 4'b1101) ? (count[7:4]) :
  97.             (seg_en == 4'b1011) ? (count[11:8]) :
  98.                     (count[15:12]) ;
  99.  
  100. always@(posedge count_clk, negedge rst) //plus 6 to fix the BCD_code
  101. begin
  102.     if(!rst)
  103.         count <= 0 ;
  104.     else if(count[15:12]==9)
  105.         count[15:12] <= count[15:12]+6;
  106.     else if(count[11:8]==9)
  107.         count[12:8] <= count[12:8]+6;
  108.     else if(count[7:4]==9)
  109.         count[8:4] <= count[8:4]+6;
  110.     else if(count[3:0]==9)
  111.         count[4:0] <= count[4:0]+6;
  112.     else
  113.         count <= count+1 ;
  114.    
  115. end
  116.  
  117. assign seg = (scan_code==0)?(8'b00000011):
  118.              (scan_code==1)?(8'b10011111):
  119.              (scan_code==2)?(8'b00100101):
  120.              (scan_code==3)?(8'b00001101):
  121.              (scan_code==4)?(8'b10011001):
  122.              (scan_code==5)?(8'b01001001):
  123.              (scan_code==6)?(8'b01000001):
  124.              (scan_code==7)?(8'b00011011):
  125.              (scan_code==8)?(8'b00000001):
  126.              (8'b00001001);
  127.  
  128. endmodule
  129.  
  130. --------------------------------------------------------------------------------
  131.  
  132. module flashlight(input re,ck,L, R, H,output LA, LB, LC, RA, RB, RC);
  133. parameter IDLE = 0 , R1 = 1 , R2 = 2 , R3 = 3 ,
  134.           L1 = 4 , L2 = 5 , L3 = 6 , LR3 = 7 ;
  135. wire scan_clk;
  136. reg [2:0] state;
  137. reg[23:0] div;
  138.    
  139. always @(posedge ck, negedge re)
  140.     begin
  141.         if(!re)
  142.             begin
  143.                     div <= 24'b0;
  144.             end
  145.         else
  146.             begin
  147.                     div <= div + 1;
  148.             end
  149.     end
  150.  
  151. assign scan_clk = div[23]; // 0.67s
  152.  
  153. always @(negedge scan_clk)
  154. begin
  155.     case(state)
  156.     IDLE:if(H|L&R) state <= LR3 ;
  157.          else if(L&~R&~H) state <= L1;
  158.          else if(R&~L&~H) state <= R1;
  159.          else state <= IDLE ;
  160.     L1:  if(H|L&R) state <= LR3 ;
  161.          else   if(L&~R&~H) state <= L2;
  162.          else state <= IDLE ;
  163.     L2:  if(H|L&R) state <= LR3 ;
  164.          else if(L&~R&~H) state <= L3;
  165.          else state <= IDLE ;
  166.     L3:  state <= IDLE ;
  167.     R1:  if(H|L&R) state <= LR3 ;
  168.          else if(R&~L&~H) state <= R2;
  169.          else state <= IDLE ;
  170.     R2:  if(H|L&R) state <= LR3 ;
  171.          else if(R&~L&~H) state <= R3;
  172.          else state <= IDLE ;
  173.     R3:  state <= IDLE ;
  174.     LR3: state <= IDLE ;
  175.     default : state <= IDLE ;
  176.     endcase
  177. end
  178. assign LA = ~((state==L1)|(state==L2)|(state==L3)|(state==LR3));
  179. assign LB = ~((state==L2)|(state==L3)|(state==LR3));
  180. assign LC = ~((state==L3)|(state==LR3));
  181. assign RA = ~((state==R1)|(state==R2)|(state==R3)|(state==LR3));
  182. assign RB = ~((state==R2)|(state==R3)|(state==LR3));
  183. assign RC = ~((state==R3)|(state==LR3));
  184.  
  185. endmodule
Advertisement
Add Comment
Please, Sign In to add comment