用Verilog语言怎么写一个60进制的计数器然后显示在数码管上

2019-07-16 00:29发布

小弟刚学FPGA用的是EP4CE6  现在想写一个60进制的计数器 然后在数码管上显示出来   用verilog写   但想了好几天没想出来   去大侠指导下   或给个程序看看   小弟感激不尽。。。。。拜托了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
xqandwn
2019-07-18 11:24
本帖最后由 xqandwn 于 2015-10-18 22:23 编辑

汗!!回帖后代码格式变乱了……

下面是底层模块,显示电路自动忽略高位多余的0,自动添加小数点后的0:
module LED_7
(
        input          logic                        CLK               ,        //输入时钟,频率:
        input          logic                        RST_n            ,        //复位端口,低电平复位
        input          logic        [26:0]       data_num      ,         //待显示的数据
        input          logic        [2:0]         data_dot        ,         //输入数据小数点位置
        output        logic        [3:0]         DSEL             ,        //7段数码管【8--1】对应选择
        output        logic                        DEN               ,        //数码管使能,高电平有效
        output        logic        [7:0]         led7_out                //数据输出,最低位为小数点
);

parameter        led0 = 0,
                        led1 = 1,
                        led2 = 2,
                        led3 = 3,
                        led4 = 4,
                        led5 = 5,
                        led6 = 6,
                        led7 = 7;

logic                        DEN_reg                ;
logic [2:0]                DSEL_cnt                ;
logic [2:0]                DSEL_cnt_reg        ;
logic [7:0]                led7_out_reg        ;
logic [2:0]                data_dot_reg        ;
logic [26:0]              data_num_reg       ;




always@(posedge CLK,negedge Rst_n)
begin
        if(!RST_n)
        begin
                DSEL_cnt <= 3'b000;
                led7_out_reg <= 8'hFF;
        end
        else
        begin
                data_dot_reg <= data_dot;
                data_num_reg <= data_num;
               
                DSEL_cnt <= DSEL_cnt + 3'd1;
                DSEL_cnt_reg <= DSEL_cnt; //case(DSEL_cnt)相对DSEL_cnt会有一周期延时
               
                case(DSEL_cnt)
                        led0:
                                begin
                                        led7_decoder((data_num_reg)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 0);
                                        DEN_reg <= 1;
                                end
                        led1:
                                begin
                                        led7_decoder((data_num_reg/10)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 1);
                                        DEN_reg <= (data_num_reg >= 10)||(data_dot_reg >= 1);
                                end
                        led2:
                                begin
                                        led7_decoder((data_num_reg/100)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 2);
                                        DEN_reg <= (data_num_reg >= 100)||(data_dot_reg >= 2);
                                end
                        led3:
                                begin
                                        led7_decoder((data_num_reg/1000)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 3);
                                        DEN_reg <= (data_num_reg >= 1000)||(data_dot_reg >= 3);
                                end
                        led4:
                                begin
                                        led7_decoder((data_num_reg/10000)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 4);
                                        DEN_reg <= (data_num_reg >= 10000)||(data_dot_reg >= 4);
                                end
                        led5:
                                begin
                                        led7_decoder((data_num_reg/100000)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 5);
                                        DEN_reg <= (data_num_reg >= 100000)||(data_dot_reg >= 5);
                                end
                        led6:
                                begin
                                        led7_decoder((data_num_reg/1000000)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 6);
                                        DEN_reg <= (data_num_reg >= 1000000)||(data_dot_reg >= 6);
                                end
                        led7:
                                begin
                                        led7_decoder((data_num_reg/10000000)%10,led7_out_reg[7:1]);
                                        led7_out_reg[0] <= (data_dot_reg != 7);
                                        DEN_reg <= (data_num_reg >= 10000000)||(data_dot_reg >= 7);
                                end
                endcase
        
        end
end

assign        DSEL = DSEL_cnt_reg;
assign        DEN  = DEN_reg;
assign        led7_out = led7_out_reg;

task led7_decoder  //7段数码管 译码电路
(
        input        logic        [3:0]        data,
        output        logic        [6:0]        data_decoder
);
        
        case(data)
                0: data_decoder = 7'b1000000;
                1: data_decoder = 7'b1111001;
                2: data_decoder = 7'b0100100;
                3: data_decoder = 7'b0110000;
                4: data_decoder = 7'b0011001;
                5: data_decoder = 7'b0010010;
                6: data_decoder = 7'b0000010;
                7: data_decoder = 7'b1111000;
                8: data_decoder = 7'b0000000;
                9: data_decoder = 7'b0010000;
  default: data_decoder = 7'b0110110;
  endcase
  
endtask


endmodule

一周热门 更多>