赞
踩
目录
①.用基于NEXY4 DDR开发板自带的时钟驱动电路,要求计时精确;
②.用开发板上的低 7 个开关(sw6-sw0),输入倒计时的初始秒数(最大 99);
③.用 2 个数码管以十进制显示当前的倒计时秒值;
④.用最高的开关(若开发板开关不够,可以用按键代替)实现 reset 功能;reset 后,能以 新的开关值进行倒计时。
⑤.当倒计时到 0 秒后,返回初始值继续倒计时。
- module top(
- input clk,
- input rst_n,
- input [6:0]sw,
- output [7:0]sel,
- output [7:0]seg
- );
- wire clk_1s;
- wire [6:0]cnt;
- wire [3:0]en1;
- wire [3:0]en2;
-
- div div(
- .clk(clk),
- .rst_n(rst_n),
- .clk_1s(clk_1s)
- );
-
- count count(
- .clk(clk_1s),
- .rst_n(rst_n),
- .sw(sw),
- .cnt(cnt)
- );
-
- countdown countdown(
- .clk(clk),
- .rst_n(rst_n),
- .cnt(cnt),
- .en1(en1),
- .en2(en2)
- );
-
- digital digital(
- .clk(clk),
- .rst_n(rst_n),
- .en1(en1),
- .en2(en2),
- .seg(seg),
- .sel(sel)
- );
- endmodule
- module div(
- input clk,
- input rst_n,
- output reg clk_1s
- );
-
- reg [29:0]counter1;//计数器技术满0.5ms需要30位宽的计数器
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- counter1 <= 0;
- else if(counter1 == 49999999)
- counter1 <= 0;
- else
- counter1 <= counter1 + 1;
-
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- clk_1s <= 0;
- else if(counter1 == 49999999)
- clk_1s <= ~clk_1s;
- else
- clk_1s <= clk_1s;
-
- endmodule
- module count(
- input clk,
- input rst_n,
- input [6:0]sw,
- output reg [6:0]cnt //倒计时最大值99s
- );
-
- always @(negedge clk or negedge rst_n)
- if(!rst_n)
- begin
- if(sw == 7'b000_0001)
- cnt <= 7'd1;
- else if(sw == 7'b000_0010)
- cnt <= 7'd5;
- else if(sw == 7'b000_0100)
- cnt <= 7'd10;
- else if(sw == 7'b000_1000)
- cnt <= 7'd20;
- else if(sw == 7'b001_0000)
- cnt <= 7'd25;
- else if(sw == 7'b010_0000)
- cnt <= 7'd30;
- else if(sw == 7'b100_0000)
- cnt <= 7'd35;
- else
- cnt <= 0;
- end
- else if(cnt == 7'd99)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- endmodule
- module countdown(
- input clk,
- input rst_n,
- input [6:0]cnt,
- output reg [3:0]en1,//个位
- output reg [3:0]en2//十位
- );
-
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- begin
- en1 <= 0;
- en2 <= 0;
- end
- else if(cnt <= 7'd99)
- begin
- en1 <= (99-cnt)%10;
- en2 <= ((99-cnt)-en1)/10;
- end
- endmodule
- module digital(
- input clk,
- input rst_n,
- input [3:0]en1,
- input [3:0]en2,
- output reg [7:0]seg,
- output reg [7:0]sel
- );
- //计数1ms
- reg [16:0]counter2;//计数1ms 1000000/10= 100000
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- counter2 <= 0;
- else if(counter2 == 99999)
- counter2 <= 0;
- else
- counter2 <= counter2 + 1;
- //1ms时钟使能
- reg clk_1ms_en;
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- clk_1ms_en <= 0;
- else if(counter2 == 99999)
- clk_1ms_en <= 1;
- else
- clk_1ms_en <= 0;
- //8位数码管计数器
- reg [2:0]counter3;
- always @(posedge clk or negedge rst_n)
- if(!rst_n)
- counter3 <= 0;
- else if(clk_1ms_en)
- counter3 <= counter3 + 1;
- else
- counter3 <= counter3;
- //8位数码管选择
- always @(posedge clk)
- case(counter3)
- 0:sel <= 8'b1111_1110;
- 1:sel <= 8'b1111_1101;
- 2:sel <= 8'b1111_1111;
- 3:sel <= 8'b1111_1111;
- 4:sel <= 8'b1111_1111;
- 5:sel <= 8'b1111_1111;
- 6:sel <= 8'b1111_1111;
- 7:sel <= 8'b1111_1111;
- endcase
-
- wire[31:0]data;
- assign data[3:0] = en1;
- assign data[7:4] = en2;
-
- reg [3:0]dsp_data;
- always @(posedge clk)
- case(counter3)
- 0:dsp_data <= data[3:0];
- 1:dsp_data <= data[7:4];
- 2:dsp_data <= data[11:8];
- 3:dsp_data <= data[15:12];
- 4:dsp_data <= data[19:16];
- 5:dsp_data <= data[23:20];
- 6:dsp_data <= data[27:24];
- 7:dsp_data <= data[31:28];
- endcase
-
- always @(posedge clk)
- case(dsp_data)
- 4'd0:seg <= 8'b1100_0000;
- 4'd1:seg <= 8'b1111_1001;
- 4'd2:seg <= 8'b1010_0100;
- 4'd3:seg <= 8'b1011_0000;
- 4'd4:seg <= 8'b1001_1001;
- 4'd5:seg <= 8'b1001_0010;
- 4'd6:seg <= 8'b1000_0010;
- 4'd7:seg <= 8'b1111_1000;
- 4'd8:seg <= 8'b1000_0000;
- 4'd9:seg <= 8'b1001_0000;
- endcase
-
- endmodule
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[7]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[6]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[5]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[4]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[3]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[2]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[1]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sel[0]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[6]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[5]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]
- set_property IOSTANDARD LVCMOS33 [get_ports clk]
- set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
- set_property PACKAGE_PIN C12 [get_ports rst_n]
- set_property PACKAGE_PIN E3 [get_ports clk]
- set_property PACKAGE_PIN J15 [get_ports {sw[0]}]
- set_property PACKAGE_PIN L16 [get_ports {sw[1]}]
- set_property PACKAGE_PIN M13 [get_ports {sw[2]}]
- set_property PACKAGE_PIN R15 [get_ports {sw[3]}]
- set_property PACKAGE_PIN R17 [get_ports {sw[4]}]
- set_property PACKAGE_PIN T18 [get_ports {sw[5]}]
- set_property PACKAGE_PIN U18 [get_ports {sw[6]}]
- set_property PACKAGE_PIN U13 [get_ports {sel[7]}]
- set_property PACKAGE_PIN K2 [get_ports {sel[6]}]
- set_property PACKAGE_PIN T14 [get_ports {sel[5]}]
- set_property PACKAGE_PIN P14 [get_ports {sel[4]}]
- set_property PACKAGE_PIN J14 [get_ports {sel[3]}]
- set_property PACKAGE_PIN T9 [get_ports {sel[2]}]
- set_property PACKAGE_PIN J18 [get_ports {sel[1]}]
- set_property PACKAGE_PIN J17 [get_ports {sel[0]}]
- set_property PACKAGE_PIN H15 [get_ports {seg[7]}]
- set_property PACKAGE_PIN L18 [get_ports {seg[6]}]
- set_property PACKAGE_PIN T11 [get_ports {seg[5]}]
- set_property PACKAGE_PIN P15 [get_ports {seg[4]}]
- set_property PACKAGE_PIN K13 [get_ports {seg[3]}]
- set_property PACKAGE_PIN K16 [get_ports {seg[2]}]
- set_property PACKAGE_PIN R10 [get_ports {seg[1]}]
- set_property PACKAGE_PIN T10 [get_ports {seg[0]}]
IMG_2222
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。