liudingding 发表于 2017-10-6 10:01:00

这两段程序问题在哪里?应该如何修改?

本帖最后由 liudingding 于 2017-10-6 11:46 编辑

用CPLD(EPM240)和SRAM(61LV25616)做了个液晶驱动板,现在是单片机写入61LV25616中的数据有很大一部分,估计百分之一二有了,甚至更多,是错误的,就是显示时有不希望的黑白点子,经过排查,问题出在以下两段程序上,

程序段1:
wire x16;
regA;
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 RA;   
always @(FWR or FRD or OU)
begin
if((FWR||FRD)||OU)
begin
RA =(FWR||FRD) ? x16 : mx;
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):md;或者简化assign RA=x16;不行,不知为什么。这样改错误提示见图。



上述两段程序应该如何修改呢?我对verilog就是会个皮毛,尽量把答复说的容易理解一些

mcu5i51 发表于 2017-10-6 10:17:42

降低速度试试,看看是不是各个数据时钟之类的不同步

chenchaoting 发表于 2017-10-6 10:23:50

异步时序问题
页: [1]
查看完整版本: 这两段程序问题在哪里?应该如何修改?