Altium公司的FPGA开发板的原理图
- 格式:pdf
- 大小:8.74 MB
- 文档页数:81
FPGA develop board manual ALTERA Cyclone EP1C3T144ALTERA Cyclone 系列的fpga是altera 公司针对底端用户推出的一个系列的fpga。
具有成本低,使用的方便的优点,规模从3000到20000LE。
这一块实验板用的EP1C3T144的芯片,有3000LE逻辑资源,另外还有13条M4K RAM (共6.5Kbyte),另外还有还有一个数字锁相环。
这些资源能够足够应付电子设计竞赛和日常教学的需要,也可以作为初学者入门学习fpga的工具。
1. 开发板介绍1.1. 总体介绍开发板的电路图,如附录所示,电路图一共可分为9个部分:电源部分、按键和LED、下载配置部分、复位部分、外部时钟、滤波电容、用户扩展接口、5 1单片机接口、FPGA 芯片。
1.2. 具体介绍1.2.1. 电源部分板子由外部提供5V电源,使用的圆头插座的封装,可以直接用5V的电源适配器插上使用,不需要直流稳压电源,FPGA的IO的电源是3.3V,内核的电压是1.5V,所以用上两个LEO,一个将5V转到3.3V,另一个将3.3V转到1.5V,加上一些滤波电容,板上的其他外设的电源均是3.3V,另外有3.3V的电源指示灯,表示电源是否正常,还有防反插二极管,防止电源反插,对器件造成损坏。
1.2.2. 按键和LED板上提供4个拨码按键和4个led,分别接到fpga的8个IO引脚上,具体的引脚可以参看电路图或者丝印。
对于初学者,按键和led可以用外当成最简单的外设,用和来控制这些外设。
对于用该板作开发的用户来说,可以把按键当成键盘控制,而把led当成提示来用。
1.2.3. 下载配置部分大家都知道fpga是sram型的可编程逻辑器件,不像rom型可编程器件cpld那样,通过jtag就可以直接把代码固化片子里面。
Fpga随便也可以通过jtag下载代码到片子里面运行。
Fpga下载到片子里面代码是存放在ram里,所以断电后这些代码马上就没有了。
FPGA Hardware_LED Chaser IO Module 软件设计第一部分原理图1.1 FPGA_LED_Chasser_IO_Module.SchDocVCCU3TCK TMS TDI TDO TRSTJT AG .JT AG JT AG JT AGJT AGJT AG..Q[15..0]D[15..0]L CE CCLR SLI LEFT SRI U4SR16CLEDB Q[15..0]D[15..0]L CE CCLR SLI LEFT SRI U5SR16CLEDB Q[15..0]D[15..0]L CE CCLR SLI LEFT SRI U7SR16CLEDB Q[15..0]D[15..0]L CE CCLRSLI LEFT SRI U8SR16CLEDB Q[15..0]Q[31..16]Q[63..48]Q[47..32]D[15..0]D[31..16]D[63..48]D[47..32]VCCVCC VCC VCC Q16Q32Q48Q64Q[15..0]Q[16..31]Q[48..63]Q[47..32]Q71Q15Q31Q47 1 Ch x 8 Bit Digital IO AIN[7..0]AOUT[7..0]CTRL IOB_1X8A[7..0]A0A1D[15..0]D[31..16]D[63..48]D[47..32]A[15..0]B[15..0]Y[15..0]S0U9M16_B2B1A[15..0]B[15..0]Y[15..0]S0U10M16_B2B1A[15..0]B[15..0]Y[15..0]S0U11M16_B2B1 A[15..0]B[15..0]Y[15..0]S0U6M16_B2B1GNDGNDGNDA2U12OR3S LOADDIRMANUALQ[7..0]D[7..0]L CE CCLR SLI LEFT SRI U1 SR8CLEDBQ[71..64]D[71..64]VCC Q0Q63GNDGNDGNDGNDGND D[71..64]A[7..0]B[7..0]Y[7..0]S0U2M8_B2B1GNDDIVN[..] <= 1000000 C D QU19FDU17C D QU18FDVCC SHIFTGNDVCCDigital I/O LED Chaser U13U14/ NCNTL[31..0]LOADU15CDIVN_32/ 5U16CDIV54 Ch x 16 Bit Digital IO AIN[15..0]BIN[15..0]CIN[15..0]DIN[15..0] AOUT[15..0]BOUT[15..0]COUT[15..0]DOUT[15..0]DIGIOIOB_4X16CLK_BRD PXXTEST_BUTTONPXX JTAG_NEXUS_TMSPXXJTAG_NEXUS_TCK PXX JTAG_NEXUS_TDO PXX JTAG_NEXUS_TDI PXX This example implements a 72 bit shift register to "chase" LEDs around a 4x16 Digital I/O module.The speed is k ept down to 10Hz to allow the I/O module to k eep up.You will need to up the refresh speed on the I/O module to 100ms (Options button on the instrument.The 1x8 module controls extra functions.Bit 0 (toggle high the low will load the chaser with the settings entered into the4x16.The 4x16 inputs are used to display the state of the chaser - this is the display.The 4x16 output bits are used to control the value that will be loaded into the chaser when operating in "Manual Mode"Power-On LoadHolds Load high for two shift clock cycles to force a load on startup.Relies on the fact that the DFFs will come up with zero loaded.Load from three sources.1. Startup Load2. Test button Load3. Toggle Bit 0 of CTRL from instrument display.1.2FPGA_LED_Chasser.PAS {......................................................................................................} Procedure UnRouteNet(Board : IPCB_Board; Net : IPCB_Net;VarIterator : IPCB_GroupIterator;Prim : IPCB_Prim;KillList : TList;i : Integer;BeginIterator := Net.GroupIterator_Create;Prim := Iterator.FirstPCBObject;KillList := TList.Create;While Prim <> NIl DoBeginIf Prim.IsFreePrimitive ThenKillList.Add(Prim;Prim := Iterator.NextPCBObject;End;For i := 0 TO KillList.Count - 1 DoBoard.RemovePCBObject(KillList[i];KillList.Free;End; {......................................................................................................}{......................................................................................................} Procedure UnrouteClass(Board : IPCB_BOARD; NetClass : IPCB_OBjectClass;VarIterator : IPCB_BoardIterator;net : IPCB_Net;BeginIterator := Board.BoardIterator_Create;Iterator.SetState_FilterAll;Iterator.AddFilter_ObjectSet(MkSet(eNetObject;Net := Iterator.FirstPCBObject;While Net <> NIl DoBeginIf NetClass.IsMember( ThenUnrouteNet(Board, Net;Net := Iterator.NextPCBObject;End;Board.ViewManager_FullUpdate;End; {......................................................................................................}{......................................................................................................} Procedure UnRouteSelectedClasses(Board : I_PCBBoard;Vari : Integer;BeginFor i := 0 To GetNetClass.Classes.Items.Count - 1 DoIf GetNetClass.Classes.Selected[i] ThenUnrouteClass(Board, GetNetClass.Classes.Items.Objects[i];End; {......................................................................................................}{......................................................................................................} Function ChooseNetCLass(Dummy : Integer = 0 : Boolean;BeginResult := GetNetClass.showmodal = mrOK;End;{......................................................................................................}{......................................................................................................} Procedure FillNetClassList(Board : IPCB_Board;VarIterator : IPCB_BoardIterator;c : IPCB_ObjectClass;BeginIterator := Board.BoardIterator_Create;Iterator.SetState_FilterAll;Iterator.AddFilter_ObjectSet(MkSet(eClassObject;c := Iterator.FirstPCBObject;While c <> NIl DoBeginIf c.MemberKind = eClassMemberKind_Net ThenGetNetClass.Classes.Items.AddObject(, C;c := Iterator.NextPCBObject;End;End; {......................................................................................................}{......................................................................................................} Procedure UnRouteNetClass;VarClassToUnroute : IPCB_OBjectClass;Board : IPCB_Board;BeginPcbserver.PreProcess;TryBoard := PCBServer.GetCurrentPCBBoard;If Not Assigned(Board ThenBeginShowMessage('The Current Document is not a Protel PCB Document.';Exit;End;FillNetClassList(Board;If ChooseNetClass ThenUnrouteSelectedClasses(Board;FinallyPcbserver.PostProcess;End;End; {......................................................................................................}{......................................................................................................} procedure TGetNetClass.ClassesDblClick(Sender: TObject;beginModalResult := mrOK;end;。