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

2019-07-15 21:28发布

硬件电路检测了也没有找到问题的原因在哪儿  ,哪位能帮忙分析一下原因呢?  估计应该是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

屏幕总是飞乱点出来 屏幕总是飞乱点出来
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ly925
1楼-- · 2019-07-16 01:40
大神能帮忙分析分析吗?   十分着急!!!!!
小梅哥
2楼-- · 2019-07-16 06:58
 精彩回答 2  元偷偷看……
ly925
3楼-- · 2019-07-16 10:06
小梅哥 发表于 2017-8-22 14:08
你是不是买到的SRAM是翻新的,我同样的电路和程序,两批板,一批好使,一批不好使,不好使的后面被证明全部是翻新的,打磨过,可能是低速改的高速的

感谢版主回复,换了一批新的SRAM 还是一样有这样的问题,同一批板就有一半多不好使的,偶尔换一个能解决问题。但是还是有的不能解决。寻思是不是SRAM时序没有写好。
reallmy
4楼-- · 2019-07-16 14:37
你要先写一个测试程序,网sram里写一批数据在读出来,看看数据是不是有错,有错的话看看规律,看看是哪几bit错了,再用示波器点点波形,看看是不是时钟沿和数据的相位关系的问题!

一周热门 更多>