微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 之前做了一个CPLD+SRAM的方案 , 但是屏幕上总是跳乱点。哪位能帮忙分析一下

之前做了一个CPLD+SRAM的方案 , 但是屏幕上总是跳乱点。哪位能帮忙分析一下

时间:10-02 整理:3721RD 点击:
硬件电路检测了也没有找到问题的原因在哪儿  ,哪位能帮忙分析一下原因呢?  估计应该是SRAM的问题 这里附上SRAM的代码 请各位帮忙分析一下。
//-----------------------------------------------
//SRAM address switch. User's SRAM operate have higher priority then display SRAM operate.
//User write SRAM when regaddr=2 and read SRAM no need regaddr.
//-----------------------------------------------
always @ (posedge sys_clk, negedge reset) begin
    if (!reset)
                addr <= `TD 18'd0;
        else if ((nwr_state == 2'b01 && ncs_state[1] == 1'd0 && dnc_state[1] == 1'd1 && regaddr == 2'd2) || (nrd_state == 2'b10 && ncs_state[0] == 1'd0 && dnc_state[1] == 1'd1)) begin
                addr[17] <= `TD reg_set[2];
                addr[16:0] <= `TD reg_x + reg_y * 9'd320;
        end
        else if (clear_flag != 2'd0 && clkcount == 3'd3)
                addr <= `TD {reg_set[2], dispaddr};
    else if (clkcount == 3'd1 || clkcount == 3'd2)
        addr <= `TD {reg_set[3], dispaddr};
end
//-----------------------------------------------
//Read display color data form SRAM
//-----------------------------------------------
always @ (posedge sys_clk, negedge reset) begin
    if (!reset)
        rgb <= `TD 16'd0;
    else if (we != 1'd0 && nrd_flag != 1'd1 && (clkcount == 3'd2 || clkcount == 3'd3))
        rgb <= `TD io;
end
//-----------------------------------------------
//Write SRAM control.
//-----------------------------------------------
always @ (posedge sys_clk, negedge reset) begin
    if (!reset)
                we <= `TD 1'd1;
    else if (nwr_state == 2'b01 && ncs_state[1] == 1'd0 && dnc_state[1] == 1'd1 && regaddr == 2'd2)
        we <= `TD 1'd0;
    else if (clear_flag != 2'd0 && clkcount == 3'd3)
        we <= `TD 1'd0;
    else
            we <= `TD 1'd1;
end
//-----------------------------------------------
//It's a SRAM read flag, like we.
//-----------------------------------------------
always @ (posedge sys_clk, negedge reset) begin
    if (!reset)
                nrd_flag <= `TD 1'd0;
    else if (nrd_state == 2'b10 && ncs_state[0] == 1'd0 && dnc_state[1] == 1'd1)
        nrd_flag <= `TD 1'd1;
    else
            nrd_flag <= `TD 1'd0;
end

//-----------------------------------------------
//Read SRAM control
//-----------------------------------------------
always @ (posedge sys_clk, negedge reset) begin
    if (!reset)
        reg_ram <= `TD 16'd0;
    else if (nrd_flag == 1'd1)
        reg_ram <= `TD io;
    else if (nwr_state == 2'b01 && ncs_state[1] == 1'd0 && dnc_state[1] == 1'd1 && regaddr == 3'd4)
            reg_ram <= `TD db_state[15:0];
end

屏幕总是飞乱点出来


大神能帮忙分析分析吗?   十分着急!

你是不是买到的SRAM是翻新的,我同样的电路和程序,两批板,一批好使,一批不好使,不好使的后面被证明全部是翻新的,打磨过,可能是低速改的高速的

感谢小编回复,换了一批新的SRAM 还是一样有这样的问题,同一批板就有一半多不好使的,偶尔换一个能解决问题。但是还是有的不能解决。寻思是不是SRAM时序没有写好。

你要先写一个测试程序,网sram里写一批数据在读出来,看看数据是不是有错,有错的话看看规律,看看是哪几bit错了,再用示波器点点波形,看看是不是时钟沿和数据的相位关系的问题!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top