|
本帖最后由 liudingding 于 2017-10-6 11:46 编辑
用CPLD(EPM240)和SRAM(61LV25616)做了个液晶驱动板,现在是单片机写入61LV25616中的数据有很大一部分,估计百分之一二有了,甚至更多,是错误的,就是显示时有不希望的黑白点子,经过排查,问题出在以下两段程序上,
程序段1:
wire [15:0] x16;
reg[7:0]A;
always @( posedge FALE)
begin
A<=DA;
end
assign x16 ={H_I,A};
assign FALE =!ALE;
该段x16是单片机(MEGA64)提供的16位储存器地址,单片机端口A(DA)连接CPLD,ALE信号反相后作为锁存时钟得到地址低八位,H_I为端口C提供的十六位地址中高八位。现在的问题是如果读写SRAM的地址不变,读写60K次数据没有错误,如果每读写一次SRAM地址加或减1,则有错误,六万次读写错几百次。
程序段2:
reg [17:0]RA;
always @(FWR or FRD or OU)
begin
if((FWR||FRD)||OU)
begin
RA =(FWR||FRD) ? x16 : mx[18:1];
end
else
begin
RA =x16;
end
end
该段FWR、FRD是WR,RD反相后信号,就是WR或RD有效时,加在SRAM上的地址为单片机十六位总线,OU是自动连续写入SRAM的信号,mx是自动写入SRAM地地址
该段倒数第三行本应该RA=md;md是液晶数据连续读出地址,就出错了,出错数量和第一段程序基本相似,md改成x16,就不出错了。
另外该段改成assign RA =((FWR||FRD)||OU)?((FWR||FRD) ? x16 : mx[18:1]):md;或者简化assign RA=x16;不行,不知为什么。这样改错误提示见图。
上述两段程序应该如何修改呢?我对verilog就是会个皮毛,尽量把答复说的容易理解一些 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|