• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

FPGA1驱动MAX7219的问题

蓝蓝的天 2018-05-09 浏览量:1352

先上程序:

module max7219(clkrst_nclk1loaddin);
input clkrst_n;
output clk1loaddin;


//reg[11:0] cnt;
reg[11:0] cnt1;


always @(posedge clk or negedge rst_n)
        if(!rst_n) 
                        cnt1 <= 0;
                        
                
        else if(cnt1==12'd2560) 
                        cnt1 <= 0;
                        
        else cnt1 <= cnt1+1'b1;
                
reg clk1_rdin_r;
function Write_Max7219_byte;
input [7:0] byte;

        
        //always @(negedge clk1)
        begin
                case(cnt1)
                        12'd0:
                                begin
                                clk1_r=0;
                                din_r=byte[7];
                                clk1_r=1;
                                end
                        12'd320:
                                begin
                                clk1_r=0;
                                din_r=byte[6];
                                clk1_r=1;
                                end
                                
                        12'd640:
                                begin
                                clk1_r=0;
                                din_r=byte[5];
                                clk1_r=1;
                                end
                                
                        12'd960:
                                begin
                                clk1_r=0;
                                din_r=byte[4];
                                clk1_r=1;
                                end
                        12'd1280:
                                begin
                                clk1_r=0;
                                din_r=byte[3];
                                clk1_r=1;
                                end
                        12'd1600:
                                begin
                                clk1_r=0;
                                din_r=byte[2];
                                clk1_r=1;
                                end
                        12'd1920:
                                begin
                                clk1_r=0;
                                din_r=byte[1];
                                clk1_r=1;
                                end
                        12'd2240:
                                begin
                                clk1_r=0;
                                din_r=byte[0];
                                clk1_r=1;
                                end

                endcase
        end
endfunction

assign clk1=clk1_r;
assign din=din_r;

reg load_r;

function Write_Max7219;
input [7:0] addr;
input [7:0] dat;
reg ab;
        //always @(posedge clk or negedge rst_n)
                begin
                //load_r<=1'b0;
                a=Write_Max7219_byte(addr);
                b=Write_Max7219_byte(dat);
                //load_r=1'b1;
                end
endfunction
assign load=load_r;

reg a;
always @(posedge clk)

        begin
        load_r<=1'b0;
        //a=Write_Max7219(SHUT_DOWN 8'd1);   //Normal Operation XXXXXXX1 Shutdown Mode   XXXXXXXX0
        a=Write_Max7219(8'hc 8'd1); 
        a=Write_Max7219(8'hf 8'd0);   //Normal Operation XXXXXXX0 Display Test Mode


         a=Write_Max7219(8'h9 8'hff);   //Decode Mode Select D7~D0 1 B decode 0 No decode
         a=Write_Max7219(8'hb 8'd4);   //SCAN LIMIT 0~7 0xX0~0xX7
         a=Write_Max7219(8'ha 8'd4);   //Set Intensity   0xX0~0xXf
         a=Write_Max7219(11);
         a=Write_Max7219(22);
         a=Write_Max7219(38);
         a=Write_Max7219(46);
        load_r<=1'b1;
        end
endmodule

我写了个FPGA驱动MAX7219的程序,下载进去以后,本来四个
数码管应该显示1286的,可是要么全亮,要么不亮。
请大神看看,哪里有问题呀?谢谢!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 时序逻辑用组合赋值,这个肯定是错误的写法,函数嵌套,verilog里不行,你的程序只会执行a=Write_Max7219(46);而你这个函数调用还少一个参数,完整的c语言代码,而不是fpga能用的代码。
    • 发布于 2018-05-10
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 感觉楼主还是在用C的思维去写FPGA的程序,这样是很容易出逻辑错误的。

    你的这个问题,应该就是逻辑时序上的问题,可以先进行软件仿真一下,看看波形。

    • 发布于2018-05-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 一个变量只能在一个always中进行赋值,不可以在多个always中使用赋值的。
    • 发布于2018-05-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

FPGA1驱动MAX7219的问题