
ãã®æçš¿ã¯ãFPGAã®èšèšè ã«ã Ahronix Speedster22iãã©ãããã©ãŒã ã§PCIãšã¯ã¹ãã¬ã¹ãã¹ã®äœ¿çšãæå°éã®æéãšåŽåã§éå§ããæ¹æ³ã瀺ãããšãç®çãšããŠæžãããŸããã ãã®èšäºã§ã¯ããããžã§ã¯ãã®çµç¹ã«ã€ããŠèª¬æããŸããéçºè ã®ç¹å®ã®èŠä»¶ãžã®é©å¿ã¯ããã£ã1æéã§ãã¹ãã³ã³ãã¥ãŒã¿ãŒã®PCIeãã¹ã«æ¥ç¶ã§ããã1ã€ã®ã¢ãžã¥ãŒã«ã®ãœãŒã¹ããã¹ãã®ç°¡åãªå€æŽã«éå®ãããŸãã ä»ã®ãã©ãããã©ãŒã ã®éçºè ããã®èšäºãèå³æ·±ããã®ã«ãããšæããŸãã
Speedster22i HD1000 FPGAã«ã¯ã PCIe 3.0ä»æ§çšã®2ã€ã®PCIe SIGèªå®PCIe SIGã³ã¢ãããã Speedster22i HD1000éçºããããããã°ã«ãŒãïŒä»¥åã®èšäºã§æžããïŒã«ã¯ããããã®ã³ã¢ã®1ã€ãPCIeã¹ãããã«æ¥ç¶ãããŠããŸã ã PCIeã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠããã¹ãã³ã³ãã¥ãŒã¿ãŒãšãããã°ããŒããšå¯Ÿè©±ããããšã¯éåžžã«äŸ¿å©ã§ãã å®éãããã¯ãã®ç®çã®ããã®å¯äžã®é«éãœãªã¥ãŒã·ã§ã³ã§ãã PCIeã䜿çšããŠãããã°ããŒãããã¹ãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ãã代ããã«ãçµã¿èŸŒã¿ã®com-portããããŸããããã¯æ°æ¡é ãã§ãã ä»ã®ãã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãå€å°ã®ããŒããŠã§ã¢ã®é«åºŠåãå¿ èŠã§ãããå°ãªããšãä¿¡å·ã¬ãã«ã³ã³ããŒã¿ãŒã®äœ¿çšãå¿ èŠã«ãªããŸãã
Achronixã«ã¯ã PCIeããŒããŠã§ã¢ã³ã¢ã®ããã©ãŒãã³ã¹ãæ倧éã«çºæ®ãããªãã¡ã¬ã³ã¹ãã¶ã€ã³ããããŸããã³ã¢ã¯ã¿ãŒã²ããã¢ãŒãã§åäœãã CPUã«çŽæ¥ã¢ã¯ã»ã¹ãã DMAã¡ã«ããºã ãä»ããŠèªã¿åãããã³æžã蟌ã¿ãè¡ããŸãã ãã¹ãŠæ£åžžã«åäœããããšã確èªããŸããã ãããããã®èšèšã¯ã Verilogã³ãŒãã®äžååãªã¢ãžã¥ãŒã«æ§ãšé床ã®è€éãã®ããã«ãç¬èªã®ç®çã®ããã«ä¿®æ£ããã®ãéåžžã«é£ããããšãå€æããŸããã ãããã£ãŠãäŒæ¥èšèšã«åºã¥ããŠãç¬èªã®ããŒãžã§ã³ãäœæãã DMAãä»ãã亀æã«é¢é£ãããã¹ãŠãåé€ããå€æŽãããŠããªãã³ãŒãã®ã¢ãžã¥ãŒã«ããã³ã³ãŒããé©å¿ãããããã«å€æŽããå¿ èŠã®ããã¢ãžã¥ãŒã«ãæ瀺çã«éžæããããã«æ§é åããããšã決å®ãããŸããç¹å®ã®éçºè ã¿ã¹ã¯ã ãã®çµæãã·ã³ãã«ã§é©åã«æ§æããããããžã§ã¯ããäœæãããéçºè ã®ç¹å®ã®ã¿ã¹ã¯ãžã®é©å¿ã¯ããã£ã1ã€ã®ã¢ãžã¥ãŒã«ã®ã³ãŒãã®åçŽãªå€æŽã«ãªããŸãã
Achronix FPGA㯠ã PCIe ã DDR3ã100 / 40 / 10Gã€ãŒãµããã ã Interlakenãªã©ã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã³ã³ãããŒã©ãŒçšã®ããŒããŠã§ã¢ããŒã¹ã®IPã³ã¢ãåããŠããŸãã ãããã®ããŒããŠã§ã¢ã³ã¢ã¯ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®æ©èœã«å¿ èŠãªãã¹ãŠãæäŸããŸããéçºè ã«å¿ èŠãªããšã¯ããããã®ã³ã³ãããŒã©ãŒã§ç¬èªã®ã€ã³ã¿ãŒãã§ã€ã¹ã¢ãžã¥ãŒã«ãèšè¿°ããããšã ãã§ãã ãã®çµæãäœæ¥éãåçã«åæžãããŸãã ããã«ãå¿ èŠãªã¿ã€ãã³ã°ã®éæãå€§å¹ ã«ç°¡çŽ åãããŸãã PCIeãã¶ã€ã³ã®å Žåãå¿ èŠãªã€ã³ã¿ãŒãã§ã€ã¹ã¢ãžã¥ãŒã«ã¯ãããã§ããã®ã»ãšãã©ã¯äŒæ¥ã®ãªãã¡ã¬ã³ã¹ãã¶ã€ã³ããååŸãããŸããã
ãããžã§ã¯ãã®ç°¡åãªèª¬æ
ãããžã§ã¯ãã¯ã3ã€ã®128ãããã¬ãžã¹ã¿ãžã®ã¢ã¯ã»ã¹ãå®è£ ããŸãã PCIeã³ã¢ã¯ãBAR0-64KBãBAR1ããã³BAR2-8 KBã®3ã€ã®BARçšã«æ§æãããŠããŸãã ã¬ãžã¹ã¿ãžã®ã¢ã¯ã»ã¹ã¯ãBAR1ãä»ããŠè¡ãããŸãã 3ã€ã®BARãååšããã®ã¯ã䜿çšãããã©ã€ããŒãšã®äºææ§èŠä»¶ã«ãããã®ã§ãã ã¬ãžã¹ã¿ã®èª¬æã以äžã«ç€ºããŸãã
å | AP BAR1ã®å€ââäœ | ã¿ã€ã | 説æ |
---|---|---|---|
R0 | 0 | RO | {4 {32'hDEADBEEF}} |
R1 | 20æé | Rw
Rw | ããã[7ïŒ0]-LEDã©ã€ã³ãžã®åºå
ããã[127ïŒ8]-䜿çšãããŠããŸãã |
R2 | 40æé | RO
Rw | ããã[7ïŒ0]-ã¹ã€ããã®è¡ã®èªã¿åã
ããã[127ïŒ8]-䜿çšãããŠããŸãã |
ãããžã§ã¯ããã¢ããã°ã¬ãŒããããšããæåã«è¡ãããã®ã¯ã DMAãä»ããããŒã¿äº€æã«é¢é£ããã³ãŒããåé€ããããšã§ããã ãã®åŸã target_readããã³target_writeèªã¿åãããã³æžã蟌ã¿ãã£ãã«ã䜿çšããŠãã«ãŒãã«ã«æ¥ç¶ããŸããã 次ã«ãå³ã«ç€ºãããã«ãã¢ãžã¥ãŒã«æ§é ãå®çŸ©ãããŸããã

åèšã§4ã€ã®ã¢ãžã¥ãŒã«ãå€æããŸããïŒãµãã¢ãžã¥ãŒã«ãå«ããã®ããããŸãïŒ
ã¢ãžã¥ãŒã«ã®æ§æïŒ
- pcie_g3x4.v - PCIeããŒããŠã§ã¢ã³ã¢ã©ãããŒã VendorID ãã¬ãŒã³æ°ãããŒã«ã«ãã¹å¹ ãªã©ã®ãã©ã¡ãŒã¿ãŒã決å®ããŸãããã®ã¢ãžã¥ãŒã«ã¯ã ACEéçºã«ãŒãã«ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠçæãããŸãã
- pci_target_bus_ctrl.v-ããŒããŠã§ã¢ã³ã¢ã®ã¿ãŒã²ãããã£ãã«ãšã PCIãã¹ãä»ããŠã¬ãžã¹ã¿ã«ã¢ã¯ã»ã¹ã§ããããŒã«ã«ãã¹ã«äžèŽããã©ãããŒã¢ãžã¥ãŒã«ã ã¿ãŒã²ãããã£ãã«ã¯æžã蟌ã¿ãšèªã¿åãã®2ã€ã®ç¬ç«ãããµããã£ãã«ã§æ§æãããŠããããããã®ã¢ãžã¥ãŒã«ã¯2ã€ã®ã¢ãžã¥ãŒã«pci_target_bus_write_ctrl.vãšpci_target_bus_read_ctrl.vãçµã¿åãããŠãããããããæžã蟌ã¿æäœãšèªã¿åãæäœãå®è£ ããŠããŸãã
- lbus_registers.v-é©åãªãŠãŒã¶ãŒã¬ãžã¹ã¿ãå«ãã¢ãžã¥ãŒã«ã ç¹å®ã®ãããžã§ã¯ãã®ã³ãŒãå€æŽãå¿ èŠãšããå¯äžã®ã¢ãžã¥ãŒã«ã
- ACX_SNAPSHOT.v-ã€ã³ãµãŒããããããã°çšã®è£å©ã¢ãžã¥ãŒã«ã ãããã°ã®æåŸã«ããããžã§ã¯ãããé€å€ã§ããŸãã
ãã®ãããžã§ã¯ãã§ã¯ãéçºè ã«å¿ èŠãªæ©èœãå®çŸããããã«ã1ã€ã®ã¢ãžã¥ãŒã«ïŒ lbus_registers.vïŒã®ãœãŒã¹ã³ãŒãã®ã¿ãå€æŽããå¿ èŠããããŸãã ä»ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ãå€æŽãªãã§ãã®ãŸãŸäœ¿çšãããŸãã åæã«ã lbus_registers.vã¢ãžã¥ãŒã«ã¯ãéçºè ã«å¿ èŠãªæ©èœãè¿œå ããããã³ãã¬ãŒããšããŠäœ¿çšã§ããŸãã ãããã£ãŠã PCIeãã¹äžã®è€æ°ã®ã¬ãžã¹ã¿ã䜿çšããŠåäœããã€ã³ã¿ãŒãã§ã€ã¹ãååŸããã«ã¯ãã¢ãžã¥ãŒã«ã³ãŒããè¿œå ããã®ã«1æéãããããŸããã
PCIeã³ã¢çæ
ã«ãŒãã«ãçæããã«ã¯ãACEã·ã§ã«ã³ã¢ãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãã æå®ããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯ãæ¡åŒµåã.axipã®ãã¡ã€ã«ã«ä¿åããããã€ã§ãç·šéã§ããŸãã ãžã§ãã¬ãŒã¿ãŒã®çµæã¯ã Verilogããã³VHDLèšèªã®ããã¹ããã¡ã€ã«ã§ãã ã«ãŒãã«çæããã»ã¹ã®ã¹ã¯ãªãŒã³ã·ã§ãããå³ã«ç€ºããŸãïŒ

Pcieã³ã¢ã¿ãŒã²ããã€ã³ã¿ãŒãã§ã€ã¹
PCIããŒããŠã§ã¢ã³ã¢ã«ã¯ããã€ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãå«ãŸããŠããŸãããã¿ãŒã²ããã€ã³ã¿ãŒãã§ã€ã¹ã«èå³ããããŸãã ããã·ãããã€ã¹ãšããŠæ©èœããã¬ãžã¹ã¿ã¯ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæ¥ç¶ãããããã»ããµã¯ã¢ã¯ãã£ãããã€ã¹ãšããŠæ©èœããŸãã ã¿ãŒã²ããã€ã³ã¿ãŒãã§ã€ã¹ã¯ãæžã蟌ã¿ã¢ãã¬ã¹ã®èšå®ãããŒã¿ã®æžã蟌ã¿ãèªã¿åãã¢ãã¬ã¹ã®èšå®ãããã³ããŒã¿ã®èªã¿åãã®4ã€ã®ãã£ãã«ã§æ§æãããŸãã æžã蟌ã¿ãã£ãã«ãšèªã¿åããã£ãã«ã¯äºãã«ç¬ç«ããŠæ©èœããŸãã 以äžã¯ãæžã蟌ã¿ããã³èªã¿åããã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ãã³ã°å³ã§ãã åãå³ã¯ããŒã«ã«ãã¹ä¿¡å·ã瀺ããŠããŸãã

ããŒã«ã«ãã¹
ããŒã«ã«ãã¹ã®æ§é ã¯éåžžã«ã·ã³ãã«ã§ãã æžã蟌ã¿ãšèªã¿åãã®2ã€ã®ç¬ç«ãããã£ãã«ã§æ§æãããç°ãªãã¯ãŒãå¹ ã«èšå®ã§ããŸãã ãã®ãããžã§ã¯ãã§ã¯ã128ãããå¹ ã®åèªã䜿çšããŸãã
lbus_registers.vã¢ãžã¥ãŒã«ã«å®è£ ãããããŒã«ã«ãã¹ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãé 延ãªãã§ã¬ãžã¹ã¿ã«æžã蟌ã¿ã1ã¯ããã¯ãµã€ã¯ã«ã®é 延ã§èªã¿åããæäŸããŸãã ãã ããå®éã®é 延ã¯æ¬¡ã®ããã«ãããã«å€§ãããªããŸãã pci_target_bus_ctrl.vã¢ãžã¥ãŒã«ã«å«ãŸãããµãã¢ãžã¥ãŒã«ã¯ãæžã蟌ã¿ããã³èªã¿åããã©ã³ã¶ã¯ã·ã§ã³ã®ã¬ã€ãã³ã·ã«å¯äžããŸãã
å®è£
ãããžã§ã¯ãã®å®è£ ã¯ãåæ段éãšãã¬ãŒã¹æ®µéã®2ã€ã®æ®µéã§æ§æãããŠããŸãã
ãã£ã¬ã¯ããªæ§é
次ã®ãã£ã¬ã¯ããªçµç¹ãå®è£ ã®ããã«éžæãããŸããã
pci_simple | --- src | --- syn | --- tr | ---ããŒã«
srcãã£ã¬ã¯ããªã«ã¯ã VerilogãœãŒã¹ãã¡ã€ã«ãå«ãŸããŠããŸãã synãã£ã¬ã¯ããªã«ã¯synplifyããã°ã©ã ã䜿çšããåæã«å¿ èŠãªãã¡ã€ã«ãå«ãŸãã trãã£ã¬ã¯ããªã«ã¯ãã¬ãŒã¹ãã§ãŒãºã«å¿ èŠãªãã¡ã€ã«ãå«ãŸããŠããŸãã ãŸãããã®ãã£ã¬ã¯ããªã«ã¯ãããã©ã«ãã§ãçæãããã«ãŒãã«ããããŸãã toolsãã£ã¬ã¯ããªãŒã«ã¯ããã©ã€ããŒãšPciExpressããã°ã©ã ãå«ãŸããŠããŸãããããã䜿çšããŠã PCIeãã¹ã«æ¥ç¶ãããã¬ãžã¹ã¿ãŒã«å¯ŸããŠããŒã¿ãèªã¿æžãã§ããŸãã
åæ
synãã£ã¬ã¯ããªã«ã¯pcie_simple_design.prjãããžã§ã¯ããã¡ã€ã«ãå«ãŸããŠããŸã ã ãã®ãã¡ã€ã«ã¯ã Synopsysãéçºããsynplify-proåæããã°ã©ã ã§æå®ããå¿ èŠããããŸãã ãã®ããã°ã©ã ã®çµæã¯ã syn / rev_1ãµããã£ã¬ã¯ããªã«ããpcie_simple_design.vmaãã¡ã€ã«ã§ãã ãã®ãã¡ã€ã«ã¯ã次ã®ã¹ããã-ãã¬ãŒã¹ã®å ¥åã§ãã åææé ã®ã¹ã¯ãªãŒã³ã·ã§ããã以äžã«ç€ºããŸãã

ãã¬ãŒã¹
ãã¬ãŒã¹ãã§ãŒãºã¯ã Achronixç¬èªã®ACEããã°ã©ã ã«ãã£ãŠå®è¡ãããŸãã trãã£ã¬ã¯ããªã«ã¯pci-simple.prjãããžã§ã¯ããã¡ã€ã«ãå«ãŸããŠããã ACEã§æå®ããå¿ èŠããããŸãã ãã¬ãŒã¹æé ã®æåŸã«ã pci-simple-design.jamãã¡ãŒã ãŠã§ã¢ãã¡ã€ã«ãtr / impl_1 / output ãµããã£ã¬ã¯ããªã«è¡šç€ºãããFPGAã«çŽæ¥ããŠã³ããŒããããŸãã ãã¬ãŒã¹ãã§ãŒãºã®ã¹ã¯ãªãŒã³ã·ã§ããïŒ

å¶çŽ
constãã¡ã€ã«ã¯2ã€ã ãã§ãã1ã€ã¯ã¯ããã¯åè·¯ãèšè¿°ãããã1ã€ã¯äœ¿çšãããI / Oãã³ãå®çŸ©ããŸãã ãã¡ã€ã«ã¯trãã£ã¬ã¯ããªã«ãããããããpcie_simple_design.sdcããã³pcie_simple_design.pdcãšããååã§ãã ãããã¯æ¢ã«ãããžã§ã¯ããã¡ã€ã«ãä»ããŠåæããã³ãã¬ãŒã¹ããã°ã©ã ã«æ¥ç¶ãããŠããŸãã
çµæ
ã¿ã€ãã³ã°
ãã¬ãŒã¹çµæ | |||
---|---|---|---|
åšæ³¢æ°ïŒMHzïŒ | |||
æèš/ã°ã«ãŒã | 察象 | éæãã | ã¿ã€ãã³ã°ãæºãããŸã |
user_clk | 212.5 | 308.5 | ã¯ãïŒ+ 45.2ïŒ ïŒ |
core_clk | 212.5 | 433.5 | ã¯ãïŒ+ 104.0ïŒ ïŒ |
sbus_clk | 50.0 | 138.7 | ã¯ãïŒ+ 177.5ïŒ ïŒ |
Tck | 10.0 | 175.4 | ã¯ãïŒ+ 1653.6ïŒ ïŒ |
ãŠãŒã¶ãŒã¬ãžã¹ã¿ãæ¥ç¶ãããŠããuser_clkã¯ããã¯ã°ã«ãŒãã«èå³ããããŸãã ã芧ã®ãšãããç¹å®ã®åšæ³¢æ°212.5 MHzã§ãçµæã¯308.5 MHzã§ããã å¿ èŠä»¥äžã«45ïŒ é«ãã
å»æ£
è³æº | å¿ãã |
---|---|
RLB | 0.520ïŒ |
LUT4ãµã€ã | 0.410ïŒ |
DFFãµã€ã | 0.520ïŒ |
MUX2ãµã€ã | 0.010ïŒ |
Aluãµã€ã | 0.170ïŒ |
LRAMãµã€ã | 1.280ïŒ |
BRAMãµã€ã | 0.190ïŒ |
BMULTãµã€ã | 0.000ïŒ |
I / Oããããµã€ã | 1.980ïŒ |
ããŒã¿ããã | 1.740ïŒ |
ã¯ããã¯ããã | 12.50ïŒ |
ãªã»ããããã | 0.000ïŒ |
ãã¹ãæ¥ç¶
ãã¹ãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããã«ã¯ããã©ã€ããŒãå¿ èŠã§ãã ç¹å®ã®æ¡ä»¶äžã§ã¯ãäŒç€Ÿã®ãªãã¡ã¬ã³ã¹ãã¶ã€ã³ã®ãã©ã€ããŒã䜿çšã§ããŸãã PciExpress.exeã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãã©ã€ããŒã§åäœãã PCIeãã¹ã«æ¥ç¶ãããã¬ãžã¹ã¿ãŒã«ã¢ã¯ã»ã¹ã§ããŸãã ãããã®ããŒã«ã䜿çšã§ããããã«ããã«ã¯ãå ã®ãã¶ã€ã³BARã®æ§é ãä¿æãã VendorIDããã³DeviceIDãã©ã¡ãŒã¿ãŒã®å€ãä¿åããå¿ èŠããããŸãã
Windowsãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãæèŒãããã¹ãã³ã³ãã¥ãŒã¿ãŒã§ã®äœæ¥ãéå§ããã«ã¯ã次ã®æé ãå®è¡ããå¿ èŠããããŸãã
- PCIeãã¹ãä»ããŠãããã°ããŒããã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããŸãã PCIe x8以äžã®ã¹ããããå¿ èŠã§ãã 垯é»é²æ¢ä¿è·æ段ãéµå®ããŠãã¹ã€ãããåã£ãããã€ã¹ã«æ¥ç¶ããå¿ èŠããããŸãã å€éšé»æºãããããã°ããŒãã«é»åãäŸçµŠããŸãã
- ã³ã³ãã¥ãŒã¿ãŒãšããŒãã®é»æºãå ¥ããŸãã é»æºæå ¥æé ã¯éèŠã§ã¯ãããŸããã
- ãã¡ãŒã ãŠã§ã¢ãFPGAã«ããŠã³ããŒãããŸãã
- ããã€ã¹ãããŒãžã£ãŒã䜿çšããŠã PCIãã¹äžã®æ°ããããã€ã¹ãèŠã€ãããã®ãã©ã€ããŒãã€ã³ã¹ããŒã«ããŸãã
- åèµ·å
- åèµ·ååŸã PciExpressããã°ã©ã ã¯ã¬ãžã¹ã¿ã®æžã蟌ã¿/èªã¿åããã§ããŸãã
次ã®å³ã¯ãã¢ãã¬ã¹ç©ºéBAR1ã®ãªãã»ãã0ã§ã¬ãžã¹ã¿ãèªã¿åã£ãçµæã瀺ããŠããŸãã

lbus_registers.vã¢ãžã¥ãŒã«ã®ã«ã¹ã¿ãã€ãº
ãœãŒã¹ã³ãŒããç¬èªã®ãããžã§ã¯ãã§äœ¿çšããã«ã¯ãéçºè ãå¿ èŠãªã¬ãžã¹ã¿ããã¶ã€ã³ã«å ¥åããå¿ èŠããããŸãã ãã¹ãŠã®ãŠãŒã¶ãŒã¬ãžã¹ã¿ã¯lbus_registers.vã¢ãžã¥ãŒã«ã«ããããããã«ã¹ã¿ãã€ãºããå Žåã次ã®ç°¡åãªæé ãå¿ èŠã§ãã
- ãŠãŒã¶ãŒç»é²ããšã«ã³ãŒããæžã
- ãã©ã¡ãŒã¿ãªã¹ãã§åã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ãèšå®ãã
- åã¬ãžã¹ã¿ãŒã®ã¢ãã¬ã¹ãã³ãŒããŒã³ãŒããèšè¿°ãã
- åã¬ãžã¹ã¿ãæžã蟌ã¿ããã³èªã¿åããã¹ã«æ¥ç¶ããŸã
ãããã®ã¢ã¯ã·ã§ã³ãå®è¡ããæ¹æ³ã瀺ããŸãã
â¢ã¬ãžã¹ã¿ã®ååãšãã®é·ããå®çŸ©ããŸãã
reg [AXI_DATA_WIDTH-1:0] my_register;
â¢ãã®ã¬ãžã¹ã¿ã®æžã蟌ã¿ããã³èªã¿åãã¹ãããŒããå®çŸ©ããŸãã
wire selw_my_register; wire selr_my_register;
â¢ãã®ã¬ãžã¹ã¿ã«åžžæãããã¯ãæžã蟌ã¿ãŸãã ããã¯ã çæã¹ããŒãã¡ã³ãã䜿çšããŠç°¡åã«å®è¡ã§ããŸãã
æãåçŽãªå Žåãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
genvar i; generate for (i = 0; i < AXI_BE_WIDTH; i = i + 1) begin: leds_lanes always @( posedge clk or negedge rst_n ) if (!rst_n) my_register [7+ 8*i: 8*i] <= 8'h0; else if (selw_my_register && lbus_wr_be[i] ) my_register[7+ 8*i: 8*i] <= lbus_wr_data[7+ 8*i: 8*i]; else my_register [7+ 8*i: 8*i] <= my_register [7+ 8*i: 8*i]; end endgenerate
åã ã®ãããã®ããè€éãªåŠçãå¿ èŠãªå Žåãalways-blockã¯åœç¶ããè€éã«ãªããçææŒç®åã䜿çšããã«æ瀺çã«ã³ãŒããèšè¿°ãããããªããŸãã
â¢ãã©ã¡ãŒã¿ãŒã®ãªã¹ãã«è¡ãè¿œå ããŸãã
parameter ADDR_MY_REGISTER = 32'h1234_5678
ã
ããã§-32'h1234_5678ã®ä»£ããã«ãå¿ èŠãªã¢ãã¬ã¹ç©ºéã®ãã€ãåäœã®å®éã®ãªãã»ããã瀺ããŸã
â¢ã¬ãžã¹ã¿éžæä¿¡å·ã®åŒãäœæããŸãã
selw_my_register = reg_wr_hit & (lbus_wr_addr[REG_ADDR_WIDTH-1:0] == ADDR_MY_REGISTER [REG_ADDR_WIDTH+AXI_REMAIN_WIDTH-1:AXI_REMAIN_WIDTH]); selr_my_register = reg_rd_hit & (lbus_rd_addr[REG_ADDR_WIDTH-1:0] == ADDR_MY_REGISTER [REG_ADDR_WIDTH+AXI_REMAIN_WIDTH-1:AXI_REMAIN_WIDTH]);
â¢always_combãããã¯å
always_comb begin case (1'b1) ⊠endcase end
caseã¹ããŒãã¡ã³ãå ã«æ°ãããã©ã³ããè¿œå ããŸãã
selr_my_register: c_reg_rd_data = my_register;
ãŠãŒã¶ãŒç»é²ããšã«äžèšã®æé ãç¹°ãè¿ããŸãã
ã¢ãžã¥ãŒã«ã€ã³ã¿ãŒãã§ãŒã¹
ã¢ãžã¥ãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
module lbus_registers #( parameter BAR_NMB = 3'd0 parameter AXI_DATA_WIDTH = 128, parameter AXI_BE_WIDTH = AXI_DATA_WIDTH/8, // AXI Len Width parameter LBUS_ADDR_WIDTH = 12, // 64 KB expected for NWL Reference Design parameter REG_ADDR_WIDTH = LBUS_ADDR_WIDTH, // 64 KB expected for NWL Reference Design parameter ADDR_R0 = 32'h000_0000, parameter ADDR_R1 = 32'h000_0020, parameter ADDR_R2 = 32'h000_0040 ) ( input wire rst_n, input wire clk, // input wire [7:0] switches, output wire [AXI_DATA_WIDTH-1: 0] rg1_out, output wire [AXI_DATA_WIDTH-1: 0] rg2_out, output wire [71: 0] debug_bus, // Local Bus channel input wire [LBUS_ADDR_WIDTH-1:0] lbus_wr_addr, input wire [2:0] lbus_wr_region, input wire lbus_wr_en, input wire [AXI_BE_WIDTH-1:0] lbus_wr_be, input wire [AXI_DATA_WIDTH-1:0] lbus_wr_data, // input wire [LBUS_ADDR_WIDTH-1:0] lbus_rd_addr, input wire [2:0] lbus_rd_region, output wire [AXI_DATA_WIDTH-1:0] lbus_rd_data );
ãã©ã¡ãŒã¿èšå®
lbus_registers.vã¢ãžã¥ãŒã«ã®èšå®ã¯ãè¡šã«ãªã¹ããããŠããŸãã
ãã©ã¡ãŒã¿å | ããã©ã«ãå€ | å€ã®ç¯å² | 説æ |
---|---|---|---|
BAR_NMB | 3'd0 | 3'd0-3'd7 | ã¢ãã¬ã¹ã»ã¬ã¯ã¿ãŒãæ§æãããŠããBARçªå· |
AXI_DATA_WIDTH | 128 | 128ã256 | ããŒã¿ãã¹ãµã€ãº |
AXI_BE_WIDTH | AXI_DATA_WIDTH / 8 | - | æåã§å€æŽããªãã§ãã ãã |
LBUS_ADDR_WIDTH | 12 | 8-15 | ããŒã«ã«ã¢ãã¬ã¹ãã¹ã®ãããæ°ãèšå®ããŸãã éåžžãæ倧ã®BARã®APã®ãµã€ãºã«å¯Ÿå¿ããŸã |
REG_ADDR_WIDTH | LBUS_ADDR_WIDTH | <= LBUS_ADDR_WIDTH | éžæããBARã«å¯Ÿå¿ããããŒã«ã«ã¢ãã¬ã¹ãã¹APã®ããã深床ãèšå®ããŸã |
ADDR_R0
ADDR_R1 ADDR_R2 | 32'h000_0000 | ããŒã®ãµã€ãºã«äŸå | ã¬ãžã¹ã¿ã¢ãã¬ã¹R0ïŒR1ãR2ïŒã ã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã¯åžžã«ãã€ãã§ç€ºãããBARã®ã¢ãã¬ã¹ç©ºéã§ã®ãªãã»ããã«å¯Ÿå¿ããŸã |
ãããã°
ãããã°ã¯å éšã·ã°ãã«ã¢ãã©ã€ã¶ãŒã䜿çšããŠå®è¡ããã ACX_SNAPSHOT.vã¢ãžã¥ãŒã«ããããžã§ã¯ãã§äœ¿çšãããŸãã ãã®ã¢ãžã¥ãŒã«ã¯ã ãdefine USE_SNAPSHOTãæ¡ä»¶ä»ãã³ã³ãã€ã«ãã£ã¬ã¯ãã£ãã«ãã£ãŠæ¥ç¶ãããŸã ã ã€ã³ãµãŒããããããã°ãæŽçããããã®ããã¥ã¡ã³ãã¯ã Achronix Webãµã€ãã®Snapshot User Guide.pdfãã¡ã€ã«ã«ãããŸãã
çµè«ãšçµè«
PCIãšã¯ã¹ãã¬ã¹ãã¹ãžã®æ¥ç¶ãªã©ã®å°é£ãªã¿ã¹ã¯ã§ããã Achronix Speedster22iãã©ãããã©ãŒã ã§ç°¡åã«ããããŠæãéèŠãªããšãšããŠãè¿ éã«è§£æ±ºãããŸãã PCIeããŒããŠã§ã¢ã³ã¢ã«åºã¥ããäœæ¥ãããžã§ã¯ãã®äœæã¯ç°¡åã§ã¯ãããŸããã§ããããéåžžã«ç°¡åã§ãã
Achronix Speedster22i FPGAã®ä»ã®ããŒããŠã§ã¢ã³ã¢ã«é¢ããã¹ããŒãªãŒã¯ããã¹ã¿ãŒãã次第èšç»ãããŠããŸãã 以éã®æçš¿ã§ã¯ã DDR-3ããã³100G Ehernetã³ã¢ã«ã€ããŠèª¬æããŸãã
åç §è³æ
1. Achronixã¯ãSpeedster22i FPGAã®PCI ExpressããŒããŠã§ã¢ã³ã¢ãPCI-SIGä»æ§ã«æºæ ããŠããããšãçºè¡šããŸãwww.achronix.com/wp-content/uploads/pr/2014_May_PCI-SIG.pdf
2.ãããã°ããŒãHD1000éçºãããã®å³ïŒè±èªïŒ22iHD1000_Development_Board_Schematic.pdf
3. Speedster22iã§PCIeã³ã³ãããŒã©ãŒã䜿çšããããã®ã¬ã€ãïŒè±èªïŒ www.achronix.com/wp-content/uploads/docs/Speedster22i_PCIe_User_Guide_UG030.pdf
4.ã¹ãããã·ã§ãããŠãŒã¶ãŒã¬ã€ãïŒè±èªïŒ www.achronix.com/wp-content/uploads/docs/Speedster22i_Snapshot_User_Guide_UG016.pdf
5.ãªãªãžãã«ã®ãªãã¡ã¬ã³ã¹ãã¶ã€ã³ïŒSpeedster22i_PCIe_Demo_Design.zip
6.èšèŒãããŠãããããžã§ã¯ãã®ãœãŒã¹ãã¡ã€ã«ïŒ drive.google.com/file/d/0B9Gt8fTYH6s-VGhfbk5RQWM4bk0