赞
踩
有关Quartusii的初始化配置,参见我的另一篇blog:【FPGA入门】QuartusII初始化配置
芯片:10CL006YU256C8G
实现数码管从0-60计数显示
输入为50Mhz的时钟信号,一分为二,一份经PLL分频后输出到位选段选信号源CNT2,从而输出个位十位选择控制信号到位选段选输出口。
另一份到CNT60将信号源转为M=60的计数器模块,并拆分为十位个位输出到段选数据输入模块,再通过译码器实现显示
从50Mhz分频为2000Hz
- module CNT2(CLK,Q);
- input CLK;
- output Q;
- reg Q1;
- assign Q=Q1;
- always @(posedge CLK) begin
- Q1 <=Q1+1; end
-
- endmodule
- module ECODE(CD,SG);
- input CD;
- output [7:0]SG;
- reg [7:0]SG;
- always @(CD) begin
- case (CD)
- 1'b0: SG<=8'B11111110;
- 1'b1: SG<=8'B11111101;
- endcase
- end
- endmodule
- module CNT60(CLK,RST,Q);
- input CLK,RST;
- output [7:0]Q;
- reg [7:0]Q1;
- assign Q[7:4]=Q1/10;
- assign Q[3:0]=Q1%10;
- localparam M=60;
-
- reg [24:0] clk_cnt;
- reg clk_one;
-
- always @(posedge CLK or negedge RST)begin
- if(!RST)
- clk_cnt <= 25'b0;
- else if (clk_cnt<25000000-1'b1)
- clk_cnt <= clk_cnt+1'b1;
- else
- clk_cnt <= 25'b0;
- end
-
- always @(posedge CLK or negedge RST)begin
- if(!RST)
- clk_one <= 1'b0;
- else if(clk_cnt==2500000-1'b1)
- clk_one <=~clk_one;
- else
- clk_one <=clk_one;
- end
-
- always @(posedge clk_one or negedge RST)begin
- if(!RST)
- Q1=8'b0;
- else if(Q1<M-1'b1)
- Q1=Q1+1'b1;
- else
- Q1=8'b0;
- end
- endmodule
- module MUXA(A,B,S,Y,DP);
- input [3:0]A,B;
- input S;
- output reg [3:0] Y;
- output reg DP;
- always @(A,B,S) begin
- if (S==1'B0) begin Y=A; DP=1; end
- else begin Y=B; DP=1; end
- end
- endmodule
-
- module DEC6(A,LED7);
- input [3:0]A;
- output reg [6:0] LED7;
-
- always @(A) begin
- if(A==4'B0000) LED7=7'B1000000;
- else if(A==4'B0001) LED7=7'B1111001;
- else if(A==4'B0010) LED7=7'B0100100;
- else if(A==4'B0011) LED7=7'B0110000;
- else if(A==4'B0100) LED7=7'B0011001;
- else if(A==4'B0101) LED7=7'B0010010;
- else if(A==4'B0110) LED7=7'B0000010;
- else LED7=7'B1000000;
- end
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。