Contents ...
udn網路城邦
FPGA - 使用Verilog設計電子鐘
2014/12/19 11:45
瀏覽3,416
迴響0
推薦0
引用0

DIV3
module div3( q, reset, clk);
output q;
input clk,reset;
reg [1:0] next;
reg [1:0] q;
always @(negedge clk or posedge reset)
  begin
    if(reset) q <= 0="" div="">
    else q <= next="" div="">
  end
always @(*)
  begin
    case(q)
      0: next = 1;
      1: next = 2;
      2: next = 0;
      default : next = 0;
    endcase
  end
endmodule
--------------------------------------------------------------------------------------
DIV6
module div6( q, reset, clk);
output q;
input clk,reset;
reg [2:0] next;
reg [2:0] q;
always @(negedge clk or posedge reset)
  begin
    if(reset) q <= 0="" div="">
    else q <= next="" div="">
  end
always @(*)
  begin
    case(q)
      0: next = 1;
      1: next = 2;
      2: next = 3;
      3: next = 4;
      4: next = 5;
      5: next = 0;
      default : next = 0;
    endcase
  end
endmodule
--------------------------------------------------------------------------------------
DIV10
module div10( q, reset, clk);
output q;
input clk,reset;
reg [3:0] next;
reg [3:0] q;
always @(negedge clk or posedge reset)
  begin
    if(reset) q <= 0="" div="">
    else q <= next="" div="">
  end
always @(*)
  begin
    case(q)
      0: next = 1;
      1: next = 2;
      2: next = 3;
      3: next = 4;
      4: next = 5;
      5: next = 6;
      6: next = 7;
      7: next = 8;
      8: next = 9;
      9: next = 0;
      default : next = 0;
    endcase
  end
endmodule
--------------------------------------------------------------------------------------
divider
module divider( clk_out, clk_in, reset);
  input clk_in,reset;
  output clk_out;
  wire reset;
  reg [25:0] count;
  always @( posedge clk_in or posedge reset )
    begin
      if(reset) count <= 0="" div="">
      else count <= count="" 1="" div="">
    end
  assign clk_out = count[21]; //2^17
endmodule 
--------------------------------------------------------------------------------------
7段顯示器(0-9)
module led7( LED, q);
  output LED;
  input q;
  reg [6:0] LED;
  wire [3:0] q;
  always@(*)
    begin
      case(q)
        0: LED = 7'b1000000; //0
        1: LED = 7'b1111001; //1
        2: LED = 7'b0100100; //2
        3: LED = 7'b0110000; //3
        4: LED = 7'b0011001; //4
        5: LED = 7'b0010010; //5
        6: LED = 7'b0000010; //6
        7: LED = 7'b1111000; //7
        8: LED = 7'b0000000; //8
        9: LED = 7'b0010000; //9
        default: LED = 7'b00000; //0
      endcase
    end
endmodule
--------------------------------------------------------------------------------------
topClock
module topClock(
  hour_10,
  hour_01,
  minute_10,
  minute_01,
  clk,
  out_reset 
);
  input clk,out_reset;
  output hour_10,hour_01,minute_10,minute_01;
  
  wire [1:0] hour_10;
  wire [3:0] hour_01;
  wire [2:0] minute_10;
  wire [3:0] minute_01;
   
   div10 d1( minute_01, reset, clk );
   div6 d2( minute_10, reset, minute_01[3] );
   div10 d3( hour_01, reset, minute_10[2] );
   div3 d4( hour_10, reset, hour_01[3] );
  assign  out_and = hour_10[1] & hour_01[2];
  
  assign reset = out_reset | out_and;
endmodule
--------------------------------------------------------------------------------------
topClock2
module topClock2(
  LED1,
  LED2,
  LED3,
  LED4,
  out_reset,
  clk
);
  
  input clk,out_reset;
  output LED1,LED2,LED3,LED4;
  
  wire [1:0] hour_10;
  wire [3:0] hour_01;
  wire [2:0] minute_10;
  wire [3:0] minute_01;
  wire [6:0] LED1,LED2,LED3,LED4;
  wire clk_out;
   
divider d( clk_out, clk, out_reset );
   div10 d1( minute_01, reset, clk_out );
   div6 d2( minute_10, reset, minute_01[3] );
   div10 d3( hour_01, reset, minute_10[2] );
   div3 d4( hour_10, reset, hour_01[3] );
led7 topled01( LED1, minute_01 );
   led7 topled02( LED2, minute_10 );
   led7 topled03( LED3, hour_01 );
   led7 topled04( LED4, hour_10 );
  assign  out_and = hour_10[1] & hour_01[2];
  assign reset = out_reset | out_and;
endmodule
全站分類:知識學習 隨堂筆記
自訂分類:FPGA
上一則: FPGA - 使用Verilog設計SAP1(Control)
你可能會有興趣的文章:
發表迴響

會員登入