Thursday, May 13, 2010
Sunday, February 18, 2007
組み込みシステム開発評価キット(CQ出版)購入
去年(2006年)の年末になるけど、「組み込みシステム開発評価キット」を買ってしまった。
まだ、余りいじっていないが、色々楽しめそう。
EDKでGCCがうまく動作しない問題とかが、解決できたので、
時間を見つけて動かしてみたいと思います。
最近、特許申請を出していたので、時間が無かった。
(言い訳だけど、)
今月末で、会社を辞める予定、
その後のことは、もう少し先にならないと決まらない。
もしかすると、会社を今年作るかもしれない。
まだ、余りいじっていないが、色々楽しめそう。
EDKでGCCがうまく動作しない問題とかが、解決できたので、
時間を見つけて動かしてみたいと思います。
最近、特許申請を出していたので、時間が無かった。
(言い訳だけど、)
今月末で、会社を辞める予定、
その後のことは、もう少し先にならないと決まらない。
もしかすると、会社を今年作るかもしれない。
Wednesday, August 09, 2006
Kernel 2.6.17.4 on SH7780
2.6.17.4のカーネルが、SH7780で動きました。
ディスクは、/dev/hdaとmtdを併用しています。
2.6.10の時よりも安定している模様。
意味不明のハングアップはなくなった。
次の表は、SH-Linuxからの変更点のまとめ。
以下、起動時の出力。
hdparmの数値は、以前の2.6.10よりも早くなった。
ディスクは、/dev/hdaとmtdを併用しています。
2.6.10の時よりも安定している模様。
意味不明のハングアップはなくなった。
次の表は、SH-Linuxからの変更点のまとめ。
| 変更モジュール | 変更内容 |
| arch/sh/drivers/pci/ops-se7780.c | PCIバス初期化、INTA,INTB,INTC,INTDの定義(新設) |
| include/asm-sh/se7780/map.h | ボード上のレジスタのアドレス(新設) |
| include/asm-sh/se7780/io.h | ボードのI/O操作用の関数のプロトタイプ(新設) |
| include/asm-sh/se7780/irq.h | ボードの割り込み定義(新設) |
| include/asm-sh/se7780/irq.h | ボードの変数の定義(新設) |
| arch/sh/boards/hanada/se7780/setup.c | machine_vectorとFPGAの初期化(新設) |
| arch/sh/boards/hanada/se7780/io.c | 新設 |
| arch/sh/boards/hanada/se7780/led.c | HeartBeat用のコード(新設) |
以下、起動時の出力。
masta@SH7780:~$ dmesg Linux version 2.6.17-sh (masta@localhost.localdomain) (gcc 3.4.5) on Aug 7 15:52:14 JST 2006 SolutionEngine MS7780SE03. Init FPGA. On node 0 totalpages: 32768 DMA zone: 32768 pages, LIFO batch:7 Built 1 zonelists Kernel command line: console=ttySC0,115200 root=301 init_IRQ_intc2 PID hash table entries: 1024 (order: 10, 4096 bytes) Interval = 83333 Using tmu for system timer Console: colour dummy device 80x25 Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Memory: 126720k/131072k available (2741k kernel code, 4276k reserved, 106k data, 132k init) PVR=10200a00 CVR=73440010 PRR=00000920 I-cache : n_ways=4 n_sets=256 way_incr=8192 I-cache : entry_mask=0x00001fe0 alias_mask=0x00001000 n_aliases=2 D-cache : n_ways=4 n_sets=256 way_incr=8192 D-cache : entry_mask=0x00001fe0 alias_mask=0x00001000 n_aliases=2 Calibrating delay loop... 177.35 BogoMIPS (lpj=886784) Mount-cache hash table entries: 512 CPU: SH7780 PCI: Using configuration type 1 NET: Registered protocol family 16 SCSI subsystem initialized usbcore: registered new driver usbfs usbcore: registered new driver hub Autoconfig PCI channel 0x882c35b0 Scanning bus 00, I/O 0x00002000:0x00402000, Mem 0xfd000000:0xfe000000 00:00.0 Class 0200: 8086:1229 (rev 0c) Mem at 0xfd000000 [size=0x1000] I/O at 0x00002000 [size=0x40] Mem at 0xfd020000 [size=0x20000] 00:01.0 Class 0104: 1095:3114 (rev 02) I/O at 0x00002040 [size=0x8] I/O at 0x00002048 [size=0x4] I/O at 0x00002050 [size=0x8] I/O at 0x00002058 [size=0x4] I/O at 0x00002060 [size=0x10] Mem at 0xfd040000 [size=0x400] 00:02.0 Class 0180: 1095:3512 (rev 01) I/O at 0x00002070 [size=0x8] I/O at 0x00002078 [size=0x4] I/O at 0x00002080 [size=0x8] I/O at 0x00002088 [size=0x4] I/O at 0x00002090 [size=0x10] Mem at 0xfd040400 [size=0x200] 00:03.0 Class 0c03: 1033:0035 (rev 43) Mem at 0xfd041000 [size=0x1000] 00:03.1 Class 0c03: 1033:0035 (rev 43) Mem at 0xfd042000 [size=0x1000] PCI: IRQ mapping request for slot 0, func 0, irq 65 PCI: IRQ mapping request for slot 1, func 0, irq 68 PCI: IRQ mapping request for slot 2, func 0, irq 67 PCI: IRQ mapping request for slot 3, func 0, irq 68 PCI: IRQ mapping request for slot 3, func 1, irq 65 NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 4096 (order: 2, 16384 bytes) TCP bind hash table entries: 2048 (order: 1, 8192 bytes) TCP: Hash tables configured (established 4096 bind 2048) TCP reno registered io scheduler noop registered io scheduler deadline registered (default) SuperH SCI(F) driver initialized ttySC0 at MMIO 0xffe00000 (irq = 43) is a scif ttySC1 at MMIO 0xffe10000 (irq = 79) is a scif loop: loaded (max 8 devices) Intel(R) PRO/1000 Network Driver - version 7.0.33-k2 Copyright (c) 1999-2005 Intel Corporation. e100: Intel(R) PRO/100 Network Driver, 3.5.10-k2-NAPI e100: Copyright(c) 1999-2005 Intel Corporation e100: eth0: e100_probe: addr 0xfd000000, irq 65, MAC addr 00:02:B3:40:8F:86 Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx Sil3114 Serial ATA: IDE controller at PCI slot 0000:00:01.0 Sil3114 Serial ATA: chipset revision 2 Sil3114 Serial ATA: 100% native mode on irq 68 ide0: MMIO-DMA , BIOS settings: hda:pio, hdb:pio ide1: MMIO-DMA , BIOS settings: hdc:pio, hdd:pio Probing IDE interface ide0... hda: Maxtor 6L250S0, ATA DISK drive ide0 at 0xfd040080-0xfd040087,0xfd04008a on irq 68 Probing IDE interface ide1... SiI3512 Serial ATA: IDE controller at PCI slot 0000:00:02.0 SiI3512 Serial ATA: chipset revision 1 SiI3512 Serial ATA: 100% native mode on irq 67 ide2: MMIO-DMA , BIOS settings: hde:pio, hdf:pio ide3: MMIO-DMA , BIOS settings: hdg:pio, hdh:pio Probing IDE interface ide2... Probing IDE interface ide3... hda: max request size: 64KiB hda: 490234752 sectors (251000 MB) w/16384KiB Cache, CHS=30515/255/63 hda: cache flushes supported hda: hda1 hda2 hda3 Map virt addr 0xa0000000 Probing for flash chips at 0x00000000 SH Solution Engine FLASH: Found 2 x16 devices at 0x0 in 32-bit bank Amd/Fujitsu Extended Query Table at 0x0040 SH Solution Engine FLASH: CFI does not contain boot bank location. Assuming top. number of CFI chips: 1 cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. SH Solution Engine: Flash at 0x00000000 Creating 3 MTD partitions on "SH Solution Engine FLASH": 0x00000000-0x00020000 : "bootloader" 0x00020000-0x00220000 : "kernel" 0x00220000-0x01000000 : "userland" usbmon: debugfs is not available ohci_hcd: 2005 April 22 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI) ohci_hcd 0000:00:03.0: OHCI Host Controller ohci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 1 ohci_hcd 0000:00:03.0: irq 68, io mem 0xfd041000 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected ohci_hcd 0000:00:03.1: OHCI Host Controller ohci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 2 ohci_hcd 0000:00:03.1: irq 65, io mem 0xfd042000 usb usb2: configuration #1 chosen from 1 choice hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected Initializing USB Mass Storage driver... usbcore: registered new driver usb-storage USB Mass Storage support registered. usbcore: registered new driver usbhid drivers/usb/input/hid-core.c: v2.6:USB HID core driver md: raid0 personality registered for level 0 md: raid1 personality registered for level 1 md: raid5 personality registered for level 5 md: raid4 personality registered for level 4 raid5: measuring checksumming speed 8regs : 376.000 MB/sec 8regs_prefetch: 318.400 MB/sec 32regs : 476.000 MB/sec 32regs_prefetch: 398.800 MB/sec raid5: using function: 32regs (476.000 MB/sec) md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27 md: bitmap version 4.39 TCP bic registered NET: Registered protocol family 1 NET: Registered protocol family 17 e100: eth0: e100_watchdog: link up, 100Mbps, full-duplex IP-Config: Incomplete network configuration information. md: Autodetecting RAID arrays. md: autorun ... md: ... autorun DONE. EXT2-fs warning: checktime reached, running e2fsck is recommended VFS: Mounted root (ext2 filesystem). Freeing unused kernel memory: 132k freed ReiserFS: hda3: found reiserfs format "3.6" with standard journal ReiserFS: hda3: using ordered data mode ReiserFS: hda3: journal params: device hda3, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30 ReiserFS: hda3: checking transaction log (hda3) ReiserFS: hda3: Using r5 hash to sort names e100: eth0: e100_watchdog: link up, 100Mbps, full-duplex |
hdparmの数値は、以前の2.6.10よりも早くなった。
SH7780:~# hdparm -tT /dev/hda /dev/hda: Timing cached reads: 300 MB in 2.02 seconds = 148.53 MB/sec Timing buffered disk reads: 120 MB in 3.04 seconds = 39.53 MB/sec |
Monday, July 24, 2006
Kernel 2.6.10 on SH7780
2.6.10のカーネル起動メッセージ
「173.26 BogoMIPS」と出ているが、
この値は、SH-4のSH7751R@266MHzよりも遅い!!!
まぁ、実質どうでも良い数字であるが、なぜだろう。
RAID5の計算は、SH7751R@266MHzよりも2倍以上速い模様。
「173.26 BogoMIPS」と出ているが、
この値は、SH-4のSH7751R@266MHzよりも遅い!!!
まぁ、実質どうでも良い数字であるが、なぜだろう。
RAID5の計算は、SH7751R@266MHzよりも2倍以上速い模様。
masta@SH7780:~$ dmesg Linux version 2.6.10 (root@SH7780) (gcc version 3.4.4 20050314 (prerelease) (Deb ian 3.4.3-13)) #2 Tue Jul 25 00:10:34 JST 2006 On node 0 totalpages: 32768 DMA zone: 32768 pages, LIFO batch:8 Normal zone: 0 pages, LIFO batch:1 HighMem zone: 0 pages, LIFO batch:1 Built 1 zonelists Kernel command line: console=ttySC0,115200 root=301 PID hash table entries: 1024 (order: 10, 16384 bytes) Calculated peripheral clock value 32498688 differs from sh_pclk value 33333333, fixing.. CPU clock: 389.98MHz Bus clock: 64.99MHz Module clock: 32.49MHz Interval = 81247 Console: colour dummy device 80x25 Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) Memory: 126208k/131072k available (2897k kernel code, 4824k reserved, 190k data, 320k init) Calibrating delay loop... 173.26 BogoMIPS (lpj=866304) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) CPU: SH7780 NET: Registered protocol family 16 SCSI subsystem initialized usbcore: registered new driver usbfs usbcore: registered new driver hub SH7780 PCI: Finished initialization of the PCI controller PCIBIOS: USB Host port num set 4 PCI: Using configuration type 1 SH Virtual Bus initialized NTFS driver 2.1.22 [Flags: R/W]. Initializing Cryptographic API Console: switching to colour frame buffer device 80x30 fb0: sm501lcd frame buffer device SuperH SCI(F) driver initialized ttySC0 at MMIO 0xffe00000 (irq = 43) is a scif ttySC1 at MMIO 0xffe10000 (irq = 78) is a scif io scheduler noop registered io scheduler deadline registered loop: loaded (max 8 devices) Intel(R) PRO/1000 Network Driver - version 5.5.4-k2 Copyright (c) 1999-2004 Intel Corporation. e100: Intel(R) PRO/100 Network Driver, 3.2.3-k2-NAPI e100: Copyright(c) 1999-2004 Intel Corporation e100: eth0: e100_probe: addr 0xfd000000, irq 65, MAC addr 00:02:B3:40:8F:86 PPP generic driver version 2.4.2 Universal TUN/TAP device driver 1.5 (C)1999-2002 Maxim Krasnyansky smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre eth1: SMC91C11xFD (rev 1) at 0x300 IRQ 8 [nowait] eth1: Ethernet addr: 00:00:87:d6:0e:43 eth1: PHY LAN83C183 (LAN91C111 Internal) Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx SiI3114 Serial ATA (xxxxxx): IDE controller at PCI slot 0000:00:01.0 SiI3114 Serial ATA (xxxxxx): chipset revision 2 SiI3114 Serial ATA (xxxxxx): 100% native mode on irq 68 ide0: MMIO-DMA , BIOS settings: hda:pio, hdb:pio ide1: MMIO-DMA , BIOS settings: hdc:pio, hdd:pio Probing IDE interface ide0... hda: Maxtor 6L250S0, ATA DISK drive elevator: using deadline as default io scheduler ide0 at 0xfd040080-0xfd040087,0xfd04008a on irq 68 Probing IDE interface ide1... SiI3512 Serial ATA: IDE controller at PCI slot 0000:00:02.0 SiI3512 Serial ATA: chipset revision 1 SiI3512 Serial ATA: 100% native mode on irq 67 ide2: MMIO-DMA , BIOS settings: hde:pio, hdf:pio ide3: MMIO-DMA , BIOS settings: hdg:pio, hdh:pio Probing IDE interface ide2... Probing IDE interface ide3... hda: max request size: 64KiB hda: 490234752 sectors (251000 MB) w/16384KiB Cache, CHS=30515/255/63 hda: cache flushes supported hda: hda1 hda2 hda3 ide-floppy driver 0.99.newide Map virt addr 0xa0000000 Probing for flash chips at 0x00000000 SH Solution Engine FLASH: Found 2 x16 devices at 0x0 in 32-bit bank Amd/Fujitsu Extended Query Table at 0x0040 SH Solution Engine FLASH: CFI does not contain boot bank location. Assuming top. number of CFI chips: 1 cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. SH Solution Engine: Flash at 0x00000000 Creating 3 MTD partitions on "SH Solution Engine FLASH": 0x00000000-0x00020000 : "bootloader" 0x00020000-0x00220000 : "kernel" 0x00220000-0x01000000 : "userland" ehci_hcd 0000:00:03.2: NEC Corporation USB 2.0 ehci_hcd 0000:00:03.2: irq 66, pci mem 0xfd043000 ehci_hcd 0000:00:03.2: new USB bus registered, assigned bus number 1 ehci_hcd 0000:00:03.2: USB 2.0 initialized, EHCI 1.00, driver 26 Oct 2004 hub 1-0:1.0: USB hub found hub 1-0:1.0: 5 ports detected ohci_hcd: 2004 Nov 08 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI) ohci_hcd 0000:00:03.0: NEC Corporation USB ohci_hcd 0000:00:03.0: irq 68, pci mem 0xfd041000 ohci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 2 hub 2-0:1.0: USB hub found hub 2-0:1.0: 3 ports detected ohci_hcd 0000:00:03.1: NEC Corporation USB (#2) ohci_hcd 0000:00:03.1: irq 65, pci mem 0xfd042000 ohci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 3 hub 3-0:1.0: USB hub found hub 3-0:1.0: 2 ports detected Initializing USB Mass Storage driver... usbcore: registered new driver usb-storage USB Mass Storage support registered. usbcore: registered new driver usbhid drivers/usb/input/hid-core.c: v2.0:USB HID core driver mice: PS/2 mouse device common for all mice md: raid0 personality registered as nr 2 md: raid1 personality registered as nr 3 md: raid5 personality registered as nr 4 raid5: measuring checksumming speed 8regs : 367.200 MB/sec 8regs_prefetch: 360.800 MB/sec 32regs : 465.200 MB/sec 32regs_prefetch: 448.000 MB/sec raid5: using function: 32regs (465.200 MB/sec) md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 MS7780SE03 HAC & AK4544A Audio Driver NET: Registered protocol family 2 IP: routing cache hash table of 1024 buckets, 8Kbytes TCP: Hash tables configured (established 8192 bind 16384) NET: Registered protocol family 1 NET: Registered protocol family 17 md: Autodetecting RAID arrays. md: autorun ... md: ... autorun DONE. VFS: Mounted root (ext2 filesystem). Freeing unused kernel memory: 320k freed Adding 2409740k swap on /dev/hda2. Priority:-1 extents:1 ReiserFS: hda3: found reiserfs format "3.6" with standard journal ReiserFS: hda3: using ordered data mode ReiserFS: hda3: journal params: device hda3, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30 ReiserFS: hda3: checking transaction log (hda3) ReiserFS: hda3: Using r5 hash to sort names e100: eth0: e100_watchdog: link up, 100Mbps, full-duplex |
Linuxをポーティング!?
SuperH (SH-4A SH7780)に Linuxをポーティング!?
SH7780のSolutionEngine(型番:MS7780SE03)をいじって半年が経とうとしている。
自前のBIOSは、1ヶ月程度で動いたが、Linux BSPキットのベータ版は、たまに
原因不明のハングアップが発生していて、暫く放置されていた。
先日(7月上旬)、 正式版のLinux BSPキットが送られてきたので、色々弄っていたが、
1週間程度で、SII3114のSATAカードをrootにして起動できるようになった。
これに伴い、BIOSのコマンドも 拡張して、ROM以外にhdaからも起動できるように
変更した。
でもやっぱり、Linux BSP(Kernel 2.6.10)だと、翌日ハングアップしている場合が
ある。一応、カーネル以外は、debianパッケージをハードディスクに
入れてコンパイル環境も整えてみたが、放っておくと次のようなメッセージを
コンソールに出す場合もあった。
(SIIのSATAドライバもpci_ids.hとsii.cを修正して無理やり動かしたのが
いけないのかもしれないけど、 Solution Engine上の SII3512でもどうやら
同じなので、それだけの問題ではないようだ。)
そこで、他のLinuxのカーネルをSH7780用にコンパイルしてみることにした。
lantankのdebian化でお世話になったサイトからカーネルを
ダウンロードして、board定義などを適当に加えてコンパイルしてみた。
(ソースコードの構成を見ると昔のKernel 0.98とかと比べると、まったく別物だね。)
ポーティングというと新しいCPUに対応するところから行うというのが
普通だと思うが、今回は、SH7780のCPU部分は既にカーネルに含まれていたので
CPU周りはそのまま利用して、ボードの定義を追加してみた。
SH7780のSolutionEngine(型番:MS7780SE03)をいじって半年が経とうとしている。
自前のBIOSは、1ヶ月程度で動いたが、Linux BSPキットのベータ版は、たまに
原因不明のハングアップが発生していて、暫く放置されていた。
先日(7月上旬)、 正式版のLinux BSPキットが送られてきたので、色々弄っていたが、
1週間程度で、SII3114のSATAカードをrootにして起動できるようになった。
これに伴い、BIOSのコマンドも 拡張して、ROM以外にhdaからも起動できるように
変更した。
でもやっぱり、Linux BSP(Kernel 2.6.10)だと、翌日ハングアップしている場合が
ある。一応、カーネル以外は、debianパッケージをハードディスクに
入れてコンパイル環境も整えてみたが、放っておくと次のようなメッセージを
コンソールに出す場合もあった。
(SIIのSATAドライバもpci_ids.hとsii.cを修正して無理やり動かしたのが
いけないのかもしれないけど、 Solution Engine上の SII3512でもどうやら
同じなので、それだけの問題ではないようだ。)
masta@SH7780:~$ hda: dma_timer_expiry: dma status == 0x22 hda: DMA timeout error hda: dma timeout error: status=0x58 { DriveReady SeekComplete DataRequest } ide: failed opcode was: unknown hda: status timeout: status=0xd8 { Busy } ide: failed opcode was: unknown ide0: reset phy, status=0x00000113, siimage_reset hda: drive not ready for command ide0: reset: success hda: dma_intr: status=0x00 { } ide: failed opcode was: unknown hda: status timeout: status=0xfd { Busy } ide: failed opcode was: unknown hda: DMA disabled ide0: reset phy, status=0xfd040104, siimage_reset hda: drive not ready for command ide0: reset phy dead, status=0xfd040104 ide0: host reset_poll failure for hda. hda: status error: status=0xfd { Busy } ide: failed opcode was: unknown ide0: reset phy, status=0xfd040104, siimage_reset hda: drive not ready for command ide0: reset phy dead, status=0xfd040104 ide0: host reset_poll failure for hda. hda: status error: status=0xfd { Busy } ide: failed opcode was: unknown end_request: I/O error, dev hda, sector 46434239 hda: drive not ready for command |
そこで、他のLinuxのカーネルをSH7780用にコンパイルしてみることにした。
lantankのdebian化でお世話になったサイトからカーネルを
ダウンロードして、board定義などを適当に加えてコンパイルしてみた。
(ソースコードの構成を見ると昔のKernel 0.98とかと比べると、まったく別物だね。)
ポーティングというと新しいCPUに対応するところから行うというのが
普通だと思うが、今回は、SH7780のCPU部分は既にカーネルに含まれていたので
CPU周りはそのまま利用して、ボードの定義を追加してみた。
Tuesday, June 20, 2006
CPLDのノイズ対策
「結論」
UART受けは2段でのD-FFで入力信号をラッチしてから、ステートマシンで処理すること。
(念のため100pf程度のコンデンサでノイズを取っておくこと)
「現象」
250kbpsのUARTを受けて処理してFIFO経由で別レートのUARTで転送するCPLDを作った。
シミュレーション上は、動作するが実機だとまれに0xFFが出力されるという問題が発生した。
「説明」
メタステーブル状態が発生するのは、もう少しクロックが高い信号のときだと思っていたら
どうやら、入力の信号にノイズが乗っていたため、たまに発生していたらしい。
メタステーブル状態になると、他のフリップフロップの信号も不安定になり'0'で初期化している信号も初期化が無視される。今回のケースでは 0x00で初期化している8bitラッチが0xFFになって、FIFOに渡っていたと想像される。0xFFを代入するVHDLは書いていないので、近辺の信号が誤動作を受けるらしい。
UART受けは2段でのD-FFで入力信号をラッチしてから、ステートマシンで処理すること。
(念のため100pf程度のコンデンサでノイズを取っておくこと)
「現象」
250kbpsのUARTを受けて処理してFIFO経由で別レートのUARTで転送するCPLDを作った。
シミュレーション上は、動作するが実機だとまれに0xFFが出力されるという問題が発生した。
「説明」
メタステーブル状態が発生するのは、もう少しクロックが高い信号のときだと思っていたら
どうやら、入力の信号にノイズが乗っていたため、たまに発生していたらしい。
メタステーブル状態になると、他のフリップフロップの信号も不安定になり'0'で初期化している信号も初期化が無視される。今回のケースでは 0x00で初期化している8bitラッチが0xFFになって、FIFOに渡っていたと想像される。0xFFを代入するVHDLは書いていないので、近辺の信号が誤動作を受けるらしい。
Sunday, June 04, 2006
Hobby PC: EDK の1回目
EDKは日本語が使えない模様。
UCFファイルに日本語を入れたかったんだけどな。
SPARTAN-3 Starter Kitに2つシリアルを追加する。
1.UCFファイルにRS232_1を追加
2.MHSファイルにRS232_1を追加
3.MSSファイルにRS232_1を追加
具体的には次の通り
■system.ucfファイルの変更箇所
■system.mhsファイルの変更箇所
■system.mssファイルの変更箇所
ハードウェアを定義するMHSを変更したら、自動生成されるHDLも
一旦削除する必要があるので、make -f system.make hwcleanとするか
或いは、Hardware->Clean Hardware のメニューを実行する必要がある。
しないと、次のエラーがOutputに表示される。
□ハードウェア(SPARTAN3 Starter Kit)のスペック
UCFファイルに日本語を入れたかったんだけどな。
SPARTAN-3 Starter Kitに2つシリアルを追加する。
1.UCFファイルにRS232_1を追加
2.MHSファイルにRS232_1を追加
3.MSSファイルにRS232_1を追加
具体的には次の通り
■system.ucfファイルの変更箇所
Net fpga_0_RS232_0_RX_pin LOC=t13; Net fpga_0_RS232_0_TX_pin LOC=r13; Net fpga_0_RS232_1_RX_pin LOC=n10; # ug130.pdf ←今回追加 Net fpga_0_RS232_1_TX_pin LOC=t14; # ug130.pdf ←今回追加 |
■system.mhsファイルの変更箇所
#PORT fpga_0_RS232_RX_pin = fpga_0_RS232_RX, DIR = I #PORT fpga_0_RS232_TX_pin = fpga_0_RS232_TX, DIR = O PORT fpga_0_RS232_0_RX_pin = fpga_0_RS232_RX, DIR = I PORT fpga_0_RS232_0_TX_pin = fpga_0_RS232_TX, DIR = O PORT fpga_0_RS232_1_RX_pin = fpga_0_RS232_RX, DIR = I PORT fpga_0_RS232_1_TX_pin = fpga_0_RS232_TX, DIR = O ... BEGIN opb_uartlite PARAMETER INSTANCE = RS232_0 PARAMETER HW_VER = 1.00.b PARAMETER C_BAUDRATE = 115200 PARAMETER C_DATA_BITS = 8 PARAMETER C_ODD_PARITY = 0 PARAMETER C_USE_PARITY = 0 PARAMETER C_CLK_FREQ = 50000000 PARAMETER C_BASEADDR = 0x40600000 PARAMETER C_HIGHADDR = 0x4060ffff BUS_INTERFACE SOPB = mb_opb PORT OPB_Clk = sys_clk_s PORT RX = fpga_0_RS232_0_RX PORT TX = fpga_0_RS232_0_TX END BEGIN opb_uartlite PARAMETER INSTANCE = RS232_1 PARAMETER HW_VER = 1.00.b PARAMETER C_BAUDRATE = 115200 PARAMETER C_DATA_BITS = 8 PARAMETER C_ODD_PARITY = 0 PARAMETER C_USE_PARITY = 0 PARAMETER C_CLK_FREQ = 50000000 PARAMETER C_BASEADDR = 0x40610000 PARAMETER C_HIGHADDR = 0x4061ffff BUS_INTERFACE SOPB = mb_opb PORT OPB_Clk = sys_clk_s PORT RX = fpga_0_RS232_1_RX PORT TX = fpga_0_RS232_1_TX END |
■system.mssファイルの変更箇所
BEGIN DRIVER PARAMETER DRIVER_NAME = uartlite PARAMETER DRIVER_VER = 1.00.b PARAMETER HW_INSTANCE = RS232_0 END BEGIN DRIVER PARAMETER DRIVER_NAME = uartlite PARAMETER DRIVER_VER = 1.00.b PARAMETER HW_INSTANCE = RS232_1 END |
ハードウェアを定義するMHSを変更したら、自動生成されるHDLも
一旦削除する必要があるので、make -f system.make hwcleanとするか
或いは、Hardware->Clean Hardware のメニューを実行する必要がある。
しないと、次のエラーがOutputに表示される。
ERROR:MDT - fpga_0_RS232_0_RX (RX) - C:\labo\labo_fpga\labo_EDK\SPARTAN3\system.mhs line 141 - connection has no driver! ERROR:MDT - fpga_0_RS232_1_RX (RX) - C:\labo\labo_fpga\labo_EDK\SPARTAN3\system.mhs line 157 - connection has no driver! WARNING:MDT - fpga_0_RS232_0_TX (TX) - C:\labo\labo_fpga\labo_EDK\SPARTAN3\system.mhs line 142 - floating connection! WARNING:MDT - fpga_0_RS232_1_TX (TX) - C:\labo\labo_fpga\labo_EDK\SPARTAN3\system.mhs line 158 - floating connection! WARNING:MDT - dcm_0_lock (LOCKED) - C:\labo\labo_fpga\labo_EDK\SPARTAN3\system.mhs line 260 - floating connection! |
□ハードウェア(SPARTAN3 Starter Kit)のスペック
# Created by Base System Builder Wizard for Xilinx EDK 8.1 Build EDK_I.18.7 # Sat Jun 03 23:18:14 2006 # Target Board: Xilinx Spartan-3 Starter Board Rev E # Family: spartan3 # Device: XC3S200 # Package: FT256 # Speed Grade: -4 # Processor: Microblaze # System clock frequency: 50.000000 MHz # Debug interface: On-Chip HW Debug Module # On Chip Memory : 8 KB # Total Off Chip Memory : 1 MB # - SRAM_256Kx32 = 1 MB |
EDK8.1 をさわってみる
EDK8.1を購入したので、触ってみる。
一緒に購入したSPARTAN3EのStarterKitに接続してみるも、開発に使用するThinkPad T42pが、ものすごく遅くなる。
実行時のコンソールの表示からCygwinを内部で使用していることが分かる。 このためか、2重起動とかはチェックできていない様子。Linuxで開発した方が 快適かもしれないと思った。
マクロCPUであるMicroBlaze用プログラムは、Xilinx Platform Studioに含まれている GCCを利用する。サンプルコードが自動で生成されるため、RS232C経由でprintは 何もしないでもサンプル内で出来ている。
やること:
1.自分のVHDLの回路を組み合わせる。
2.残りのFPGAの使用率の確認。
3.Peripheralの新規作成方法。
一緒に購入したSPARTAN3EのStarterKitに接続してみるも、開発に使用するThinkPad T42pが、ものすごく遅くなる。
実行時のコンソールの表示からCygwinを内部で使用していることが分かる。 このためか、2重起動とかはチェックできていない様子。Linuxで開発した方が 快適かもしれないと思った。
マクロCPUであるMicroBlaze用プログラムは、Xilinx Platform Studioに含まれている GCCを利用する。サンプルコードが自動で生成されるため、RS232C経由でprintは 何もしないでもサンプル内で出来ている。
やること:
1.自分のVHDLの回路を組み合わせる。
2.残りのFPGAの使用率の確認。
3.Peripheralの新規作成方法。