liudingding 发表于 2017-7-29 16:47:41

谁指出附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;

liudingding 发表于 2017-7-30 10:17:55

我认为该程序可能有我习惯性的错,这种错误我一直持续使用

FPGA_WALKER 发表于 2017-7-30 11:14:38

如果只是想用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 13:09:38

本帖最后由 liudingding 于 2017-7-30 18:59 编辑

FPGA_WALKER 发表于 2017-7-30 11:14
如果只是想用CS1和CS2看FRV或LIV的话,可以试试下面的代码。实现风格确实不太好,你如果可以说详细点,我可 ...

谢谢楼上关心,但是不行呀,CS1,CS2不能换别的输出值,换了液晶就黑屏
,这里面可能有我的习惯性错误,就是说这些年来一直把这错误当规则来使用

sme 发表于 2017-7-30 16:19:34

这么说来明显是板子上cs1/cs2接了别的东西,要用到,而不是你说的只是测试用,查查板子吧。如果只是测试用,cs1/cs2随便怎么改,即使删除,也不会影响功能。

liudingding 发表于 2017-7-31 09:48:24

sme 发表于 2017-7-30 16:19
这么说来明显是板子上cs1/cs2接了别的东西,要用到,而不是你说的只是测试用,查查板子吧。如果只是测试用 ...

我不放心又看了看PCB文件,cS1,CS2从EPM240两侧引出,不可能和别的线短路,即使短路,也不会两个短路点,这两个端子纯碎接示波器测试用的。
页: [1]
查看完整版本: 谁指出附AHDL语言程序问题我出100块钱的饭钱。