Example: bankruptcy

FPGA による 24 時間時計回路の設計 - icrus.org

FPGA 24 2013 6 26 FPGA 24 10ec062 1. 24 FPGA 24 1. 2. 2-1. 2-2. 3. 3-1 3-2 ( ) 3-3 7segLED 3-4 4. UCF FPGA 24 2013 6 26 2. 2-1. 24 ( ) Xilinx FPGA NEXYS3 Verilog 4 7 LED 5 ( ) NEXYS3 FPGA 24 2013 6 26 2-2. 24 00:00 23:59 7 LED (.)

fpga による24 時間時計回路 2013 年6 月26 日 2-2. 機能説明 製作物に実装した機能を以下に示す。 ① 「24 時間時計表示」

Tags:

  Fpgas

Information

Domain:

Source:

Link to this page:

Please notify us if you found a problem with this document:

Other abuse

Transcription of FPGA による 24 時間時計回路の設計 - icrus.org

1 FPGA 24 2013 6 26 FPGA 24 10ec062 1. 24 FPGA 24 1. 2. 2-1. 2-2. 3. 3-1 3-2 ( ) 3-3 7segLED 3-4 4. UCF FPGA 24 2013 6 26 2. 2-1. 24 ( ) Xilinx FPGA NEXYS3 Verilog 4 7 LED 5 ( ) NEXYS3 FPGA 24 2013 6 26 2-2. 24 00:00 23:59 7 LED (.)

2 1 NEXYS3 24 18:39 ) FPGA 24 2013 6 26 10 1 10 1 1 ( ) 10 0 ( .2 ) FPGA 24 2013 6 26 24 7 LED OFF 24 ON 1 10 1 ( .3 9 ) FPGA 24 2013 6 26 3. 3-1. ( ) 10 7 LED 7 LED 7 LED 7 LED (.

3 4 ) FPGA 24 2013 6 26 3-2. ( ) 3-2-1. 10 reg [23:0]count; parameter SEC0_1_MAX = 10000000; always@(posedge clk or posedge reset) begin if(reset==1'b1) count <= 24'd0; else if(ENABLE_0_1s == 1'b1) count <= 24'd0; else count <= count + 24'd1; end assign ENABLE_0_1s = (count == (SEC0_1_MAX-1))? 1'b1 : 1'b0; NEXYS3 100 MHz clk count 1 count 10 9999999(0 10000000-1 ) ENABLE_0_1s count 0 FPGA 24 2013 6 26 always@(posedge clk or posedge reset) begin if(reset==1'b1) CNT0_1s <= 4'd0; else if(ENABLE_0_1s==1'b1) CNT0_1s <= (CNT0_1s == 4'd9)?

4 4'd0 : (CNT0_1s + 4'd1); end assign ENABLE_1s = (ENABLE_0_1s && CNT0_1s == 4'd9)? 1'b1 : 1'b0; ENABLE_0_1s CNT0_1s 10 9 CNT0_1s 0 CNT0_1s 1 ENABLE_0_1s CNT0_1s 10 9 1 ENABLE_1s 1 10 FPGA 24 2013 6 26 3-2-2. 1 10 10 10 always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT10h <= 2'd0; else if(o_bt10h == 1'b1) CNT10h <= (CNT10h == 2'd2|| (CNT10h==2'd1 && CNT1h>4'd3))? 2'd0:(CNT10h + 2'd1); else if(ENABLE_10h == 1'b1) CNT10h <= (CNT10h == 2'd2 && CNT1h == 4'd3 && CNT10m == 3'd5 && CNT1m == 4'd9 )? 2'd0 : (CNT10h+2'd1); end ( ) 0 00:00 23:59 1 4 10 2 (CNT10h==2'd1 && CNT1h>4'd3) FPGA 24 2013 6 26 3-2-3.

5 7 LED reg [16:0]dcount; always@(posedge clk) begin if(ENABLE_kHz == 1'b1) dcount <= 16'h0; else dcount <= dcount + 16'h1; end assign ENABLE_kHz=(dcount == (kHz-1))? 1'b1 : 1'b0; reg [1:0]AN_count; always@(posedge clk) begin if(ENABLE_kHz == 1'b1) AN_count <= AN_count + 2'h1; end 2 AN_count 1 ENABLE_kHz 3-2-1 ENABLE_kHz FPGA 24 2013 6 26 3-3. 7segLED 3-3-1. segLED 7 LED 7 LED 3-3-2. 7segLED reg [3:0]CNT; always@(CNT) begin case(CNT) //ABCDEFG 0:LED <= 7'b0000001; 1:LED <= 7'b1001111; 2:LED <= 7'b0010010; 3:LED <= 7'b0000110; 4:LED <= 7'b1001100; 5:LED <= 7'b0100100; 6:LED <= 7'b0100000; 7:LED <= 7'b0001111; 8:LED <= 7'b0000000; 9:LED <= 7'b0000100; default:LED <= 7'b0110000; endcase end (CNT) 7 LED (LED) 4.

6 FPGA 24 2013 6 26 3-3-3. 7segLED always@(AN_count,CNT0_1s,CNT1s,CNT10s,CN T1m,CNT10m,CNT1h,CNT10h,sw) begin case(AN_count[1:0]) 2'd0:begin AN <= 4'b1110;end 2'd1:begin AN <= 4'b1101;end 2'd2:begin AN <= 4'b1011;end 2'd3:begin AN <= 4'b0111;end default AN <= 4'b0000; endcase if(sw==1'b0) begin case(AN_count[1:0]) 2'd0:begin CNT <= CNT1m; end 2'd1:begin CNT <= {1'b0,CNT10m}; end 2'd2:begin CNT <= CNT1h;end 2'd3:begin CNT <= {2'b00,CNT10h};end endcase end else begin case(AN_count[1:0]) 2'd0:begin CNT <= CNT0_1s; end 2'd1:begin CNT <= CNT1s; end 2'd2:begin CNT <= {1'b0,CNT10s};end 2'd3:begin CNT <= {1'b0,CNT1m};end endcase end end endmodule FPGA 24 2013 6 26 AN_count (0 3) LED (AN <= 4'b1110) (AN <= 4'b0111) LED LED sw sw 0 24 sw 1 CNT0_1s, CNT1s, CNT10s ,CNT1m, CNT10m, CNT1h, CNT10h ,1 ,10 ,1 ,10 ,1 ,10 FPGA 24 2013 6 26 3-4.

7 3-4-1. FPGA 24 2013 6 26 3-4-2. always@(posedge clk)begin if(enable == 1'b1) shift <= {shift[3:0], bt}; end assign flag = (0,1) 5 shift 1 (&shift 1) flag 1 3-4-3. always@(posedge clk)begin btbt <= {btbt[0],flag}; end assign one_shot = ~btbt[1] 3-4-2 flag 2 btbt flag (btbt[1]) flag (btbt[0]) (~btbt[1] & btbt[0]) one_shot (.)

8 5 ) FPGA 24 2013 6 26 4. UCF UCF ( ) module top_counter( input wire clk, input wire reset, input wire i_bt1m, input wire i_bt10m, input wire i_bt1h, input wire i_bt10h, input wire sw, output wire [0:6]LED, output wire [3:0]AN ); reg [23:0]count; reg [3:0]CNT0_1s; reg [3:0]CNT1s; reg [2:0]CNT10s; reg [3:0]CNT1m; reg [2:0]CNT10m; reg [3:0]CNT1h; reg [1:0]CNT10h; parameter SEC0_1_MAX = 10000000; parameter kHz = 100000; wire ENABLE_0_1s,ENABLE_1s,ENABLE_10s,ENABLE_ 1m,ENABLE_10m,ENABLE_1h,ENABLE_10h;// wire ENABLE_kHz; FPGA 24 2013 6 26 /*------------------------------ -------------------------------------*/ /* */ always@(posedge clk or posedge reset) begin if(reset==1'b1) count <= 24'd0.

9 Else if(ENABLE_0_1s == 1'b1) count <= 24'd0; else count <= count + 24'd1; end assign ENABLE_0_1s = (count == (SEC0_1_MAX-1))? 1'b1 : 1'b0; always@(posedge clk or posedge reset) begin if(reset==1'b1) CNT0_1s <= 4'd0; else if(ENABLE_0_1s==1'b1) CNT0_1s <= (CNT0_1s == 4'd9)? 4'd0 : (CNT0_1s + 4'd1); end assign ENABLE_1s = (ENABLE_0_1s && CNT0_1s == 4'd9)? 1'b1 : 1'b0; FPGA 24 2013 6 26 /*1 */ always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT1s <= 4'd0; else if(ENABLE_1s == 1'b1) CNT1s <= (CNT1s == 4'd9)? 4'd0 : (CNT1s+4'd1); end assign ENABLE_10s = (ENABLE_1s && CNT1s==4'd9)? 1'b1 : 1'b0; /*10 */ always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT10s <= 3'd0; else if(ENABLE_10s == 1'b1) CNT10s <= (CNT10s == 3'd5)?

10 3'd0 : (CNT10s+3'd1); end assign ENABLE_1m = (ENABLE_10s && CNT10s==3'd5)? 1'b1 : 1'b0; /*1 */ always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT1m <= 4'd0; else if(o_bt1m == 1'b1) CNT1m <= (CNT1m == 4'd9)? 4'd0:(CNT1m + 4'd1); else if(ENABLE_1m == 1'b1) CNT1m <= (CNT1m == 4'd9)? 4'd0 : (CNT1m+4'd1); end assign ENABLE_10m = (ENABLE_1m && CNT1m==4'd9)? 1'b1 : 1'b0; FPGA 24 2013 6 26 /*10 */ always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT10m <= 3'd0; else if(o_bt10m == 1'b1) CNT10m <= (CNT10m == 3'd5)? 3'd0:(CNT10m + 3'd1); else if(ENABLE_10m == 1'b1) CNT10m <= (CNT10m == 3'd5)? 3'd0 : (CNT10m+3'd1); end assign ENABLE_1h = (ENABLE_10m && CNT10m==3'd5 && CNT1m==4'd9)? 1'b1 : 1'b0; /*1 */ always@(posedge clk or posedge reset) begin if(reset == 1'b1) CNT1h <= 4'd0; else if(o_bt1h == 1'b1) CNT1h <= (CNT1h == 4'd9|| (CNT10h==2'd2&&CNT1h==4'd3))?


Related search queries