|
我用的是AD0804,按时序图写出的状态机程序,但是在数码管老是无法正常显示,数字不是老跳就是定在一个值不动,我让其每隔0.5秒就转换一次
always@(posedge clk)
if(sw)
begin
cs<=1;
rd<=1;
wr<=1;
statead<=idle;
end
else
case(statead)
idle:
if(reset)
begin
statead<=start;
cs<=0;
end
else
statead<=idle;
start:
begin
statead<=deng;
wr<=0;
cntwr<=0;
end
deng:
if(cntwr==4'd6)
begin
cntwr<=0;
wr<=1;
statead<=nobusy;
cntbusy<=0;
end
else
cntwr<=cntwr+1;
nobusy:
if(cntbusy==19'd5000)
begin
cntbusy<=0;
statead<=trans;
rd<=0;
cnttrans<=0;
end
else
cntbusy<=cntbusy+1;
trans:
if(cnttrans==4'd10)
begin
cnttrans<=0;
vol<=db;
rd<=1;
statead<=final;
end
else
cnttrans<=cnttrans+1;
final:
begin
statead<=idle;
cs<=1;
end
endcase
注意打****号的语句,我感觉问题是不是就是出在这里,按datasheet里wr置高后有一段nobusy又有一段busy的时间,这段时间我一直不知道到底该取多少。。。请问这个延时过长的话或过短的话分别会造成什么情况啊?当然。。。我认为可能是这里有错误,可能其他地方时序也有不对,能有哪位好心人能全部看看就最好不过了
|
|