2018年9月20日木曜日

ARMクロスコンパイル用clang その4

久々に確認したらllvmがバージョン 7になっていた。
手持ちのARM clang クロスコンパイラはバージョン3.8ベース。
大分最新から古くなっているので再度作成することにする。

■作成対象
自作OSのビルドが目的なので
target-triple が arm-none-eabi のbaremetal ARMクロスコンパイラ

■インストール先
/opt/arm-none-eabi-clang

■ソースコード一式展開
Getting startedに従ってllvm本体とclang, lldそれぞれのソースコードを展開する。
libcxxはOSのライブラリ依存だが、独自OSにはそれがまだ無いのでこの時点では導入しない。
compiler-rtはLLVM/Clangのビルドとは別に独立して行うのでllvmソースツリー内に展開しない。

■ビルド
(clang+llvm)

cmake <llvm-7.0.0.src path> -DCMAKE_CROSSCOMPILING=True -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_INSTALL_PREFIX=/opt/arm-none-eabi-clang -DLLVM_TARGET_ARCH=ARM -DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi -DCLANG_DEFAULT_LINKER=lld -DCLANG_DEFAULT_RTLIB=compiler-rt -DDEFAULT_SYSROOT=/opt/arm-none-eabi-clang

2018年3月27日火曜日

Zynqberry FPGA開発

開発環境構築からの続き

■参考サイト
ZynqBerryチュートリアル

■プロジェクトの作成
リファレンスデザインソースに生成されたvivado_create_project_guimode.cmdを実行する。いろいろとログが出力された後に下記のVivado開発環境が立ち上がる。

■IP編集
左メニューの[Flow Navigator]-[IP INTEGRATOR]-[Open Block Design]を選択する。
下記のように初期設定のブロック図が表示される。

自作IPの作成方針として理解したのは2通り。1つはAXI4対応IPとする方法、もう1つは汎用IPとして作成しAXI4-GPIOと接続する方法。
いずれにしてもAXI4と接続しないとARMのアドレス空間経由で操作できない。

①AXI4対応IP作成方法
上部メニューの[Tools]-[Create And Package New IP]を選択する。
下記ダイアログにおいて「Create a new AXI4 peripheral」を選択しNext。

Peripheral Detail画面が表示されるのでIPの名前や保存場所を指定する。

別ウィンドウでIPのサブプロジェクトが開けば成功

成功するとAXI I/Fドライバのひな型とC言語のドライバスタブが生成される。
Sourcesウィンドウの[Design Sources]-[IP名]を選択するとVHDLのコードが生成されているのがわかる。
エディタで開いて最下部に「Add user logic here」と記載されているところに自分のロジックを組み込めばOK。

②自作汎用IPの組み込み
[PROJECT MANAGER]-[Add Sources]し、ダイアログから[Add or create design sources]を選択する。





下部の[Create File]ボタンを押して作成するHDLソースファイルを指定する。
File TypeにHDLの種類(VHDL, Verilog, SystemVerilogなど)、File nameにソースファイル名を指定する。



次の画面で入出力ポートを設定すると自動でソースファイルのひな型が生成される。


■プロジェクト設定
自作IP毎のサブプロジェクト作成について
デフォルトでは編集時にサブプロジェクトを作成し、編集後に自動で削除されるようになっている。

毎回サブプロジェクトを作成、削除するのが手間であれば自動削除しないように設定できる。
左メニュー[Flow Navigator]-[PROJECT MANAGER]-[Setting]から[Project Setting]-[IP]-[Packager]を選択する。
設定画面の[Delete project after packaging]のチェックを外すと自動削除を無効にできる。

2018年3月19日月曜日

Zynqberry FPGA開発環境構築

■手順概要
  1. リファレンスデザインのダウンロード
  2. Xilinx Vivadoのインストール
  3. プロジェクトの作成

■リファレンスデザインのダウンロード
Trenz electronic Zynqberryダウンロードサイト
ここからリファレンスデザインをダウンロードする

2018/3時点で最新バージョンは2017.4
te0726-test_board-vivado_2017.4-build_06_20180216205357.zip

これを適当なフォルダに展開する。
空白を含まないフォルダパスが望ましい。

■Xilinx Vivadoのインストール
リファレンスデザインの対象バージョンが2017.4なのでVivadoも同じバージョンをダウンロード、インストールする。
バージョンが合っていないと論理合成できないことがある
またインストールするフォルダはデフォルトのC:\Xilinxが望ましい。
リファレンスデザインのプロジェクト作成batファイルがC:\Xilinxにインストールされているのを前提にしているため

■リファレンスデザインの展開
ダウンロードしたリファレンスデザインを解凍すると直下に_create_win_setup.cmdというスクリプトがある。
これをコマンドプロンプトから実行

-------------------------TE Reference Design---------------------------
--------------------------------------------------------------------
-- (c)  Go to CMD-File Generation (Manual setup)
-- (d)  Go to Documentation (Web Documentation)
-- (x)  Exit Batch (nothing is done!)
-- (0)  Create minimum setup of CMD-Files and exit Batch
-- (1)  Create maximum setup of CMD-Files and exit Batch
----
Select (ex.:'0' for min setup):

このような選択が表示されるので1を選択する。
するとプロジェクト作成に必要なスクリプト群が生成される。

■プロジェクト対象ボードの選択
生成されたスクリプト群にあるdesign_basic_setting.cmdを編集する。
(編集箇所)
@set PARTNUMBER=LAST_ID
   LAST_IDを手持ちのボードに合わせる。選択できるボードの種類はboard_filesディレクトリのTE0726_board_files.csvに記載されている。
 ここでは手元にあるte0726-03mを選択しておく。
 LAST_IDのままにしておくと自動的にte0726-03-07s-1cが選択されたことになる。

@set SWAPP=NA
 NAを作成するプロジェクト名に変える

■プロジェクトの作成
生成されたスクリプト群の中からvivado_create_project_guimode.cmdを実行する。
するとzynqberryのハード設定で初期化された状態でVivadoアプリケーションが立ち上がる。
立ち上がったらメニューのFile->Save Project Asで好きな場所に保存する。
以降はこのプロジェクトを編集して回路設計と合成を行う

2017年1月1日日曜日

Mackbook Pro(Late 2016, macOS Sierra 10.12.2)でOpenOCD

新しく今年発売のMacbook Proを購入したのでBeagleBoneをOpenOCDでデバッグする環境を構築

■必要なソフトのインストール
・Xcode, gcc command line tool
 AppStore経由でXcodeのインストール
 command line toolはXcodeのメニューからインストール

・Homebrew
  http://brew.sh/index_ja.html
  上記サイトを見ながらhomebrewをインストールする

・OpenOCD
  ターミナルから brew install openocd
  で依存関係まで含めてインストールされる

■Kernel Extension設定変更
  BeagleBone搭載のデバッガはTI XDS100v2
  これはMacに接続するとUSBデバイス FT2232(vendor id: 0x403, product id: 0x6010)と認識される

   macOS SierraにはFTDIのドライバが標準で入っているらしく接続すると以下4つのTTYデバイスが/dev に作成される

cu.usbserial-TIWD9YJWA
cu.usbserial-TIWD9YJWB
tty.usbserial-TIWD9YJWA
tty.usbserial-TIWD9YJWB

  ただ、この状態だとOpenOCDが接続できない。
  OpenOCDはlibftdi->libusb経由でUSB interface0のXDS100v2に接続しようとするが既にTIWD9YJWAというTTYデバイスとして使用してしまっているからである。

  そこでmacOS Sierraの標準FTDIドライバがinterface0にドライバを適用しないようにする

/System/Library/Extensions/AppleUSBFTDI.kext/Contents/Info.plist の以下の部分を削除する

                <key>AppleUSBEFTDI-6010-0</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.apple.driver.AppleUSBFTDI</string>
                        <key>IOClass</key>
                        <string>AppleUSBFTDI</string>
                        <key>IOProviderClass</key>
                        <string>IOUSBHostInterface</string>
                        <key>InputBuffers</key>
                        <integer>8</integer>
                        <key>OutputBuffers</key>
                        <integer>16</integer>
                        <key>bConfigurationValue</key>
                        <integer>1</integer>
                        <key>bInterfaceNumber</key>
                        <integer>0</integer>
                        <key>idProduct</key>
                        <integer>24592</integer>
                        <key>idVendor</key>
                        <integer>1027</integer>

                </dict>



削除する前に一応 cp Info.plist Info.plist.org とでもしてバックアップを取っておくと良い

ちなみに/System/以下のファイルはSIPを無効にしないとchmodで書き込み権限を付与しても編集できない。
SIPを無効にするにはcommand+Rを押しながら起動または再起動してリカバリーモードから行う
リカバリーモードで起動したらメニューから[ユティリティ]-[ターミナル]を選択し、ターミナルからcsruti disableとする
Info.plist の編集が終わったら再びリカバリーモードから csrutil enableとして保護機能を有効化するのを忘れずに。

■OpenOCD起動
 AppleUSBFTDIのInfo.plistを編集した後に再起動するか、モジュールのunload, loadをするとinterface0のTIWD9YJWAが作成されなくなる。
 この状態でOpenOCDが接続可能となる

 openocd -f board/ti_beaglebone.cfg

 で接続することができる。さらに

 screen /dev/tty.usbserial-TIWD9YJWB 115200

 とすることでinterface1はシリアルUARTでデバイスと通信が可能である。