èè ãMars rover 2 FPGAããŒãäžã®Amber SoCããã³Linuxãããã§ãªãŒãã³ã·ã¹ãã ãå®è¡ããããšããMars roverãããžã§ã¯ã Webãµã€ãã®äžé£ã®èšäºã«è§Šçºãããç§ã¯Terasic DE2-115ããŒãã§ãã®çµéšãç¹°ãè¿ãããšã«ããŸããã ãããã
ã¢ã³ããŒã¯ãªã¹ã¿ã«ã·ã¹ãã
Amberããã»ããµã³ã¢ã¯32ãããRISCããã»ããµã§ãã¢ãŒããã¯ãã£ããã³ARM v2aã³ãã³ãã·ã¹ãã ãšå®å šã«äºææ§ããããGCCã䜿çšããŠããã°ã©ã ãã³ã³ãã€ã«ã§ããŸãã ããã»ããµèªäœã«å ããŠãAmberãããžã§ã¯ãã§ã¯ãUARTãã¿ã€ããŒãã€ãŒãµãããMACãªã©ããªã³ãããã·ã¹ãã ã®äžéšãšããŠããã€ãã®åšèŸºæ©åšãæäŸããŠããŸãã ããã»ããµã³ã¢ã«ã¯2ã€ã®ããŒãžã§ã³ããããŸãã
23è²23 | ã¢ã³ããŒ25 | |
ã³ã³ãã¢ãã«ã | äžæ®µé | 5ã€ã®ã¬ãã« |
ãã£ãã·ã¥ | äžè¬ïŒã³ãŒã+ããŒã¿ïŒ | å¥ãã |
ãŠã£ãã·ã¥ããŒã³çšã¿ã€ã€ | 32ããã | 128ããã |
æ§èœ | 0.75 DMIPS / MHz | 1.05 DMIPS / MHz |
ã芧ã®ãšãããããã»ããµã³ã¢ã®ããã©ãŒãã³ã¹ã¯ãARMv4ãARMv5ãªã©ãARMã¢ãŒããã¯ãã£ã®æ°ããããŒãžã§ã³ã«åºã¥ããã³ã¢ã®ããã©ãŒãã³ã¹ã«å¹æµããŸãã ARMv2aã¢ãŒããã¯ãã£ã¯ãç¹èš±ã§ä¿è·ãããŠãããããã®å®è£ ãèªç±ã«é åžã§ãããããAmberããã»ããµã«å®è£ ãããŠããŸãã ãã ããããã«é¢é£ããããã€ãã®åé¡ããããŸãããã®ã¢ãŒããã¯ãã£ã¯GCCã§å»æ¢ããããšèŠãªãããŠãããGCCã®ãµããŒãã¯åŸã ã«ãã«ããã¢ãŠããããããã®ã¢ãŒããã¯ãã£ã®ãµããŒãã¯é·ãéLinuxã«ãŒãã«ããåé€ãããŸããã
ã¢ãŒããã¯ãã£ã®éèŠãªæ©èœã¯ãARMã¢ãŒããã¯ãã£ã®æ°ããããŒãžã§ã³ãšã¯ç°ãªããããã»ããµãTHUMBã¢ãŒãããµããŒããããCPSR / SPSRã¬ãžã¹ã¿ãæãããMSR / MRSåœä»€ããµããŒããããããã»ããµã®ãã©ã°ãPCã¬ãžã¹ã¿ãããã®ãããã«å«ãŸããŠããããšã§ãã
ãã®ãããããã»ããµã¯PCã¬ãžã¹ã¿å ã®æ倧64 MBã®ã¡ã¢ãªïŒ26ãããïŒãã¢ãã¬ã¹æå®ã§ããŸããæäœ2ã€ã¯åžžã«0ã§ãã åœä»€ã¯åžžã«ã¯ãŒãå¢çã§æŽåããããããã¬ãžã¹ã¿ã®æäžäœ2ãããã¯ãããã»ããµã®åäœã¢ãŒãïŒãŠãŒã¶ãŒ/ç¹æš©ãå²ã蟌ã¿ãã³ãã©ãŒïŒã決å®ãããã©ã°ã«äœ¿çšãããŸãã ä»ã®ã¬ãžã¹ã¿ã§ã¯ãããã»ããµã¯æ倧4 GBã®ã¡ã¢ãªãã¢ãã¬ã¹æå®ã§ããŸãã ããã»ããµã³ã¢ã¢ãŒããã¯ãã£ãšããã«å®è£ ãããŠããã³ãã³ãã»ããã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããšãã¡ããã芧ãã ãã ã
ARM Cross Compilerã®ã€ã³ã¹ããŒã«
æ®å¿µãªããããããžã§ã¯ããMarsããŒããŒããŒãã«ç§»æ€ããèšäºã®èè ã䜿çšããSourcery CodeBench Liteã³ã³ãã€ã©ã¯ããŠã³ããŒãã§ããªããªããŸããããããã¯ããã»ã©å€§ããªåé¡ã§ã¯ãããŸããã Gentoo Linuxã§crosstool-NGãŸãã¯
crossdev
ã䜿çšããŠã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ã§ããŸãã
crosstool-NGã䜿çšããŠã€ã³ã¹ããŒã«ããã«ã¯ããç®±ããåºããŠããã«ãå©çšå¯èœãª
arm-unknown-eabi
ã䜿çšããŸãã
$ ct-ng arm-unknown-eabi $ ct-ng build
ãã®ã³ã³ãã€ã©ã¯ãLinuxã«ãŒãã«ãšãããŒãããŒããŒãªã©ã®ãã¢ã¡ã¿ã«ããã°ã©ã ãããã³ã·ãªã¢ã«ããŒãã«HelloãWorldãåºåããåçŽãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äœ¿çšãããŸãã
Hello Worldãã³ã³ãã€ã«ããVerilogã·ãã¥ã¬ãŒã¿ãŒã§Verilatorãå®è¡ããŸã
GitHubãããããžã§ã¯ãé åžããããããŠã³ããŒãããŠå éšãèŠãïŒãããžã§ã¯ãã¯2ã€ã®éšåã«åãããŠããŸã
hw
ãã©ã«ããŒã«ã¯Verilogã®ãããŒããŠã§ã¢ãéšåã®ãœãŒã¹ãå«ãŸãã
sw
ãã©ã«ããŒã«ã¯ããã»ããµãŒã§å®è¡ãããããã°ã©ã ã®ãœãŒã¹ã³ãŒããšã ELFããã³BINãã¡ã€ã«åœ¢åŒã®ã¢ã»ã³ããªããã³å€æããAmberãããžã§ã¯ãã®ã¶ã€ãªã³ã¯ã¹ããŒã«ããã³ãã¹ãã¹ã¯ãªããããµããŒããã圢åŒã«å€æããŸãã
sw/hello
ãã©ã«ããŒã«ç§»åããŠã
hello-world.c
ãã³ã³ãã€ã«ããŸãã
$ cd sw/hello-world $ export AMBER_CROSSTOOL=arm-unknown-eabi $ make
ãã®çµæããšããã
hello-world.mem
ãã¡ã€ã«ãçæãããŸã-ã³ã³ãã€ã«ãããããã°ã©ã ã®å 容ãå«ãããã¹ããã¡ã€ã«ã§ãã·ãã¥ã¬ãŒã¿ãŒãšããã»ããµãŒã®ããŒãROMã«ããŒãããã®ã«é©ããŠããŸãã
ç§ãå°ãããå ã®èšäºã®èè ã¯ãç¡æã§éåžžã«äººæ°ã®ããã·ãã¥ã¬ãŒã¿ã§ããIcarus Verilogã䜿çšããŠãããžã§ã¯ããã·ãã¥ã¬ãŒãããŸããããåé¡ã¯åäœãéåžžã«é ãããšã§ã-2.6 GHzããã»ããµãæèŒãããã·ã³ã§ã¯ãIcarus Verilogã§ã·ãã¥ã¬ãŒããããšãã®ã¢ã³ããŒã³ã¢ã¯ããã¯ã¯çŽ16 kHzãããã³äžèšã®äŸã®æååãHelloãWorldãã®åæåãçŽ0.5ç§é衚瀺ãããŸãã ãã®é床ã¯ãããŒãããŒããŒãåãhello-worldãªã©ã®å°ããªããã°ã©ã ã®å®è¡ããããã°ããå¿ èŠãããå Žåã¯ååã§ãããLinuxã«ãŒãã«å šäœã®ããŒãããããã°ããå¿ èŠãããå Žåã¯åãå ¥ããããŸãã-æ°žé ã«åŸ ããªããã°ãªããŸããã
ãããã£ãŠãC ++ã§Verilogãã³ã³ãã€ã«ããéåžžã«é«éã«åäœããVerilatorã·ãã¥ã¬ãŒã¿ãŒã䜿çšããŸã.Hello Worldã¯ç®ã«èŠããé 延ãªãã§å³åº§ã«å°å·ããããã·ã³ã®ã¯ããã¯åšæ³¢æ°ã¯çŽ1.5 MHzã§ãIcarus Verilogããã100åé«éã§ãïŒ ã¡ãªã¿ã«ãLinuxã«ãŒãã«èµ·åã®ãããã°ããã»ã¹ã«ã¯çŽ1é±éããããŸãããã·ãã¥ã¬ãŒã·ã§ã³ã¢ãŒãã§ã¯ããã¹ããã³ãã³ãŒãããã¢ãã¬ã¹ãžã®ç§»è¡ãéåæãå«ãããã»ããµã«ãã£ãŠå®è¡ããããã¹ãŠã®åœä»€ã®ã¢ã»ã³ãã©ãŒãªã¹ããããã¹ããã°ãã¡ã€ã«ã«æžã蟌ãããããœãããŠã§ã¢å²ã蟌ã¿ãªã© Verilogã«å®è£ ãããäžçš®ã®éã¢ã»ã³ãã©ã
å ¬åŒãµã€ãã®æ瀺ã«åŸã£ãŠVerilatorãã€ã³ã¹ããŒã«ããä¿®æ£ããããã¹ããã³ãããã
hw/de2_115/tb
ãã©ã«ããŒã«ç§»åãã
make
ãå®è¡ã
make
ã Verilogã³ã³ãã€ã©ã®èŠåã¹ããªãŒã ã«ãããããããçµæãšããŠ
obj_dir
ãã©ã«ããŒã衚瀺ãããã·ã¹ãã ãã·ãã¥ã¬ãŒãããããã«å®è¡
obj_dir
å®è¡å¯èœãã¡ã€ã«ã
obj_dir
ãŸãã
次ã«ã次ã®ã³ãã³ããå®è¡ããŸãã
$ cp ../../../sw/hello-world/hello-world.mem ./boot-loader.mem $ ./obj_dir/Vtb
ãã®çµæãã·ãã¥ã¬ãŒã·ã§ã³ãéå§ãããåŸ æã®HelloãWorldã衚瀺ãããŸãã
Load boot memory from boot-loader.mem Read in 961 lines Hello, World!
ããã¯ãGCCãARMçšã«ã³ã³ãã€ã«ããããã°ã©ã ãããã»ããµãæ£åžžã«èªã¿åããå®è¡ããããšãæå³ããŸãïŒ
å¿ èŠã«å¿ããŠã
Makefile
--trace
ã¹ã¿ãŒãã¢ãããªã¹ãã«
verilator
ããŒãè¿œå ã§ããŸãããã¹ããã³ãæäœäžã«å¥ã®ãã¹ããã¡ã€ã«
out.vcd
ãçæãããŸãããã®ãã¡ã€ã«ã¯
out.vcd
ã§éããããã»ããµãŒããã³ä»ã®ãããã¯å ã®ããŸããŸãªä¿¡å·ã®æ³¢åœ¢ã確èªã§ããŸãïŒ
Builtrootã䜿çšããŠinitramfsããã«ããã
Linuxã«ãŒãã«ãã¢ã»ã³ãã«ããåã«ãã·ã¹ãã ã®ãŠãŒã¶ãŒããã°ã©ã ãã³ã³ãã€ã«ããç°å¢ïŒuClibc-ngã«åºã¥ãïŒãäœæãããã«ãããã»ã¹äžã«initramfsãšããŠã«ãŒãã«ã«è¿œå ããããã¡ã€ã«ãçæããŸãã ãããè¡ãã«ã¯ãããããããŠã³ããŒãã§ããBuildrootã䜿çšããŸã ã
$ make amber_defconfig $ make
ãã®çµæãã
arm-buildroot-uclinux-uclibcgnueabi
ãšãã¡ã€ã«ã·ã¹ãã ã€ã¡ãŒãžã
./output/images/rootfs.cpio
ãŸãã ãã®ã€ã¡ãŒãžãžã®ãã¹ã¯ãã«ãŒãã«æ§æãã¡ã€ã«ã®ãã©ã¡ãŒã¿ãŒ
CONFIG_INITRAMFS_SOURCE
ã§æå®ããå¿ èŠããããŸãã BusyBoxã¯ãã¡ã€ã«ã·ã¹ãã ã€ã¡ãŒãžã«å«ãŸããŠããŸã
/sbin/init
ãšããŠåçŽãªãHelloãWorldãã«å¶éã
/sbin/init
ã ãããè¡ãã«ã¯ãBuildRootãåããã°ã©ããŒã«æ¢ç¥ã®å 容ãå«ã
hello.c
ãã¡ã€ã«ãäœæãããã£ã¬ã¯ããªã§ã次ã®ã³ãã³ããå®è¡ããŸãã
$ ./output/host/usr/bin/arm-buildroot-uclinux-uclibcgnueabi-gcc -o hello hello.c $ mv hello output/target/sbin/init $ rm hello.gdb $ make
ãããã®ã³ãã³ããæ£åžžã«å®è¡ããããšãBusyBoxã®ä»£ããã«ã¢ããªã±ãŒã·ã§ã³ã§
./output/images/rootfs.cpio
ãåæ§ç¯ãããŸãã ãã®ãã¡ã€ã«çœ®æã®æ¹æ³ã¯ãäœãããã°ãããã§ãã¯ããã®ã«é©ããŠããŸãããã«ãããã»ã¹äžã«
rootfs
ã®ãã¡ã€ã«ãå®å šã«è¿œå ããã³çœ®æããã«ã¯ãæ§æãªãã·ã§ã³
BR2_ROOTFS_OVERLAY
ããããŸãã
Verilatorã·ãã¥ã¬ãŒã¿ã§å®è¡ããäŸãšã¯ç°ãªãããã®æ°ãããHelloãWorldãã¯ãã¢ã¡ã¿ã«ã¢ããªã±ãŒã·ã§ã³ãšããŠã§ã¯ãªããã«ã¹ã¿ã Linuxã¢ããªã±ãŒã·ã§ã³ãšããŠåäœããŠããŸããããã¹ãã¯ãæšæºã®uClibcã©ã€ãã©ãªã䜿çšããŠã·ãªã¢ã«ããŒãã«åºåãããŸãã
write
ã·ã¹ãã ã³ãŒã«ã¯ããœãããŠã§ã¢å²ã蟌ã¿ãä»ããŠã«ãŒãã«ã«å¶åŸ¡ã移ããã«ãŒãã«ã¯å¶åŸ¡ã
tty
ãã©ã€ããŒã«ã次ã«ã·ãªã¢ã«ããŒããã©ã€ããŒã«ç§»ããæåŸã«ã¡ãã»ãŒãžã衚瀺ãããŸãã
Linuxã«ãŒãã«ãšããŒãããŒããŒã®æ§ç¯
åœç¶ãææ°ã®ã«ãŒãã«ãèµ·åããããã«ãããã€ãã®å€æŽãè¡ãå¿ èŠããããŸããã ãã®ã³ãŒãã¯ã¢ãŒããã¯ãã£ã«äŸåããŠãããããã»ãšãã©ã®å Žåããããã®å€æŽã¯å²ã蟌ã¿åŠçãšããã»ããµã¢ãŒãã®åãæ¿ãã«é¢é£ããŠããŸãã 次ã«ãã€ã³ãã°ã¬ãŒã¿ãŒãã©ãããã©ãŒã ãµããŒãã³ãŒãïŒmach-integratorïŒãå€æŽããŸããã 2.4ã«ãŒãã«çšã®Amberãããžã§ã¯ãã®äœè ã®å ã®ãããã«ã¯ããã®ãã©ãããã©ãŒã ãAmber SoCã¢ãŒããã¯ãã£ã®ãããã¿ã€ãã§ãããšãããã³ãããããŸãïŒç¹ã«ãå²ã蟌ã¿ã³ã³ãããŒã©ãŒãã¿ã€ããŒãã·ãªã¢ã«ããŒããªã©ã®åšèŸºæ©åšãã䜿çšãããããã€ã¹ãã©ã€ããŒãšäºææ§ãããããšãå€æããŸãããã®ãã©ãããã©ãŒã ïŒãããã³ããã«åºã¥ããŠæ°ããã¢ã³ããŒãã©ãããã©ãŒã ãäœæããŸããã
幞ããªããšã«ããããã°ã¯ããã¯ã¯é ããŠãããçŸåšã§ã¯äœæ¥çšã³ã¢ã®çµã¿ç«ãŠã¯æéŠã軜ãåããã ãã§å®äºããŠããŸãã ç¹°ãè¿ãããå Žåã¯ããœãŒã¹ãè€è£œããŠæ¬¡ã®ã³ãã³ããå®è¡ã§ããŸãã
$ make ARCH=arm CROSS_BUILD=arm-none-eabi- amber_defconfig $ make -j8 ARCH=arm CROSS_BUILD=arm-none-eabi- Image $ make ARCH=arm CROSS_BUILD=arm-none-eabi- arch/arm/boot/dts/amber-de2115.dts
ã«ãŒãã«ãã¢ã»ã³ãã«ããåŸã
arch/arm/boot/Image
ããã³
arch/arm/boot/dts/amber-de2115.dtb
ãã¡ã€ã«ãäœæãããXMODEMãããã³ã«ã䜿çšããŠã·ãªã¢ã«ããŒãçµç±ã§ããŒãããŒããŒã䜿çšããŠããŒãã«ããŠã³ããŒãã§ããç¶æ ã«ãªããŸãã
ããŒãããŒããŒããã«ãããã«ã¯ã
sw/boot-loader-serial
ãã©ã«ããŒã«ç§»åãã
make
ïŒ
AMBER_CROSSTOOL
ç°å¢
AMBER_CROSSTOOL
å¿ããªãã§ãã ããïŒãå®è¡ãã
boot-loader-serial.mem
ãããã¯ã
mem2mif
ãŠãŒãã£ãªãã£ã䜿çšããŠã¢ã«ãã©ã§MIF圢åŒã«å€æã§ããŸãã¡ã¢ãªåæåãã¡ã€ã«ãšããŠã®Quartus IIã
ãã¹ãŠããŸãšãã
Terasic DE2-115ããŒãããæã¡ã®å Žåã¯ã
de2_115.qpf
ãããžã§ã¯ããéããŠåæããŸãïŒç§ã®ãããžã§ã¯ãã§ã¯ããã¶ãŒããŒãã«COMããŒãããªããããã·ãªã¢ã«ããŒãã¯ããŒãã®RS232ã§ã¯ãªãEXT_IOã³ãã¯ã¿ã«æ¥ç¶ãããŠããŸãïŒ ïŒãåã®æé
boot-loader-serial.mif
åä¿¡ãã
boot-loader-serial.mif
ã¡ã¢ãªãã¡ã€ã«
de2_115_sram_2048_32_byte_en
ãšããŠæå®ãããããã¹ããªãŒã ãããŒãã«ããŒãããŸãã æ¢ç¥ã®éçºè ã®1人ã«ãšã£ãŠãAmberããã»ããµã¯ãªã»ããããžãã¯ãå®è£ ããŠããªãã£ãããããããã¹ããªãŒã ããªããŒãããããšã«ãã£ãŠã®ã¿ããã»ããµãåæç¶æ ã«ãªã»ããã§ããŸãã åæã«ãããã»ã¹äžã«KEY0ãã¿ã³ãæŒããããšãããã»ããµã¯ããã°ã©ã ããªãªãŒã¹ããããŸã§ããã°ã©ã ãéå§ããŸããã ãã®ãã¿ã³ã䜿çšããŠãSignalTapã䜿çšããŠVerilogã³ãŒãããããã°ããŸããã ãããã圌女ãææŸããå Žåããããã¹ããªãŒã ãåèµ·åããã ãã§æåããããçŽãããšãã§ããŸãã
921600ããŒã«èšå®ããã端æ«ã«ãããã¹ããªãŒã ãããŒããããšãããã«bootè²ã®ããŒãããŒããŒããã³ããã衚瀺ãããŸãã 次ã«ã
b 80000
ã³ãã³ããå ¥åããŠã以åã«XMODEMã䜿çšããŠåœ¢æãããLinuxã«ãŒãã«ãã¡ã€ã«ïŒ
arch/arm/boot/Image
ïŒãéä¿¡ãã次ã«
b 78000
ã³ãã³ããååºŠå ¥åããŠãæ€çŽ¢ããããã€ã¹ã説æããDTBãã¡ã€ã«ãéä¿¡ããå¿ èŠããããŸããã©ã®ãã©ã€ããŒãããŒãããããã·ã¹ãã ã«æèŒãããŠããRAMã®éãã«ãŒãã«ãã©ã¡ãŒã¿ãŒãšãã®ä»ã®æ å ±ãå«ãã³ãã³ãã©ã€ã³ã ããŒãããŒããŒã«ããããåœãŠãDTBãæ¢ãã¢ãã¬ã¹ãšããŠã¢ãã¬ã¹
0x78000
ãã«ãŒãã«ã«éä¿¡ããããã«ããã®ã§ããã®ã¢ãã¬ã¹ã§ããŒãããŸãã
æåŸã«ãäž¡æ¹ã®ãã¡ã€ã«ãRAMïŒSDRAMïŒã«èªã¿èŸŒãŸãããšãããŒãããŒããŒã³ã³ãœãŒã«ã§
j 80000
ã³ãã³ããå ¥åã§ããŸãã Linuxã¯ããŒããéå§ãããã¹ãŠãæ£ããè¡ãããå Žåãçµæã¯æ¬¡ã®ããã«ãªããŸãã
ãHelloãWorldãã¯æåã®ãŠãŒã¶ãŒããã»ã¹ïŒ
/sbin/init
ïŒãšããŠå§ãŸããæšæºã©ã€ãã©ãªãšã«ãŒãã«ãä»ããŠãç»é¢ã«åæããããã¬ãŒãºã衚瀺ããŸããã ãããã§ããã
Terasic DE2-115ããŒããŸãã¯ååãªãµã€ãºã®FPGAãæèŒããä»ã®ããŒãããªãå Žåã§ããVerilatorã·ãã¥ã¬ãŒã¿ãŒã§Linuxãå®è¡ã§ããŸãã ãããè¡ãã«ã¯ã
-DAMBER_LOAD_MAIN_MEM=1
ããã³
-DAMBER_LOAD_DTB_MEM=1
ã
hw/de2_115/tb/Makefile
ã«
Vtb
ã
Vtb
å®è¡å¯èœãã¡ã€ã«ãåæ§ç¯ããŸãã 次ã«ã
amber-bin2mem
ã䜿çšããŠãã·ãã¥ã¬ãŒã¿çšã®ã«ãŒãã«ãã¡ã€ã«ãšDTBãã¡ã€ã«ãäœæããŸãã
$ amber-bin2mem arch/arm/boot/Image 80000 > vmlinux.mem $ amber-bin2mem arch/arm/boot/dts/amber-de2115.dtb 78000 > dtb.mem
ããã«ãéåžžã¢ãŒãã§ã¯ãŠãŒã¶ãŒããã®ã³ãã³ããèŠæ±ããããã
main
é¢æ°ã®åŒã³åºããã³ã¡ã³ãåããŠãã·ãã¥ã¬ãŒã·ã§ã³çšã®ããŒãããŒããŒã³ãŒãããããã«å€æŽããå¿ èŠããããŸãã ãã®åŸãããŒãããŒããŒã¯ããã«å¶åŸ¡ãLinuxã«ãŒãã«ã«è»¢éããŸãã
*.mem
ãã¡ã€ã«ã
*.mem
ãã©ã«ããŒã«ã³ããŒããã/
./obj_dir/Vtb
/
./obj_dir/Vtb
ãå®è¡ããŠãLinuxã®èµ·åãç£èŠããŸãã
å¶éãå®çšçãªå©ç¹
ãã¡ãããçµæãšããŠèµ·åããLinuxã¯ãAmberããã»ããµã³ã¢ã«MMUïŒã¡ã¢ãªç®¡çãŠãããïŒããªãããã®çµæãä»®æ³ã¡ã¢ãªãµããŒãïŒãã¹ãŠã®ã¡ã¢ãªïŒãããããããµãŒããŒãã¯ãŒã¯ã¹ããŒã·ã§ã³ã§äœ¿çšããLinuxãšã¯ãŸã£ããç°ãªããŸããç©ççïŒãã¡ã¢ãªä¿è·ïŒä»»æã®ã¢ããªã±ãŒã·ã§ã³ãã«ãŒãã«ã¡ã¢ãªãæãªãããWishboneãã¹ãä»ããŠããããã€ãã¹ããããã€ã¹ãšéä¿¡ã§ããïŒãã³ããŒãªã³ã©ã€ããªã©ãNOMMULinuxã¯çŸåšãéåžžã®åœ¢åŒã®ELFå®è¡å¯èœãã¡ã€ã«ããµããŒãããŠããŸããïŒãã ãã FDPIC ELF圢åŒããµããŒãããéçºããããŸãïŒããã³åçãªãã ããã ioteki -代ããã«äœ¿çšbFLT圢åŒïŒãã€ããªãã©ããïŒ -ã«åºã¥ããŠãåçŽãªåœ¢åŒ
a.out
ã ãããŠããã®ãããªã·ã¹ãã ã§ã¢ããªã±ãŒã·ã§ã³ã®Nåã®ã³ããŒãå®è¡ãããšããŸã£ããåãæ°ã®ã³ããŒãã¡ã¢ãªã«ä¿åãããŸãã
è¡ãããäœæ¥ããã¯å®éçãªå©ç¹ããŸã ãããŸããLinuxã®ãå¥ãåããããããŒãžã§ã³ã§ãã£ãŠãããªãœãŒã¹ãéãããŠãããã€ã¯ãã³ã³ãããŒã©ãŒãããŒã¹ã«ããå€ãã®ããã€ã¹ã§æ©èœããŸãã FPGAããã°ã©ãã³ã°æ奜家ããFPGAåæããã»ããµïŒã¡ãªã¿ã«ãDE2-115ã§ã¯å®¹éã®8ïŒ ãŸãã¯çŽ10,000 LEããå æããªãïŒã§æ¬æ ŒçãªLinuxãè©Šãããšã«ãããèªåã«ãšã£ãŠæçãªããšãåŠã¹ãããšãé¡ã£ãŠããŸãã ã¢ã«ãã©ãŸãã¯ã¶ã€ãªã³ã¯ã¹ã«åºã¥ããå¥ã®ããŒããããå Žåããããžã®ç§»æ€ã¯é£ãããããŸããã ã»ãšãã©ã®äœæ¥ã¯ãã§ã«å®äºããŠããŸãã ãã¡ãããFPGAãšåããããäžã«å®å šãªARM-SoCãå«ãXilinx ZynqãAltera Cyclone V SoCãªã©ãå®çšçãªèŠ³ç¹ããæ¢ã«ããèå³æ·±ããœãªã¥ãŒã·ã§ã³ãæ¢ã«ãããŸããããã®èšäºã§çŽ¹ä»ãããœãªã¥ãŒã·ã§ã³ã«ãããã·ã³ãã«ãªããŒãã®ææè ã§ãLinuxãèµ·åã§ããŸãããŒãäžã®éåžžã«åŒ·åãªFPGAã æ®ãã®ããªãŒããžãã¯ã䜿çšããŠãWishboneãã¹ã«æããŠããã©ã€ããŒã䜿çšããŠOSããã¢ã¯ã»ã¹ã§ããæ°ããã«ã¹ã¿ã ããªãã§ã©ã«ãå®è£ ã§ããŸãã
èšç»
Terasic DE2-115ããŒãã¯ãèå³æ·±ããããžã§ã¯ãããã§ã«äœæãããŠããããšã«åºã¥ããŠãæã匷åãªãããã°ããŒãã®1ã€ã§ãïŒ æãæããäŸãããã å¥ã® äŸããããŸãïŒã å¹ åºãåšèŸºæ©åšãæèŒãããŠããŸãã
- 128 MB SDRAM
- 8 MB SPIãã©ãã·ã¥
- LEDãš7ã»ã°ã¡ã³ãã€ã³ãžã±ãŒã¿
- 16x2液æ¶ãã£ã¹ãã¬ã€
- 24ããããªãŒãã£ãªã³ãŒããã¯
- SDã«ãŒãã¹ããã
- 2ã®ã¬ãããã€ãŒãµãããããŒã
- VGAã¢ãã¿ãŒåºåãããŒããŒãçšPS / 2
- USBããŒã
ãã®ãã¹ãŠã®å¯ã®ãã¡ããã®ãããžã§ã¯ãã§ã¯ãããŸã§ã©ã³ãã ã¢ã¯ã»ã¹ã¡ã¢ãªã®ã¿ã䜿çšããŸããã å°æ¥çã«ã¯ãæéãããã°ãU-Bootãã³ã³ãã€ã«ããŠãå èµãã©ãã·ã¥ã¡ã¢ãªãFPGAã®ããŒãããŒããŒã³ãŒãã«é 眮ããU-BootãããŒããããšãLinuxã«ãŒãã«ãšã«ãŒããã¡ã€ã«ã·ã¹ãã ãSDã¡ã¢ãªã«ãŒãããããŒããããŸãã ããã«ãããŒãäžã§å©çšå¯èœãªåšèŸºæ©åšïŒã€ãŒãµããããªã©ïŒã®ãµããŒããå®è£ ããããšæããŸãã