今回の装備一覧

新しい会社で初の海外出張、半分研修、半分打合せ。

これ以外に、開発ボード2セット、FPGAボード、リモートデバッグツール、ロジックアナライザ、各種プロトコルエミュレータ&アナライザなど、珍しくガジェットより仕事の用具が多い。


主な行先は韓国だが、韓国ではPocket WiFiが本当に便利。
一日400円弱で、会社、個人と使いたい放題。
電話もKakaoでするので、無問題。
空港や、バスターミナルなどでレンタルできる。

ブログ名は変更しないよ

またまた転職である。
リストラに遭ったとかではない -> 著者をリアルでご存知の方々、ご心配なく。
全くの自己都合。
だからといってすっごくラクしていい給料とか、もう半分隠居とかでもない -> そちらもご懸念なきようご理解を頂きたく(日立)。

一つはセットメーカーに戻りたくなったのだ。
筆者はノキアに10年近く勤めて、携帯電話用のディスプレイ技術を開発していた。
実際にエンドユーザの使う完成品ビジネスはやはり楽しいし、やりがいもある。
社内ではプロトタイプを使うことができ、ガジェット好きにはたまらない。
実際に自分が作った製品を、街のそこここで使ってもらうのを見るのは、とてもうれしい。

もう一つの理由は、前の勤務先の経営方針が、自分の専門の技術領域とどんどん離れていっていることだ。
その会社は、ここ数年B2B2CからB2Bへ大きく舵を取っている。
筆者の専門分野はディスプレイで、その会社が直接購買をするものではない。
しかしB2B2Cの顧客はディスプレイの購入者なので、専門を活かした仕事をしていくことができていたのだ。
最近では、はやりのVRの仕事もしていて結構楽しかった。
ところが、B2Bの顧客はディスプレイを必要としないシステム構築業が主な業務なのだ。
その会社の売上や利益はB2B2Cが半分以上を占めるので、すぐに仕事がなくなることはない。
しかしノキアの時のように、こちらが準備できていない状態で「開発センター閉鎖です」、は避けたい。
アメリカの会社なので、退職勧奨も退職金の積み増しもひったくれもあったものではないので、ある日突然「もう来なくていいよ」は何としても避けたい。

ということで、インテルを退職した。
嶋正利さんがi4004、i8080を設計した会社で働けるというのは、「電子立国」世代の私たちには夢のような経験だった。
しかも日本にいたときには、あの番組で登場する筑波事業所勤務だったのだ。
そしてその事業所の建物も、今や影も形もない。
潮時だろう。

f:id:nobu_macsuzuki:20120903114741j:plain
f:id:nobu_macsuzuki:20180524024350j:plain

Fossil Q Marshal Gen 2, Ticwatch E vs. Huawei Watch 2 Classic

実は昨年末からこれも含め、火のついたようにスマートウォッチを買い替えていた。
ようやく落ち着いたので、その理由を書いておく。

Fossil Q Marshal 2 Gen 2

f:id:nobu_macsuzuki:20180405044211j:plain
ここでも書いたように、スマートウォッチは"スマート"なウォッチではなく、ただの腕時計の一種なのだ。
そこそこ腕時計としてのプロトコル、つまり腕時計としてのデザインを整えていて欲しい。
この腕時計はファッション腕時計メーカのFossilが作ったものだけあって、デザインはなかなか良い。
フェイスも丸い。
flat tireと言われる画面下の欠けも気にならない。
龍頭もついてる・・・あれ、回らないや、まさにデザイン。
問題だったのは液晶ディスプレイとバッテリーの持ち。
スマートウォッチの殆どが有機ELを搭載している。
筆者はスマホ(笑)やタブレット、PCに関しては有機ELマンセーではない、むしろアンチだ。
しかしスマートウォッチに関しては別だ。
バッテリーを持たせるためにディプレイは通常オフにしてあるのが、時間を確認するたびに画面全体がぼんやり明るくなる。
液晶ディスプレイで、バックライトを使用しているので、黒い部分もぼんやりと明るくなるのは仕様だ。
腕時計では、なんだかなぁ、これはカッコ悪い。
ディスプレイをオンするたびにバックライトを点灯するせいか、バッテリーの持ちも悪い。
使いだしてからい2、3日経って、あまりいじらなくなってからバッテリーの持ちを確認するのだが、まぁ一日がせいぜい。
毎日充電しないと使い物にならない。
没。

Ticwatch E

f:id:nobu_macsuzuki:20180405045524j:plain
次に探し当てたのが、Ticwatch E。
安かった。
Fossilはいわゆるメーカ返品(manufacturer refurbished)を購入したのだが、Ticwatch Eの新品が同額で買えた。
ディスプレイは有機EL、電池も2日持つ、十分、OK。
バンドも純正から交換して、ちょっとチープ&ポップな感じにした。
・・・やっぱ時計にプラスチックケースはないな。
それと最近Google Payを使うようになったので、NFCが欲しくなった。
没。

Huawei Watch 2 Classic

f:id:nobu_macsuzuki:20180405045936j:plain
で、行きついたのがHuawei Watch 2 Classic。
メタルケース、有機EL、電池は2日持つ、NFCGoogle PayもOK。
純正のバンドは皮もどきで安く見えるので、皮バンドと黒のメタルバンドを購入して交換。
しばらくこれで行けそうな気がする(気がするだけ)。


ちなみにFossil Q Marshal Gen 2とTicwatch EはそれぞれeBayで購入額よりも高く売れた。
Huawei Watch 2 Classicは新品同様の中古を買ったこともあり、出費はトータルで$150ほどで済んだ。
買ってくださった方に感謝。

DE0-CVでNios II

さらに新しいツールに慣れるため、IP統合の復習としてNios IIを組み込んだ簡単なモジュールを作る。
やっていることは
Qsysを使ってNios IIを組み込んだモジュールを作成する - 米国で働く技術系サラリーマンのボヤキ on はてブロ
と、
Quartus IIでQsysで作成したモジュールを組み込む - 米国で働く技術系サラリーマンのボヤキ on はてブロ
とほぼ同じことだ。

Quartus Primeでプロジェクトを作成

  • Quartus Primeを起動、"File" -> "New Project Wizard"を選択、プロジェクト名は"nios2_PIOLED"、詳細設定はこちらの中で参照しているこちらを参照、"Family & Device Setting"を"5CEBA4F23C7"にするのを忘れずに。

Platform Designer(旧Qsys)でNios IIを組み込んだモジュールを作成する

  • "Tool" -> "Platform Designer"を起動、"IP Catalog"から以下のIPを組み込んでいく
    • "Processors and Peripherals" -> "Embedded Processor" -> "Nios II Processor"を選択、"Main"タグで"Nios II Core"は"Nios II/e"を選択、他はデフォルトで"Finish"
    • "Basic Function" -> "On Chip Memory" -> "On-Chip Memory (RAM or ROM)"を選択、"Size" -> "Total Memory Size"を"8192(bytes)"に変更、他はデフォルトで"Finish"
    • "Basic Function" -> "Simulation: Debug and Verification" -> "Debug and Performance" -> "System ID Peripheral"を選択、デフォルトのまま追加
    • "Interface and Protocols" -> "Serial" -> "JTAG UART"を選択、デフォルトのまま追加
    • "Processors and Peripherals" -> "Peripherals" -> "PIO (Parallel I/O)"を選択、"Basic Setting"の"Direction:"を"Output"に変更、 他はデフォルトで"Finish"
  • clk(赤)、reset(青)、memory(緑)、IRQ(紫)を以下の通りに接続

f:id:nobu_macsuzuki:20180307111701p:plain

  • PIOの"Conduit"の"Export"をダブルクリックして名前を付ける(オレンジ、デフォルトのままでよい)
  • Nios IIのIPを右クリックして"Editを選択
    • "Vectors"タグを選択し、"Reset Vector Memory"と"Exception Vector Memory"を両方ともOn-Chip Memory(デフォルトなら"onchip_memory2_0.s1)に変更
  • "Address Map"タグを選択、メニューから"System" -> "Assign Base Addresses"を選択 - 以前のQsysではデフォルトのメモリーアドレスの衝突を自分で解決する必要があったが、このバージョンでは自動化されている

これで、下の"Message"欄のエラーが全部消えたはずだ、下の"Generate HDL"を押して統合IPモジュールを作成する、
"Save changes to unnamed?"のダイアログが出たら、適当な名前(nios2_PIOLED_qsys.qsys)を付け、"保存”する
後は勝手にやってくれるので、終わったらダイアログを"Close"して、Platform Designerを終了する、

Quartus Primeに戻り、"Project" -> "Add/Remove Files in Project"を選択し、qipファイル(nios2_PIOLED_qsys.qip)と、とVerilog HDLファイル(nios2_PIOLED_qsys.v)をプロジェクトに追加する
プロジェクトフォルダーの下に上で保存した名前(nios2_PIOLED_qsys)のフォルダーができており、これのファイルはその下の"synthesis"フォルダーの下にある。

トップモジュールを追加、FPGAイメージ作成、フラッシュ

  • "File" -> "New"で"Verilog HDL file"を選択、以下のようにトップモジュールを記述して保存
module nios2_PIOLED(
	input wire in_clk, 
	input wire [9:0] in_switch, 
	input wire [3:0] in_button,
	output wire [9:0] out_led, 
	output wire [6:0] seven_segment_0, 
	output wire [6:0] seven_segment_1, 
	output wire [6:0] seven_segment_2, 
	output wire [6:0] seven_segment_3, 
	output wire [6:0] seven_segment_4, 
	output wire [6:0] seven_segment_5);
	//
	// terminate unnecessary LEDs
	//
	assign seven_segment_0 = 7'd0;
	assign seven_segment_1 = 7'd0;
	assign seven_segment_2 = 7'd0;
	assign seven_segment_3 = 7'd0;
	assign seven_segment_4 = 7'd0;
	assign seven_segment_5 = 7'd0;
	//
	assign out_led[9:8] = 2'b0;
	//
	nios2_PIOLED_qsys nios2_PIOLED_qsys(
		.clk_clk(in_clk),                          //                       clk.clk
		.pio_0_external_connection_export(out_led[7:0]), // pio_0_external_connection.export
		.reset_reset_n(in_button[0])                     //                     reset.reset_n
	);
endmodule
  • "Assignments" -> "Import Assignments"を選択し、こちらで作成したピンアサインメントを事前にexportしておいて、それを取り込む
  • "Start Compilation"ボタンをぽちっとな
  • コンパイラが終わったら、"Programmer"を使ってFPGAのイメージをDE0-CVに焼く、詳細はこちら

Nios II上で動作させるプログラムを作成し、実行する

  • Quartus Primeに戻り、"Tools" -> "Nios II Software Build Tools for Eclipse"を起動
  • "Select a workplace"のダイアログが出るので、現行のプロジェクトフォルダーの下に"software"というフォルダーを作り、それをworkspaceに設定する
  • Eclipseで、"File" -> "New" -> "Nios II Application and BSP from Template"を選択
    • "SOPC Information File name"のファイル選択ボタン("...")を押し、現行のプロジェクトフォルダーの下にある.sopcinfo(nios2_PIOLED_qsys.sopcinfo)を選択、読み込まれるとデフォルトが設定される
    • "Project name"を適当に(nios2_PIOLED_sw)つける
    • "Project template"から"Hello World Small"を選択し、"Next"を押す
    • 次のページで"Create a new BSP project based on the application project template"にチェックが入っていることを確認、"Finish"を押す

これでsopcinfoを元にBSPファイルが生成され、必要なライブラリーがプロジェクトに取り込まれる。

  • "Project Explorer"のプロジェクトフォルダ(nios2_PIOLED_sw)を展開し、"hello_world_small.c"をプロジェクト名(nios2_PIOLED_sw.c)に変更、ファイルを右クリックするとドロップダウンメニューから"Rename..."を選択できる
  • 上記のファイルを開く(ダブルクリック)、以下のように変更
#include "system.h"
#include "altera_avalon_pio_regs.h"
int main()
{ 
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0x01);
  /* Event loop never exits. */
  while (1);

  return 0;
}
  • "Project" -> "Build All"を選択

さあ、いよいよリモート実行だ。

  • "Run" -> "Debug Configurations"を選択
    • ダイアログで"Nios II Hardware"を選択し、上の"New"ボタンを押す
    • "Project"タグで現在のプロジェクト(nios2_PIOLED_sw)を選択
    • "Target Connection"タグで右の"Refresh Connection"を押す、下の"Debug"ボタンが押せるようになっていれば準備完了だ
    • "Debug"を押す
    • EclipseのPerspective(ペインの配置)変更の確認ダイアログが出てきたら、"Yes"を押す、デバッグウィンドウが展開する

元に戻すのには"Window" -> "Perspective" -> "Nios" -> "Open Perspective" -> "Nios II"だ。
この状態でメインの一番最初の関数でブレークがかかっているので、

  • "Resume"ボタンを押す

LED0 (PIOのbit 0にマップされている)が点灯すれば、成功だ。
"Terminate"ボタンを押せば、デバッグ終了となる。

以上、以前にQurtus II 13.1 & Qsysの組み合わせでNios IIを組み込み、リモートデバッグしたときとほとんど変わりはなかった。
Qsysの名前が"Platform Designer"と変わったこと、IP Catalogのカテゴリーが変わったことの2つが戸惑ったくらいだ。

QuartusのHigh DPIでの表示不具合の対策

さてDE0-CVも入手し、新しいツール群での動作確認を進める筆者。
過去のQuartusでもそうだったが、最近のHigh DPIのPCを使用すると、QuartusやEclipseなどでアイコンがどうしようもなく小さくなったり、ダイアログの各部品が縮んだりしてしまい、まともに操作できなくなってしまうことがある。
#筆者はMSFT Surface Pro 4で使用中。
そんな際のtips。

  • regeditで、"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide"にDWORD値"PreferExternalManifest"を作り、値を"1"にする、再起動
  • テキストエディターを開き、以下をコピペ、"temp.manifest"として保存
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <description>eclipse</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"
                               level="asInvoker"
                               ms_asmv3:uiAccess="false">
                </requestedExecutionLevel>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>
  • 上で作ったmanifestファイルを以下のフォルダにrenameして保存
    • (FPGA Tool Home)\quartus\bin64\jre64\bin\java.exe.manifest
    • (FPGA Tool Home)\quartus\bin64\jre64\bin\javaw.exe.manifest
    • (FPGA Tool Home)\quartus\bin64\jre64\bin\javaws.exe.manifest
    • (FPGA Tool Home)\nios2eds\bin\eclipse-nios2.exe.manifest
    • (FPGA Tool Home)\quartus\bin64\quartus.exe.manifest

筆者はQuartus Prime 17.1を使用しているが、デフォルトでインストールしていれば(FPGA Tool Home)は"C:\intelFPGA_lite\17.1"のはずだ。

これでQuartusとEclipseの表示不具合は対策できる。
他にも問題になるツールがある場合には、そのツールのフォルダにこのmanifestファイルをコピーして、(ツールのファイル名(含む.exe)).manifestとして保存すれば、High DPIのスケーリングに対応して表示される。
・・・ちょっと大きくなりすぎるんだけど、使えるので良しとしよう。