消抖模块

module key_module
(
    //输入端口
    clk,rst_n,KEY,
    //输出端口
    key_out
);  
 
//---------------------------------------------------------------------------
//--    外部端口声明
//---------------------------------------------------------------------------
input                        clk;                //时钟的端口
input                        rst_n;                //复位的端口,低电平复位
input             [3:0]        KEY;                    //对应板上的KEY
output             [3:0]        key_out;                //消抖完成输出按键

//---------------------------------------------------------------------------
//--    内部端口声明
//---------------------------------------------------------------------------
reg        [26:0]    time_cnt;            //用来计数按键延迟的定时计数器
reg        [26:0]    time_cnt_n;            //time_cnt的下一个状态
reg         [3:0]             key_reg;                //用来接收按键信号的寄存器
reg         [3:0]             key_reg_n;            //key_reg的下一个状态

//设置定时器的时间为20ms,计算方法为  (20*10^6)ns / (1/50)ns  50MHz为开发板晶振
parameter SET_TIME_20MS = 27'd1_000_000;    
//parameter SET_TIME_20MS = 27'd1_0;

//---------------------------------------------------------------------------
//--    逻辑功能实现    
//---------------------------------------------------------------------------
//时序电路,用来给time_cnt寄存器赋值
always @ (posedge clk, negedge rst_n)
begin
    if(!rst_n)                                //判断复位
        time_cnt <= 27'h0;                //初始化time_cnt值
    else
        time_cnt <= time_cnt_n;            //用来给time_cnt赋值
end

//组合电路,实现20ms的定时计数器
always @ (*)
begin
    if(time_cnt == SET_TIME_20MS)        //判断20ms时间
        time_cnt_n = 27'h0;                //如果到达20ms,定时计数器将会被清零
    else
        time_cnt_n = time_cnt + 1'b1;//如果未到20ms,定时计数器将会继续累加
end

//时序电路,用来key_reg寄存器赋值
always @ (posedge clk, negedge rst_n)
begin
    if(!rst_n)                                //判断复位
        key_reg <= 4'b0000;                    //初始化key_reg值
    else
        key_reg <= key_reg_n;            //用来给key_reg赋值
end

//组合电路,每20ms接收一次按键的值
always @ (*)
begin
    if(time_cnt == SET_TIME_20MS)        //判断20ms时间
        key_reg_n <= KEY;                    //如果到达20ms,接收一次按键的值
    else
        key_reg_n <= key_reg;            //如果未到20ms,保持原状态不变
end

assign key_out = key_reg & (~key_reg_n);//判断按键有没有按下

endmodule
分屏模块

module div(clk,ext_rst_n,mclk
    );
    input           clk    ;//输入时钟
    input           ext_rst_n      ;//复位端口
    output      reg mclk           ;//输出1Hz
    
    reg      [31:0] cnt            ;//存放计数器的值
    parameter TIME=   32'd5000_0000;//时钟100MHz
//分频模块,使得输入时钟为25MHz输出时钟为1Hz
    always@ (posedge clk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            mclk <=1'b0;
            cnt <=32'd0;
        end
        else if(cnt ==TIME-1'b1)begin
            mclk <=~mclk;
            cnt <=1'b0;
        end
        else begin
            cnt <=cnt + 1'b1;
        end
    end
endmodule

控制模块

module control(clk,ext_rst_n,switch1,switch2,en_cnt,en_24s
    );
    input       clk;        //输入时钟
    input       ext_rst_n  ;        //复位信号
    input       switch1    ;        //暂停开关
    input       switch2    ;        //24s使能开关
    output  reg en_cnt     ;        //暂停计数使能位
    output  reg en_24s     ;        //24s使能位
    
    reg  [31:0] cnt        ;        //存放计数器的值
    parameter TIME = 32'd10000_0000;
    //数码管特殊状态闪烁计数器模块
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            cnt <=25'd0;
        end
        else if(cnt ==TIME-1'b1)begin
            cnt <=1'b0;
        end
        else begin
            cnt <=cnt + 1'b1;
        end
    end
    //停止计数器计时模块
    always @(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            en_cnt<=1'b0;
        end
        else if(switch1==1'b0)begin
            en_cnt<=1'b1;
        end
        else begin
            en_cnt<=1'b0;
        end
    end
    //开启24s倒计时
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            en_24s <=1'b0;
        end
        else if(switch2==1'b0)begin
            en_24s <=1'b1;
        end
        else begin
            en_24s <=1'b0;
        end
    end
endmodule
12分钟模块

module counter_12min(clk,mclk,ext_rst_n,en_24s,en_cnt,times_12m,led
    );
    input           clk       ;//系统时钟
    input           mclk              ;//时钟信号
    input           ext_rst_n         ;//复位信号
    input           en_24s            ;//24s使能位
    input           en_cnt            ;//计数器停止使能位
    output reg[15:0]times_12m         ;//15-12分高位 11-8 分低位 7-4秒高位 3-0秒低位
    output          led               ;//led指示状态
    
    assign led =(times_12m==16'h0000);
    
    //计数器模块高位 分钟计时
    always@(posedge mclk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_12m[15:12] <=4'h1;        
        end
        else if(en_24s==1'b1)begin
            times_12m[15:12] <=4'h1;
        end
        else if(en_cnt==1'b1)begin
            times_12m[15:12] <=times_12m[15:12];
        end
        else if({times_12m[15:12],times_12m[11:8]}==8'h00)begin
            times_12m[15:12] <=4'h0; 
        end
        else if({times_12m[7:4],times_12m[3:0]}==8'h00) begin
            if(times_12m[11:8]==4'h0)begin
                times_12m[15:12] <=times_12m[15:12]-1'b1;
            end
            else begin
                times_12m[15:12] <=times_12m[15:12];
            end
        end
        else begin
            times_12m[15:12] <=times_12m[15:12];
        end
    end
    //计数器模块低位 分钟计时
    always@(posedge mclk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_12m[11:8] <=4'h1;    
        end
        else if(en_24s==1'b1)begin
            times_12m[11:8] <=4'h1;
        end
        else if(en_cnt==1'b1)begin
            times_12m[11:8] <=times_12m[11:8];
        end
        else if({times_12m[15:12],times_12m[11:8]}==8'h00)begin
            times_12m[11:8] <=4'h0; 
        end
        else if({times_12m[7:4],times_12m[3:0]}==8'h00) begin
            if(times_12m[11:8]==4'h0)begin
                times_12m[11:8] <=4'h9;
            end
            else begin 
                times_12m[11:8] <=times_12m[11:8]-1'b1;
            end
        end
        else begin
            times_12m[11:8] <=times_12m[11:8];
        end
    end
    //计数器模块高位 秒计时
    always@(posedge mclk or negedge ext_rst_n)
    begin
        if(!ext_rst_n)begin
            times_12m[7:4] <=4'h5;    
        end
        else if(en_24s==1'b1)begin
            times_12m[7:4] <=4'h5;
        end
        else if(en_cnt==1'b1)begin
            times_12m[7:4] <=times_12m[7:4];
        end
        else if({times_12m[7:4],times_12m[3:0]}==8'h00)begin
            if({times_12m[15:12],times_12m[11:8]}==8'h00)begin
                times_12m[7:4] <=4'h0;
            end
            else begin
                times_12m[7:4] <=4'h5;
            end
        end
        else if(times_12m[3:0]==4'h0)begin
            times_12m[7:4] <=times_12m[7:4]-1'b1;
        end
        else begin
            times_12m[7:4] <=times_12m[7:4];
        end
    end
    //计数器模块低位 秒计时
    always@(posedge mclk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_12m[3:0] <=4'h9;    
        end
        else if(en_24s==1'b1)begin
            times_12m[3:0] <=4'h9;
        end
        else if(en_cnt==1'b1)begin
            times_12m[3:0] <=times_12m[3:0];
        end
        else if({times_12m[7:4],times_12m[3:0]}==8'h00) begin
            if({times_12m[15:12],times_12m[11:8]}==8'h00)begin
                times_12m[3:0] <=4'h0;
            end
            else begin
                times_12m[3:0] <=4'h9;
            end
        end
        else if(times_12m[3:0]==4'h0)begin
            times_12m[3:0] <=4'h9;
        end
        else begin
            times_12m[3:0] <=times_12m[3:0]-1'b1;
        end
    end
    
endmodule

24秒模块

module counter_24(clk,mclk,ext_rst_n,en_24s,en_cnt,times_24s,led
    );
    input             clk       ;//系统时钟
    input             mclk              ;//时钟信号
    input             ext_rst_n         ;//复位信号
    input             en_24s            ;//24s使能位
    input             en_cnt            ;//计数器停止使能位
    output reg [15:0] times_24s         ;
    output            led               ;//led指示状态
    
    assign led =(times_24s==16'h0000);
 
    reg      [31:0] cnt            ;//存放计数器的值
    parameter TIME=   32'd10000_0000;
    always@ (posedge clk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            cnt <=32'd0;
        end
        else if(cnt ==TIME-1'b1)begin
            cnt <=1'b0;
        end
        else begin
            cnt <=cnt + 1'b1;
        end
    end
    //计数器模块高位 秒计时(99)
    always@(posedge clk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_24s[7:4] <=4'h9;        
        end
        else if(en_24s==1'b0)begin
            times_24s[7:4] <=4'h9;
        end
        else if(en_cnt==1'b1)begin
            times_24s[7:4] <=times_24s[7:4];
        end
        else if(cnt%(TIME/100)==0)begin
            if({times_24s[7:4],times_24s[3:0]}==8'h00)begin
                if({times_24s[15:12],times_24s[11:8]}==8'h00)begin
                    times_24s[7:4] <=4'h0; 
                end
                else begin
                    times_24s[7:4] <=4'h9;
                end
            end
            else if(times_24s[3:0]==4'h0)begin
                times_24s[7:4] <=times_24s[7:4]-1'b1;
            end
            else begin
                times_24s[7:4] <=times_24s[7:4];
            end
        end
        else begin
            times_24s[7:4] <=times_24s[7:4];
        end    
    end
    //计数器模块低位 秒计时(99)
    always@(posedge clk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_24s[3:0] <=4'h9;
        end
        else if(en_24s==1'b0)begin
            times_24s[3:0] <=4'h9;
        end
        else if(en_cnt==1'b1)begin
            times_24s[3:0] <=times_24s[3:0];
        end
        else if(cnt%(TIME/100)==0)begin
            if({times_24s[7:4],times_24s[3:0]}==8'h00) begin
                if({times_24s[15:12],times_24s[11:8]}==8'h00)begin
                    times_24s[3:0] <=4'h0; 
                end
                else begin
                    times_24s[3:0] <=4'h9;
                end
            end
            else if(times_24s[3:0]==4'h0)begin
                times_24s[3:0] <=4'h9;
            end
            else begin
                times_24s[3:0] <=times_24s[3:0]-1'b1;
            end
        end
        else begin
            times_24s[3:0] <=times_24s[3:0];
        end
    end
    //计数器模块高位 秒计时
    always@(posedge mclk or negedge ext_rst_n)
    begin
        if(!ext_rst_n)begin
            times_24s[15:12] <=4'h2;        
        end
        else if(en_24s==1'b0)begin
            times_24s[15:12] <=4'h2;
        end
        else if(en_cnt==1'b1)begin
            times_24s[15:12] <=times_24s[15:12];
        end
        else if({times_24s[15:12],times_24s[11:8]}==8'h00)begin
            times_24s[15:12] <=4'h0; 
        end
        else if(times_24s[11:8]==4'h0)begin
            times_24s[15:12] <=times_24s[15:12]-1'b1;
        end
        else begin
            times_24s[15:12] <=times_24s[15:12];
        end
    end
    //计数器模块低位 秒计时
    always@(posedge mclk or negedge ext_rst_n)begin
        if(!ext_rst_n)begin
            times_24s[11:8] <=4'h3;
        end
        else if(en_24s==1'b0)begin
            times_24s[11:8] <=4'h3;
        end
        else if(en_cnt==1'b1)begin
            times_24s[11:8] <=times_24s[11:8];
        end
        else if({times_24s[15:12],times_24s[11:8]}==8'h00) begin
            times_24s[11:8] <=4'h0;
        end
        else if(times_24s[11:8]==4'h0)begin
            times_24s[11:8] <=4'h9;
        end
        else begin
            times_24s[11:8] <=times_24s[11:8]-1'b1;
        end
    end
endmodule

计分模块

module soring(clk,ext_rst_n,key_press,en_sore,sore,led
    );
    input             clk   ;//时钟信号
    input             ext_rst_n     ;//复位信号
/*     input             key_down      ;//切换记分
    input             key_left      ;//1分
    input             key_entr      ;//2分
    input             key_righ      ;//3分 */
    input             en_sore       ;//积分使能位
    input        [3:0] key_press    ;    
    output     [15:0] sore          ;//15-8 7-0分别为两个队的分数
    output reg  [1:0] led           ;//
    
    //计分标志模块
    reg sore_f;
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            sore_f<=1'b0;
        end
        else if(en_sore==1'b0)begin
            sore_f<=1'b0;
        end
        else if(key_press[3]==1'b1)begin
            sore_f<=~sore_f;
        end
        else begin
            sore_f<=sore_f;
        end
    end
    //led指示模块
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            led<=2'b11;
        end
        else if(en_sore==1'b0)begin
            led<=led;
        end
        else if(sore_f==1'b0)begin
            led<=2'b10;
        end
        else begin
            led<=2'b01;
        end
    end
    //第一队比分
    reg [7:0] sore_1;
    assign sore[15:12]=sore_1/10;
    assign sore[11:8]=sore_1%10;
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            sore_1<=8'h00;
        end
        else if(en_sore==1'b0)begin
            sore_1<=sore_1;
        end
        else if(sore_1==8'd99)begin
            sore_1<=8'h00;
        end
        else if(key_press[0]==1'b1&&sore_f==1'b0)begin
            sore_1<=sore_1+1'b1;
        end
        else if(key_press[1]==1'b1&&sore_f==1'b0)begin
            sore_1<=sore_1+2'b10;
        end
        else if(key_press[2]==1'b1&&sore_f==1'b0)begin
            sore_1<=sore_1+2'b11;
        end
        else begin
            sore_1<=sore_1;
        end
    end
    //第二队比分
    reg [7:0] sore_2;
    assign sore[7:4]=sore_2/10;
    assign sore[3:0]=sore_2%10;
    always@(posedge clk or negedge ext_rst_n)begin
        if(ext_rst_n==1'b0)begin
            sore_2<=8'h00;
        end
        else if(en_sore==1'b0)begin
            sore_2<=sore_2;
        end
        else if(sore_2==8'd99)begin
            sore_2<=8'h00;
        end
        else if(key_press[0]==1'b1&&sore_f==1'b1)begin
            sore_2<=sore_2+1'b1;
        end
        else if(key_press[1]==1'b1&&sore_f==1'b1)begin
            sore_2<=sore_2+2'b10;
        end
        else if(key_press[2]==1'b1&&sore_f==1'b1)begin
            sore_2<=sore_2+2'b11;
        end
        else begin
            sore_2<=sore_2;
        end
    end
endmodule

显示模块

odule seg
(    
    clk,
    rst_n,
    num1,
    num2,
    num3,
    num4,
    SEG1,
    AN1
);

input                         clk;                    
input                        rst_n;                    
input             [ 3:0]        num1;            
input             [ 3:0]        num2;    
input             [ 3:0]        num3;            
input             [ 3:0]        num4;        
output reg     [ 3:0]             AN1 =2'b0;                    
output reg     [ 7:0]             SEG1 = 8'h0;

reg            [26:0]        cnt1=0;                            
reg             [1:0]            led_cnt=0;                            
reg         [ 3:0]        led_data=0;                
 
parameter SEC_TIME_PAR = 100_000; //定义数码管动态扫描时间
 
always @ (posedge clk or negedge rst_n)  
begin
    if(!rst_n)                                        
        cnt1 <= 27'h0;                            
    else    if(cnt1 == SEC_TIME_PAR )    //扫描时间计数器,记到SEC_TIME_PAR时,清零,重新计数        
        cnt1 = 27'h0;                        
    else
        cnt1 = cnt1 + 27'h1;            //重新计数                
end

always @ (posedge clk or negedge rst_n)  
begin
    if(!rst_n)                                    
        led_cnt <= 1'b0;                        
    else if(cnt1 == SEC_TIME_PAR )                    
        led_cnt = led_cnt + 1'b1;        //选择计数器加1,依次为0  1  2 3 .....        
    else
        led_cnt = led_cnt;                    
end

always @ (*)
begin
    case(led_cnt)
        0 : led_data = num1;        //显示        
        1 : led_data = num2;        //显示    
        2 : led_data = num3;        //显示        
        3 : led_data = num4;        //显示            
        default: led_data = 2'b0;                    
    endcase
end

always @ (*)
begin
    case (led_cnt)  
        0 : AN1 = 4'b1000;         //循环选通两个数码管的位选            
        1 : AN1 = 4'b0100;  
        2 : AN1 = 4'b0010;         //循环选通两个数码管的位选            
        3 : AN1 = 4'b0001;         
    default : AN1 = 4'b0;                
    endcase     
end

always @ (*)
begin
  case(led_data)
        0  : SEG1[7:0] = 8'b00111111;   //数码管译码    
        1  : SEG1[7:0] = 8'b00000110;      //数码管译码
        2  : SEG1[7:0] = 8'b01011011;   //数码管译码
        3  : SEG1[7:0] = 8'b01001111;   //数码管译码
        4  : SEG1[7:0] = 8'b01100110;      //数码管译码
        5  : SEG1[7:0] = 8'b01101101;   //数码管译码
        6  : SEG1[7:0] = 8'b01111101;   //数码管译码
        7  : SEG1[7:0] = 8'b00000111;   //数码管译码
        8  : SEG1[7:0] = 8'b01111111;   //数码管译码
        9  : SEG1[7:0] = 8'b01101111;      //数码管译码
        10 : SEG1[7:0] = 8'b00000000;   //数码管译码
        default :SEG1[7:0] = 8'b0;    //      
  endcase
end
 
endmodule
显示模块2

module seg
(    
    clk,
    rst_n,
    num1,
    num2,
    num3,
    num4,
    SEG1,
    AN1
);

input                         clk;                    
input                        rst_n;                    
input             [ 3:0]        num1;            
input             [ 3:0]        num2;    
input             [ 3:0]        num3;            
input             [ 3:0]        num4;        
output reg     [ 3:0]             AN1 =2'b0;                    
output reg     [ 7:0]             SEG1 = 8'h0;

reg            [26:0]        cnt1=0;                            
reg             [1:0]            led_cnt=0;                            
reg         [ 3:0]        led_data=0;                
 
parameter SEC_TIME_PAR = 100_000; //定义数码管动态扫描时间
 
always @ (posedge clk or negedge rst_n)  
begin
    if(!rst_n)                                        
        cnt1 <= 27'h0;                            
    else    if(cnt1 == SEC_TIME_PAR )    //扫描时间计数器,记到SEC_TIME_PAR时,清零,重新计数        
        cnt1 = 27'h0;                        
    else
        cnt1 = cnt1 + 27'h1;            //重新计数                
end

always @ (posedge clk or negedge rst_n)  
begin
    if(!rst_n)                                    
        led_cnt <= 1'b0;                        
    else if(cnt1 == SEC_TIME_PAR )                    
        led_cnt = led_cnt + 1'b1;        //选择计数器加1,依次为0  1  2 3 .....        
    else
        led_cnt = led_cnt;                    
end

always @ (*)
begin
    case(led_cnt)
        0 : led_data = num1;        //显示        
        1 : led_data = num2;        //显示    
        2 : led_data = num3;        //显示        
        3 : led_data = num4;        //显示            
        default: led_data = 2'b0;                    
    endcase
end

always @ (*)
begin
    case (led_cnt)  
        0 : AN1 = 4'b1000;         //循环选通两个数码管的位选            
        1 : AN1 = 4'b0100;  
        2 : AN1 = 4'b0010;         //循环选通两个数码管的位选            
        3 : AN1 = 4'b0001;         
    default : AN1 = 4'b0;                
    endcase     
end

always @ (*)
begin
  case(led_data)
        0  : SEG1[7:0] = 8'b00111111;   //数码管译码    
        1  : SEG1[7:0] = 8'b00000110;      //数码管译码
        2  : SEG1[7:0] = 8'b01011011;   //数码管译码
        3  : SEG1[7:0] = 8'b01001111;   //数码管译码
        4  : SEG1[7:0] = 8'b01100110;      //数码管译码
        5  : SEG1[7:0] = 8'b01101101;   //数码管译码
        6  : SEG1[7:0] = 8'b01111101;   //数码管译码
        7  : SEG1[7:0] = 8'b00000111;   //数码管译码
        8  : SEG1[7:0] = 8'b01111111;   //数码管译码
        9  : SEG1[7:0] = 8'b01101111;      //数码管译码
        10 : SEG1[7:0] = 8'b00000000;   //数码管译码
        default :SEG1[7:0] = 8'b0;    //      
  endcase
end
 
endmodule
顶层

module top(
input        clk,            //100MHZ
input        ext_rst_n,

output    [7:0] seg_cs_pin,
output    [7:0] seg_data_0_pin,
output  [7:0] seg_data_1_pin,

input         switch0         ,//暂停开关      按键拨下为暂停
input         switch1         ,//24s使能开关   按键拨下为24S使能
input         switch2         ,//显示分数与节数切换位

input             S1      ,//切换记分
input             S3      ,//1分
input             S2      ,//2分
input             S0      ,//3分

output    [3:0]    led

);
    
    
    
//左边4个数码管显示分数      右边4个数码管显示时间
wire key_score,key_score3,key_score2,key_score1;

wire   [15:0] times_24s       ;
    wire   [15:0] times_12m       ;
    wire   [15:0] times_sore      ;
    wire          en_cnt          ;
    wire          en_24s          ;
    wire          clk_1hz         ;
key_module key_inst
(
    .clk    (clk),
    .rst_n    (ext_rst_n),
    .KEY    ({~S1,~S0,~S2,~S3}),
    .key_out({key_score,key_score3,key_score2,key_score1})
);

//分频100MHZ变为1HZ
    div d1(
    .clk(clk),
    .ext_rst_n(ext_rst_n),
    .mclk(clk_1hz)
    );

//控制电路
    control con1(
    .clk(clk),
    .ext_rst_n(ext_rst_n),
    .switch1(switch0),
    .switch2(switch1),
    //.switch3(switch2),
    .en_cnt(en_cnt),
    .en_24s(en_24s)
    );

//计分模块
    soring so1(
    .clk(clk),
    .ext_rst_n(ext_rst_n),
    .key_press({key_score,key_score3,key_score2,key_score1}),
    .en_sore(switch2),
    .sore(times_sore),
    .led(led[3:2])
    );

//12分钟倒计时模块
    counter_12min c1(
    .clk(clk),
    .mclk(clk_1hz),
    .ext_rst_n(ext_rst_n),
    .en_24s(en_24s),
    .en_cnt(en_cnt),
    .times_12m(times_12m),
    .led(led[0])
    );
    
    //24秒倒计时模块
    counter_24 c2(
    .clk(clk),
    .mclk(clk_1hz),
    .ext_rst_n(ext_rst_n),
    .en_24s(en_24s),
    .en_cnt(en_cnt),
    .times_24s(times_24s),
    .led(led[1])
    );

//左边4个数码管显示分数      右边4个数码管显示时间

reg        [3:0]    jieshu;

always@(posedge clk)
begin
if(!ext_rst_n)
    jieshu <=1;
    
else if(switch2==0)
    begin
    if(key_score1)
        jieshu <= jieshu + 1;
    end
end
//switch2 拨下去后,显示节数,此时按S3按键可以使得节数加1
wire    [31:0] Disp_data;
assign Disp_data[15:0] = en_24s ? times_24s : times_12m;

assign Disp_data[31:16] = (switch2==0)?{12'd0,jieshu}: times_sore;

//右边4数码管    
seg seg_u1
(    
    .clk        (clk),
    .rst_n        (ext_rst_n),
    .num1        (Disp_data[3:0]),
    .num2        (Disp_data[7:4]),
    .num3        (Disp_data[11:8]),
    .num4        (Disp_data[15:12]),
    .SEG1        (seg_data_1_pin),
    .AN1        (seg_cs_pin[7:4])
);

//左边4个
seg seg_u2
(    
    .clk        (clk),
    .rst_n        (ext_rst_n),
    .num1        (Disp_data[19:16]),
    .num2        (Disp_data[23:20]),
    .num3        (Disp_data[27:24]),
    .num4        (Disp_data[31:28]),
    .SEG1        (seg_data_0_pin),
    .AN1        (seg_cs_pin[3:0])
);    
endmodule

FPGA篮球计分设计相关推荐

  1. FPGA篮球记分器-Verilog

    目录 一.摘要 1.1功能: 1.2要求: 1.3要点: 二.各模块的总结 2.1.功能描述 2.2系统结构框图 2.3I/O说明 三.各模块详细设计 3.1倒计时模块: 3.2两队比分模块 3.3 ...

  2. 【项目实训】篮球计分系统设计(无线nRF905版本)

    将单片机项目实训--篮球计分系统(无线nRF905版本)分享出来,如有不足,敬请指出. [实验图片] [视频视频] [项目实训]篮球积分系统(nRF905版本) 目录 一.设计要求 二.方案设计 三. ...

  3. fpga芯片架构设计与实现 pdf_FPGA设计的8大重要知识点,你都get了吗

    1. 面积与速度的平衡与互换 这里的面积指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用消耗的FF(触发器)和LUT(查找表)来衡量,更一般的衡量方式可以用设计所占的等价逻辑门数. ...

  4. FPGA学习及设计中的注意事项

    为什么80%的码农都做不了架构师?>>>    FPGA学习及设计中的注意事项 1.基础问题 FPGA的基础就是数字电路和HDL语言,想学好FPGA的人,建议床头都有一本数字电路的书 ...

  5. FPGA异步时钟设计中的同步策略

    1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免. ...

  6. 基于FPGA的FFT设计

    基于FPGA的FFT设计 1.verilog源代码还有实验报告 2.FFT的主要算法 FFT算法并不是一种新的理论算法,它只是用来计算DFT的快速算法,所以它是以DFT为基础的.本课题采用的是基-2 ...

  7. FPGA中计数器设计探索

    FPGA中计数器设计探索,以计数器为32位为例: 第一种方式,直接定义32位计数器. reg [31:0]count; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模 ...

  8. (90)FPGA十进制计数器设计-面试必问(十四)(第18天)

    (90)FPGA十进制计数器设计(第18天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA十进制计数器设计-面试必问(十四)(第18天) 5)技术交流 ...

  9. (89)FPGA三分频设计,面试必问(十三)(第18天)

    (89)FPGA三分频设计,面试必问(十三)(第18天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA三分频设计,面试必问(十三)(第18天) 5)技术 ...

最新文章

  1. RDKit:基于支持向量回归预测logP
  2. 7.Set集合总结(TreeSet集合和HashSet集合)
  3. SPI 的主模式和从模式
  4. 转载:谢谢原作者: 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)
  5. Nginx使用之location和rewrite用法
  6. 访问文件服务器提示“服务器存储空间不足”的解决方法
  7. java public_java中public,private,protected和default的区别
  8. python学习基础语法_python学习-基础语法
  9. Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
  10. 2022年电工杯A题高比例风电电力系统储能运行及配置分析参考代码
  11. 在飞桨平台做图像分类-1 制作基于飞桨的数据集|CSDN创作打卡
  12. 计算机基础知识和运用2作图,2020年9月统考《计算机应用基础》基础知识试题及答案2...
  13. Mblog 系统配置
  14. ubb html编辑器,GitHub - ibone/ubb-editor: web编辑器
  15. 分布式数据库之TiDB
  16. 我去扒了杜蕾斯的微博
  17. 机器学习 之 Kmeans聚类
  18. allegro标注尺寸设置_Allegro中尺寸标注参数的设置-EDA/PCB-与非网
  19. SWUST OJ492: 荷兰国旗问题
  20. 盈透api python封装_盈透证券 简单API 实战

热门文章

  1. 《终身成长》学习总结
  2. conda使用清华镜像安装pytorch
  3. 美团(iOS客户端)面经
  4. python求字典的平均值_获取字典列表中值的平均值
  5. 怎么把彩色的照片变黑白色?
  6. win7 共享打印机后,客户端连接提示:打印机已删除(0x00000709)
  7. win10 系统开启自带热点,手机无法连接(连接超时)
  8. 关于h5使用高德地图,没有获取经纬度
  9. window10无法访问局域网共享文件夹
  10. html下拉加载实现原理,GitHub - sybiele/wxPull: 原生JS实现微信公众号或网页使用下拉加载和上拉刷新...