谁指出附AHDL语言程序问题我出100块钱的饭钱。
本帖最后由 liudingding 于 2017-7-29 16:49 编辑本程序是EPM240的液晶驱动程序,能实现CPU写入液晶显示,但是现在只改变部分引脚的逻辑,如CS1、CS2是专门输出测试信号的引脚,如果它们改输出别的信号如FRV或LIV,就是CS1=LIV或CS1=FRV等信号液晶黑屏,直接导致我没法调试。
AHDL我能看懂,能用AHDL就用AHDL,实在不行就找人吃顿饭用verilog HDL写。
SUBDESIGN CPLD
(
WR,RD,ALE,A,K4 :INPUT;
RWR,ROE :OUTPUT;
D,DR :BIDIR;
PCK,LIV,FRV,S,IN :INPUT;
RA,INT3,CS1,CS2,OUT,24M:OUTPUT;
PCLK,HS,VS :OUTPUT;
)
VARIABLE
FA: DFF;
FB: DFF;
FC: DFF;
FE: DFF;
FF: DFF;
FH: DFF;
FI: DFF;
FJ: DFF;
FK: DFF;
FL: DFF;
SM: DFF;
SY: DFF;
SS : DFF;
S0,S1,S2,S3: TRI;
SK,HH,VV : TRI;
QY,HY,DE,VE,DEC,YH,JS:TRI;
DT : TRI;
AC: TRI;
AD: TRI;
DA: TRI;
DD: TRI;
DLS: TRI;
CK,QL,Q,OU : TRI;
RR,ZD: TRI;
HQ,HE: TRI;
V: TRI;
BEGIN
FH[] = FH[]+1;
FH[].CLK = IN;
FH[].CLRN =!JS;
table
FH[] =>QY, HY, DEC,YH, JS;
0 => 1,0,0,0,0;
48 => 0,1,0,0,0; % 48 %
88 => 0,0,1,0,0; % 88 %
850 => 0,0,0,1,0; %762+88=850 %
928 => 0,0,0,0,1; % 928 %
end table;
FJ[] = FJ[]+1;
FJ[].CLK = HY#DEC#YH;
FJ[].CLRN =!QY;
table
FJ[] => HH, HE;
0 => 1,0;
2 => 0,1;
end table;
HS =!HH;
DE = HE&VE;
FI[] = FI[]+1;
FI[].CLK = QY;
FI[].CLRN =!V3;
table
FI[] =>V0, V1, V2, V3;
0 => 1,0,0,0;
3 => 0,1,0,0; % 03 %
29 => 0,0,1,0; % 29 %
525 => 0,0,0,1; % 525 %
end table;
FK[] = FK[]+1;
FK[].CLK = V1#V2;
FK[].CLRN =!V0;
table
FK[] =>VV, VE;
0 => 1,0;
2 => 0,1;
end table;
VS =!VV;
PCLK =!OUT;
OUT =!IN;
FF[] = FF[]+1;
FF[].CLK = IN;
24M = FF;
CK = PCK#ZD;%&FRV&LIV%
INT3 = OU&!FRV;
FE[] = FE[]+1;
FE[].CLK =!FRV;
FE[].CLRN =!QL;
QL = Q&!WR;
table
FE[] => OU;
H"2" => 1 ;
end table;
RA = FE;
SY = D;
SY.CLK = S0&!WR;
SY = D;
SY.CLK= S1&!WR;
SY = D;
SY.CLK=S2&!WR;
SM[] = SM[]+1;
SM[].CLK = PCK&FRV;
SM[].CLRN = FRV;
if(SY[]==SM[])then
SK = VCC;
end if;
SS =!SS;
SS.CLK = SK;
SS.CLRN = FRV;
table
FC[] =>ZD;
H"94D40" => 1;%B2980 96000 %
end table;
FA[] = D[];
FA[].CLK =!ALE;
AC = FA;
AC = A;
AC = 0;
% AC.CLRN =!QL; %
D[] = DLS[];
DLS[] = DR;
DLS[].OE =!(!WR#ALE);
FB = D;
FB.CLK = WR;
FB = D;
FB.CLK= WR;
DD = FB;
DR = DD;
DD[].OE =!WR;
!RWR =!WR;
!ROE = RWR;
CS1 = FL;
CS2 = FC;
FC[] = FC[]+1;% 写地址%
FC[].CLK = PCK&OU#DT;
FC[].CLRN = FRV;
if
(FC[]==1219200)
then
DT=VCC;
end if;
FL[] = FL[]+1;
FL[].CLK = OUT&HE;
FL[].CLRN =!VE;
if(K4==VCC)then
RA = AC; %FC写地址 %
else %FL读地址 %
RA = FL;
end if;
% %
table
AC=> Q, S0, S1, S2, S3;
H"FFF3" => 0,1,0,0,0;
H"FFF4" => 0,0,1,0,0;
H"FFF5" => 0,0,0,1,0;
H"FFF6" => 0,0,0,0,1;
H"FFF7" => 1,0,0,0,0;
end table;
END;
我认为该程序可能有我习惯性的错,这种错误我一直持续使用
如果只是想用CS1和CS2看FRV或LIV的话,可以试试下面的代码。实现风格确实不太好,你如果可以说详细点,我可以帮你改,当然,纯交流,不为钱。
SUBDESIGN CPLD
(
WR,RD,ALE,A,K4 :INPUT;
RWR,ROE :OUTPUT;
D,DR :BIDIR;
PCK,LIV,FRV,S,IN :INPUT;
RA,INT3,CS1,CS2,OUT,24M:OUTPUT;
PCLK,HS,VS :OUTPUT;
)
VARIABLE
FA: DFF;
FB: DFF;
FC: DFF;
FE: DFF;
FF: DFF;
FH: DFF;
FI: DFF;
FJ: DFF;
FK: DFF;
FL: DFF;
SM: DFF;
SY: DFF;
SS : DFF;
LIV_D: DFF;
FRV_D: DFF;
S0,S1,S2,S3: TRI;
SK,HH,VV : TRI;
QY,HY,DE,VE,DEC,YH,JS:TRI;
DT : TRI;
AC: TRI;
AD: TRI;
DA: TRI;
DD: TRI;
DLS: TRI;
CK,QL,Q,OU : TRI;
RR,ZD: TRI;
HQ,HE: TRI;
V: TRI;
BEGIN
FH[] = FH[]+1;
FH[].CLK = IN;
FH[].CLRN =!JS;
table
FH[] =>QY, HY, DEC,YH, JS;
0 => 1,0,0,0,0;
48 => 0,1,0,0,0; % 48 %
88 => 0,0,1,0,0; % 88 %
850 => 0,0,0,1,0; %762+88=850 %
928 => 0,0,0,0,1; % 928 %
end table;
FJ[] = FJ[]+1;
FJ[].CLK = HY#DEC#YH;
FJ[].CLRN =!QY;
table
FJ[] => HH, HE;
0 => 1,0;
2 => 0,1;
end table;
HS =!HH;
DE = HE&VE;
FI[] = FI[]+1;
FI[].CLK = QY;
FI[].CLRN =!V3;
table
FI[] =>V0, V1, V2, V3;
0 => 1,0,0,0;
3 => 0,1,0,0; % 03 %
29 => 0,0,1,0; % 29 %
525 => 0,0,0,1; % 525 %
end table;
FK[] = FK[]+1;
FK[].CLK = V1#V2;
FK[].CLRN =!V0;
table
FK[] =>VV, VE;
0 => 1,0;
2 => 0,1;
end table;
VS =!VV;
PCLK =!OUT;
OUT =!IN;
FF[] = FF[]+1;
FF[].CLK = IN;
24M = FF;
CK = PCK#ZD;%&FRV&LIV%
INT3 = OU&!FRV;
FE[] = FE[]+1;
FE[].CLK =!FRV;
FE[].CLRN =!QL;
QL = Q&!WR;
table
FE[] => OU;
H"2" => 1 ;
end table;
RA = FE;
SY = D;
SY.CLK = S0&!WR;
SY = D;
SY.CLK= S1&!WR;
SY = D;
SY.CLK=S2&!WR;
SM[] = SM[]+1;
SM[].CLK = PCK&FRV;
SM[].CLRN = FRV;
if(SY[]==SM[])then
SK = VCC;
end if;
SS =!SS;
SS.CLK = SK;
SS.CLRN = FRV;
LIV_D = LIV;
LIV_D.CLK = IN;
FRV_D = FRV;
FRV_D.CLK = IN;
table
FC[] =>ZD;
H"94D40" => 1;%B2980 96000 %
end table;
FA[] = D[];
FA[].CLK =!ALE;
AC = FA;
AC = A;
AC = 0;
% AC.CLRN =!QL; %
D[] = DLS[];
DLS[] = DR;
DLS[].OE =!(!WR#ALE);
FB = D;
FB.CLK = WR;
FB = D;
FB.CLK= WR;
DD = FB;
DR = DD;
DD[].OE =!WR;
!RWR =!WR;
!ROE = RWR;
CS1 = LIV_D;
CS2 = FRV_D;
FC[] = FC[]+1;% 写地址%
FC[].CLK = PCK&OU#DT;
FC[].CLRN = FRV;
if
(FC[]==1219200)
then
DT=VCC;
end if;
FL[] = FL[]+1;
FL[].CLK = OUT&HE;
FL[].CLRN =!VE;
if(K4==VCC)then
RA = AC; %FC写地址 %
else %FL读地址 %
RA = FL;
end if;
% %
table
AC=> Q, S0, S1, S2, S3;
H"FFF3" => 0,1,0,0,0;
H"FFF4" => 0,0,1,0,0;
H"FFF5" => 0,0,0,1,0;
H"FFF6" => 0,0,0,0,1;
H"FFF7" => 1,0,0,0,0;
end table;
END; 本帖最后由 liudingding 于 2017-7-30 18:59 编辑
FPGA_WALKER 发表于 2017-7-30 11:14
如果只是想用CS1和CS2看FRV或LIV的话,可以试试下面的代码。实现风格确实不太好,你如果可以说详细点,我可 ...
谢谢楼上关心,但是不行呀,CS1,CS2不能换别的输出值,换了液晶就黑屏
,这里面可能有我的习惯性错误,就是说这些年来一直把这错误当规则来使用
这么说来明显是板子上cs1/cs2接了别的东西,要用到,而不是你说的只是测试用,查查板子吧。如果只是测试用,cs1/cs2随便怎么改,即使删除,也不会影响功能。 sme 发表于 2017-7-30 16:19
这么说来明显是板子上cs1/cs2接了别的东西,要用到,而不是你说的只是测试用,查查板子吧。如果只是测试用 ...
我不放心又看了看PCB文件,cS1,CS2从EPM240两侧引出,不可能和别的线短路,即使短路,也不会两个短路点,这两个端子纯碎接示波器测试用的。
页:
[1]