找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 549|回复: 0
收起左侧

基于状态机和VerilogHDL的学号显示控制电路设计

[复制链接]
ID:1126666 发表于 2024-6-24 01:19 | 显示全部楼层 |阅读模式
1 设计任务

基于VerilogHDL和状态机,完成学号显示控制电路设计。

例如学号:21002495

功能要求如下:

-用八个数码管显示;

-学号按照10hz的时钟的节拍从右而左进入,从学号的高位开始进入;

-8位学号全部进入后停顿5s,然后全部熄灭,再重新开始;

设计要求:

-设计要用状态机;                                

-信号源模块输出10hz的基准时钟,用于同步学号显示;

-设计应有的BCD码和7段码输出,仿真波形要有BCD学号;

分频模块:

module divider50M_10hz(
            input clk_50M,
            input reset_n,
            output reg clk_10hz);
            reg [25:0] cnt;
always@(posedge clk_50M or posedge reset_n)
begin if(reset_n)
          cnt<=26'b0;
       else begin
          cnt=cnt+1'b1;
          if(cnt==5000_000) //50M/10=5M,占空比为50%
             cnt<=1'b0;
           else if(cnt<2500_000)
             clk_10hz=1'b0;        
           else if(cnt>=2500_000)
             clk_10hz=1'b1;   
            end
end
endmodule


学号显示控制模块

module xuehao
(
    clk,
    q1, q2, q3, q4, q5, q6, q7, q8,
    rst
);

input clk;
input rst;
output reg [3:0] q1, q2, q3, q4, q5, q6, q7, q8;    //输出给译码器进行译码,用于学号输出的输出端
integer     i =  1'd 0;            //用于延时,给脉冲计数的临时变量
integer state = 4'b 0000;    //状态变化

//学号:21002495的二进制码
parameter     temp_1 = 4'b 0010, temp_2 = 4'b 0001,temp_3 = 4'b 0000,temp_4 = 4'b 0000,
               temp_5 = 4'b 0010, temp_6 = 4'b 0100,temp_7 = 4'b 1001,temp_8 = 4'b 0101;


//给9种状态进行编码,S0--S8
parameter S0 = 4'b 0000, S1 = 4'b 0001, S2 = 4'b 0010, S3 = 4'b 0011,
             S4 = 4'b 0100, S5 = 4'b 0101, S6 = 4'b 0110, S7 = 4'b 0111,
             S8 = 4'b 1000;


always @(posedge clk or posedge rst)
begin if(rst)
            begin
            q1 = 4'b 1111; q2 = 4'b 1111; q3 = 4'b 1111; q4 = 4'b 1111;
                q5 = 4'b 1111; q6 = 4'b 1111; q7 = 4'b 1111; q8 = 4'b 1111;
           end
        else case(state)
            S0:     //初始状态,输出全为1,使数码管熄灭
            begin
                state <= S1;
                q1 = 4'b 1111; q2 = 4'b 1111; q3 = 4'b 1111; q4 = 4'b 1111;
                q5 = 4'b 1111; q6 = 4'b 1111; q7 = 4'b 1111; q8 = 4'b 1111;
            end
            S1: begin q1 = temp_1; state <= S2;end
         S2: begin q2 = temp_1;q1 = temp_2; state <= S3;end
            S3: begin q3 = temp_1; q2 = temp_2;q1 = temp_3; state <= S4;end
            S4: begin q4 = temp_1; q3 = temp_2; q2 = temp_3; q1 = temp_4;state <= S5;end
            S5: begin
                q5 = temp_1; q4 = temp_2; q3 = temp_3; q2 = temp_4;
                q1 = temp_5;
                state <= S6;
                end
            S6: begin
                q6 = temp_1; q5 = temp_2; q4 = temp_3; q3 = temp_4;
                q2 = temp_5;q1 = temp_6;
                state <= S7;
                end
            S7: begin
                q7 = temp_1; q6 = temp_2; q5 = temp_3; q4 = temp_4;
                q3 = temp_5; q2 = temp_6; q1 = temp_7;
                state <= S8;
                end
         S8: begin
                if(i >= 50)        //计数50个上升沿后,再转移到S0状态,即延时5s
                begin
                    state <= S0;
                    i = 0; end
                else
                begin
                    i= i + 1;
                    q8 = temp_1; q7 = temp_2; q6 = temp_3; q5 = temp_4;
                    q4 = temp_5; q3 = temp_6; q2 = temp_7; q1 = temp_8;
                end
            end
            default:
            begin
                q1 = 4'b 1111; q2 = 4'b 1111; q3 = 4'b 1111; q4 = 4'b 1111;
                q5 = 4'b 1111; q6 = 4'b 1111; q7 = 4'b 1111; q8 = 4'b 1111;
            end
        endcase
end
endmodule


译码模块:

module my4_7decoder
(
    in,
    out,
    en
);

input [3:0]in;
input en;
output reg [6:0] out;

always @(*)
begin
    if(en)
        out = 7'b 111_1111;
    else
    begin
        case(in) //g-a //省略了一部分数字
            4'b 0000: out = 7'b 100_0000;
            4'b 0001: out = 7'b 111_1001;
            4'b 0010: out = 7'b 010_0100;
            4'b 0011: out = 7'b 011_0000;
            4'b 0100: out = 7'b 001_1001;
            4'b 0101: out = 7'b 001_0010;
            4'b 0110: out = 7'b 000_0011;
            4'b 0111: out = 7'b 111_1000;
            4'b 1000: out = 7'b 000_0000;
            4'b 1001: out = 7'b 001_0000;
            4'b 1010: out = 7'b 010_0111;
            4'b 1111: out = 7'b 111_1111;
            default:  out = 7'b 111_1111;
        endcase

    end
end
endmodule


顶层设计:



绑定管脚:

管脚:
clk_50M                 Input    PIN_AD15    7    B7_N3    PIN_AD15    3.3-V LVTTL (default)        24mA (default)   
en                 Input    PIN_L7    2    B2_N1    PIN_L7    3.3-V LVTTL (default)        24mA (default)   
reset_n             Input    PIN_L8    2    B2_N1    PIN_L8    3.3-V LVTTL (default)        24mA (default)   
segcode0[6]        Output    PIN_AD12    8    B8_N1    PIN_AD12    3.3-V LVTTL (default)        24mA (default)   
segcode0[5]        Output    PIN_AD11    8    B8_N2    PIN_AD11    3.3-V LVTTL (default)        24mA (default)   
segcode0[4]        Output    PIN_AF10    8    B8_N2    PIN_AF10    3.3-V LVTTL (default)        24mA (default)   
segcode0[3]        Output    PIN_AD10    8    B8_N2    PIN_AD10    3.3-V LVTTL (default)        24mA (default)   
segcode0[2]        Output    PIN_AH9    8    B8_N1    PIN_AH9    3.3-V LVTTL (default)        24mA (default)   
segcode0[1]        Output    PIN_AF9    8    B8_N2    PIN_AF9    3.3-V LVTTL (default)        24mA (default)   
segcode0[0]        Output    PIN_AE8    8    B8_N3    PIN_AE8    3.3-V LVTTL (default)        24mA (default)   
segcode1[6]        Output    PIN_AD17    7    B7_N2    PIN_AD17    3.3-V LVTTL (default)        24mA (default)   
segcode1[5]        Output    PIN_AF17    7    B7_N2    PIN_AF17    3.3-V LVTTL (default)        24mA (default)   
segcode1[4]        Output    PIN_AE17    7    B7_N3    PIN_AE17    3.3-V LVTTL (default)        24mA (default)   
segcode1[3]        Output    PIN_AG16    7    B7_N3    PIN_AG16    3.3-V LVTTL (default)        24mA (default)   
segcode1[2]        Output    PIN_AF16    7    B7_N3    PIN_AF16    3.3-V LVTTL (default)        24mA (default)   
segcode1[1]        Output    PIN_AE16    7    B7_N3    PIN_AE16    3.3-V LVTTL (default)        24mA (default)   
segcode1[0]        Output    PIN_AG13    8    B8_N0    PIN_AG13    3.3-V LVTTL (default)        24mA (default)   
segcode2[6]        Output    PIN_AE19    7    B7_N1    PIN_AE19    3.3-V LVTTL (default)        24mA (default)   
segcode2[5]        Output    PIN_AB19    7    B7_N1    PIN_AB19    3.3-V LVTTL (default)        24mA (default)   
segcode2[4]        Output    PIN_AB18    7    B7_N1    PIN_AB18    3.3-V LVTTL (default)        24mA (default)   
segcode2[3]        Output    PIN_AG4    8    B8_N3    PIN_AG4    3.3-V LVTTL (default)        24mA (default)   
segcode2[2]        Output    PIN_AH5    8    B8_N3    PIN_AH5    3.3-V LVTTL (default)        24mA (default)   
segcode2[1]        Output    PIN_AF7    8    B8_N3    PIN_AF7    3.3-V LVTTL (default)        24mA (default)   
segcode2[0]        Output    PIN_AE7    8    B8_N3    PIN_AE7    3.3-V LVTTL (default)        24mA (default)   
segcode3[6]        Output    PIN_M6    2    B2_N2    PIN_M6    3.3-V LVTTL (default)        24mA (default)   
segcode3[5]        Output    PIN_M7    2    B2_N2    PIN_M7    3.3-V LVTTL (default)        24mA (default)   
segcode3[4]        Output    PIN_M8    2    B2_N1    PIN_M8    3.3-V LVTTL (default)        24mA (default)   
segcode3[3]        Output    PIN_N7    2    B2_N2    PIN_N7    3.3-V LVTTL (default)        24mA (default)   
segcode3[2]        Output    PIN_N10    2    B2_N2    PIN_N10    3.3-V LVTTL (default)        24mA (default)   
segcode3[1]        Output    PIN_P4    2    B2_N3    PIN_P4    3.3-V LVTTL (default)        24mA (default)   
segcode3[0]        Output    PIN_P6    2    B2_N3    PIN_P6    3.3-V LVTTL (default)        24mA (default)   
segcode4[6]        Output    PIN_M2    2    B2_N3    PIN_M2    3.3-V LVTTL (default)        24mA (default)   
segcode4[5]        Output    PIN_M1    2    B2_N3    PIN_M1    3.3-V LVTTL (default)        24mA (default)   
segcode4[4]        Output    PIN_N3    2    B2_N3    PIN_N3    3.3-V LVTTL (default)        24mA (default)   
segcode4[3]        Output    PIN_N2    2    B2_N3    PIN_N2    3.3-V LVTTL (default)        24mA (default)   
segcode4[2]        Output    PIN_P3    2    B2_N3    PIN_P3    3.3-V LVTTL (default)        24mA (default)   
segcode4[1]        Output    PIN_P2    2    B2_N3    PIN_P2    3.3-V LVTTL (default)        24mA (default)   
segcode4[0]        Output    PIN_P1    2    B2_N3    PIN_P1    3.3-V LVTTL (default)        24mA (default)   
segcode5[6]        Output    PIN_K5    2    B2_N1    PIN_K5    3.3-V LVTTL (default)        24mA (default)   
segcode5[5]        Output    PIN_K4    2    B2_N2    PIN_K4    3.3-V LVTTL (default)        24mA (default)   
segcode5[4]        Output    PIN_K1    2    B2_N2    PIN_K1    3.3-V LVTTL (default)        24mA (default)   
segcode5[3]        Output    PIN_L3    2    B2_N2    PIN_L3    3.3-V LVTTL (default)        24mA (default)   
segcode5[2]        Output    PIN_L2    2    B2_N3    PIN_L2    3.3-V LVTTL (default)        24mA (default)   
segcode5[1]        Output    PIN_L1    2    B2_N3    PIN_L1    3.3-V LVTTL (default)        24mA (default)   
segcode5[0]        Output    PIN_M3    2    B2_N3    PIN_M3    3.3-V LVTTL (default)        24mA (default)   
segcode6[6]        Output    PIN_E4    2    B2_N0    PIN_E4    3.3-V LVTTL (default)        24mA (default)   
segcode6[5]        Output    PIN_F4    2    B2_N0    PIN_F4    3.3-V LVTTL (default)        24mA (default)   
segcode6[4]        Output    PIN_G4    2    B2_N0    PIN_G4    3.3-V LVTTL (default)        24mA (default)   
segcode6[3]        Output    PIN_H8    2    B2_N0    PIN_H8    3.3-V LVTTL (default)        24mA (default)   
segcode6[2]        Output    PIN_H7    2    B2_N0    PIN_H7    3.3-V LVTTL (default)        24mA (default)   
segcode6[1]        Output    PIN_H4    2    B2_N1    PIN_H4    3.3-V LVTTL (default)        24mA (default)   
segcode6[0]        Output    PIN_H6    2    B2_N0    PIN_H6    3.3-V LVTTL (default)        24mA (default)   
segcode7[6]        Output    PIN_G1    2    B2_N2    PIN_G1    3.3-V LVTTL (default)        24mA (default)   
segcode7[5]        Output    PIN_H3    2    B2_N1    PIN_H3    3.3-V LVTTL (default)        24mA (default)   
segcode7[4]        Output    PIN_H2    2    B2_N2    PIN_H2    3.3-V LVTTL (default)        24mA (default)   
segcode7[3]        Output    PIN_H1    2    B2_N2    PIN_H1    3.3-V LVTTL (default)        24mA (default)   
segcode7[2]        Output    PIN_J2    2    B2_N2    PIN_J2    3.3-V LVTTL (default)        24mA (default)   
segcode7[1]        Output    PIN_J1    2    B2_N2    PIN_J1    3.3-V LVTTL (default)        24mA (default)   
segcode7[0]        Output    PIN_K3    2    B2_N2    PIN_K3    3.3-V LVTTL (default)        24mA (default)   
rst        Unknown                    3.3-V LVTTL (default)        24mA (default)   
<<new node>>                                       


全是知识点,满满细节控,看完点赞点关注~


2c31b89eb6504aa69c2729bef8d0793c.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表