Altium教程FPGAHardwareD软件设计E0精.docx
《Altium教程FPGAHardwareD软件设计E0精.docx》由会员分享,可在线阅读,更多相关《Altium教程FPGAHardwareD软件设计E0精.docx(9页珍藏版)》请在冰豆网上搜索。
Altium教程FPGAHardwareD软件设计E0精
FPGAHardware_LEDChaserIOModule软件设计
第一部分原理图
1.1FPGA_LED_Chasser_IO_Module.SchDoc
VCC
U3
TCKTMSTDITDOTRST
JTAG.JTAGJTAGJTAG
JTAG
JTAG
..Q[15..0]
D[15..0]LCEC
CLRSLILEFTSRIU4
SR16CLEDBQ[15..0]
D[15..0]LCEC
CLRSLILEFTSRIU5
SR16CLEDBQ[15..0]
D[15..0]LCEC
CLRSLILEFTSRIU7
SR16CLEDBQ[15..0]
D[15..0]LCEC
CLR
SLILEFTSRIU8
SR16CLEDBQ[15..0]
Q[31..16]
Q[63..48]
Q[47..32]
D[15..0]D[31..16]D[63..48]D[47..32]VCC
VCCVCCVCCQ16
Q32
Q48
Q64
Q[15..0]Q[16..31]Q[48..63]
Q[47..32]Q71Q15Q31Q471Chx8BitDigitalIO
AIN[7..0]
AOUT[7..0]
CTRLIOB_1X8
A[7..0]
A0
A1
D[15..0]
D[31..16]
D[63..48]
D[47..32]
A[15..0]
B[15..0]
Y[15..0]S0
U9M16_B2B1
A[15..0]
B[15..0]
Y[15..0]S0
U10M16_B2B1
A[15..0]
B[15..0]
Y[15..0]S0U11M16_B2B1
A[15..0]
B[15..0]
Y[15..0]S0
U6M16_B2B1
GND
GND
GND
A2
U12
OR3SLOAD
DIR
MANUAL
Q[7..0]
D[7..0]LCEC
CLRSLILEFTSRIU1
SR8CLEDB
Q[71..64]
D[71..64]VCCQ0
Q63GND
GND
GND
GND
GNDD[71..64]
A[7..0]B[7..0]
Y[7..0]
S0
U2
M8_B2B1
GND
DIVN[..]<=1000000
CDQ
U19FD
U17
CDQ
U18FD
VCCSHIFT
GND
VCC
DigitalI/OLEDChaser
U13
U14
/N
CNTL[31..0]
LOAD
U15
CDIVN_32
/5
U16
CDIV5
4Chx16BitDigitalIOAIN[15..0]BIN[15..0]CIN[15..0]DIN[15..0]
AOUT[15..0]BOUT[15..0]COUT[15..0]DOUT[15..0]
DIGIO
IOB_4X16
CLK_BRDPXX
TEST_BUTTON
PXXJTAG_NEXUS_TMS
PXX
JTAG_NEXUS_TCKPXXJTAG_NEXUS_TDOPXXJTAG_NEXUS_TDIPXXThisexampleimplementsa72bitshiftregisterto"chase"LEDsarounda4x16DigitalI/Omodule.Thespeediskeptdownto10HztoallowtheI/Omoduletokeepup.
YouwillneedtouptherefreshspeedontheI/Omoduleto100ms(Optionsbuttonontheinstrument.The1x8modulecontrolsextrafunctions.
Bit0(togglehighthelowwillloadthechaserwiththesettingsenteredintothe4x16.The4x16inputsareusedtodisplaythestateofthechaser-thisisthedisplay.
The4x16outputbitsareusedtocontrolthevaluethatwillbeloadedintothechaserwhenoperatingin"ManualMode"
Power-OnLoad
HoldsLoadhighfortwoshiftclockcyclestoforcealoadonstartup.ReliesonthefactthattheDFFswillcomeupwithzeroloaded.
Loadfromthreesources.
1.StartupLoad
2.TestbuttonLoad
3.ToggleBit0ofCTRLfrominstrumentdisplay.
1.2FPGA_LED_Chasser.PAS{......................................................................................................}ProcedureUnRouteNet(Board:
IPCB_Board;Net:
IPCB_Net;
Var
Iterator:
IPCB_GroupIterator;
Prim:
IPCB_Prim;
KillList:
TList;
i:
Integer;
Begin
Iterator:
=Net.GroupIterator_Create;
Prim:
=Iterator.FirstPCBObject;
KillList:
=TList.Create;
WhilePrim<>NIlDo
Begin
IfPrim.IsFreePrimitiveThen
KillList.Add(Prim;
Prim:
=Iterator.NextPCBObject;
End;
Fori:
=0TOKillList.Count-1Do
Board.RemovePCBObject(KillList[i];
KillList.Free;
End;{......................................................................................................}
{......................................................................................................}ProcedureUnrouteClass(Board:
IPCB_BOARD;NetClass:
IPCB_OBjectClass;
Var
Iterator:
IPCB_BoardIterator;
net:
IPCB_Net;
Begin
Iterator:
=Board.BoardIterator_Create;
Iterator.SetState_FilterAll;
Iterator.AddFilter_ObjectSet(MkSet(eNetObject;
Net:
=Iterator.FirstPCBObject;
WhileNet<>NIlDo
Begin
IfNetClass.IsMember(Net.NameThen
UnrouteNet(Board,Net;
Net:
=Iterator.NextPCBObject;
End;
Board.ViewManager_FullUpdate;
End;{......................................................................................................}
{......................................................................................................}ProcedureUnRouteSelectedClasses(Board:
I_PCBBoard;
Var
i:
Integer;
Begin
Fori:
=0ToGetNetClass.Classes.Items.Count-1Do
IfGetNetClass.Classes.Selected[i]Then
UnrouteClass(Board,GetNetClass.Classes.Items.Objects[i];
End;{......................................................................................................}
{......................................................................................................}FunctionChooseNetCLass(Dummy:
Integer=0:
Boolean;
Begin
Result:
=GetNetClass.showmodal=mrOK;
End;
{......................................................................................................}
{......................................................................................................}ProcedureFillNetClassList(Board:
IPCB_Board;
Var
Iterator:
IPCB_BoardIterator;
c:
IPCB_ObjectClass;
Begin
Iterator:
=Board.BoardIterator_Create;
Iterator.SetState_FilterAll;
Iterator.AddFilter_ObjectSet(MkSet(eClassObject;
c:
=Iterator.FirstPCBObject;
Whilec<>NIlDo
Begin
Ifc.MemberKind=eClassMemberKind_NetThen
GetNetClass.Classes.Items.AddObject(c.Name,C;
c:
=Iterator.NextPCBObject;
End;
End;{......................................................................................................}
{......................................................................................................}ProcedureUnRouteNetClass;
Var
ClassToUnroute:
IPCB_OBjectClass;
Board:
IPCB_Board;
Begin
Pcbserver.PreProcess;
Try
Board:
=PCBServer.GetCurrentPCBBoard;
IfNotAssigned(BoardThen
Begin
ShowMessage('TheCurrentDocumentisnotaProtelPCBDocument.';
Exit;
End;
FillNetClassList(Board;
IfChooseNetClassThen
UnrouteSelectedClasses(Board;
Finally
Pcbserver.PostProcess;
End;
End;{......................................................................................................}
{......................................................................................................}procedureTGetNetClass.ClassesDblClick(Sender:
TObject;
begin
ModalResult:
=mrOK;
end;