FPGA第三个实验---静态数码管显示

        设计如下:数码管从1到F循环变化,变化一次的时间为0.5s

FPGA第三个实验---静态数码管显示_第1张图片

        FPGA顶层模块例化两个模块:计时模块,数码管静态显示模块。计时模块几时到0.5s时的标志信号flag传递给数码管静态显示模块,数码管静态显示模块接收到此信号时显示的数值加1。

        计时模块:计时模块对系统时钟进行计数,当计时到给定值时输出标志信号。

        数码管静态显示模块:数码管静态显示模块在数码管上以静态方式显示数值。

        顶层模块代码:

        

module smg_jtxs(         //定义两个输入信号,时钟信号s_clk,复位信号rst
    input s_clk,         //两个输出信号,数码管位选信号wx,段选信号dx
    input rst,
    output [5:0] wx,
    output [7:0] dx
);
parameter max_t = 25'd2500_0000;   //定义延时参数变量,系统时钟50MHz,计数2500-0000刚好为0.5s
wire a_flag;                       //定义计数标志变量,当计满0.5s,标志位使数码管发生变化
smg_jtqd u_smg_jtqd(
    .s_clk (s_clk),
    .rst (rst),
    .s_flag (a_flag),
    .wx (wx),
    .dx (dx)
);
t_c #(.max_c (max_t)) u_t_c(
    .s_clk (s_clk),
    .rst (rst),
    .flag (a_flag)
);
endmodule

        计时模块代码:

module t_c(                       //定义两个输入变量,时钟信号s_clk,复位信号rst             
    input s_clk,                  //定义一个输出变量flag
    input rst,
    output reg flag
);
parameter max_c = 2500_0000;      //定义计数时间0.5s
reg [24:0] c;
always @(posedge s_clk or negedge rst)  //当S_CLK上升沿或者rst下降沿时触发
begin
    if(!rst) begin                      //如果复位信号有效,标志变量falg,计数值c初始化清零
        flag <= 1'b0;
        c <= 24'b0;
    end
    else if(c < max_c - 1'b1) begin     //如果计数值小于0.5s,标志位flag为0,计数值加1
        flag <= 1'b0;
        c <= c + 1'b1;                  //如果计数值达到0.5s,标志位flag变1,计数值清零
    end
    else begin 
        flag <= 1'b1;
        c <= 24'b0;
    end
end
endmodule

        数码管静态显示驱动模块:

module smg_jtqd(                  //定义输入时钟信号s_clk,复位信号rst,标志信号s_clk
    input s_clk,                  //定义输出信号位选信号wx,段选信号dx,这两个信号控制数码管显
    input rst,                    //示
    input s_flag,
    output reg [5:0] wx,
    output reg [6:0] dx
); 
reg [3:0] num;                    //定义状态选择变量,1~f15个变量状态
always @(posedge s_clk or negedge rst)  //s_clk上升沿或者rst下降沿触发
begin 
    if(!rst)                         //复位信号有效位选信号置1,否则置0
        wx <= 6'b111111;
    else
        wx <= 6'b000000;
 end
always @(posedge s_clk or negedge rst)   //s_clk上升沿或者rst下降沿触发
begin
    if(!rst)                             //复位信号有效,状态选择变量num为0
        num <= 4'h0;
    else if(s_flag) begin                //当计满0.5s时,标志信号为1,状态变量加1
        if(num < 4'hf)
            num <= num + 1'b1;           //当状态变量num

 

你可能感兴趣的:(FPGA学习)