kazu_1995’s diary

北の高専→大学生のブログ.

GoPro×書道パフォーマンス

書道パフォーマンスで行われる壁作品の映像は,どうしても人物の背中または横顔ばかりになってしまいます. こんなかんじに. f:id:kazu_1995:20181211111712j:plain そこで,頭上にカメラを設置してダイナミックな動画撮影をしてみました. この記事では機材の選定から実際の撮影結果までをご紹介します.

続きを読む

カメラバッグを購入しました(NG 2347)

小型の,取り回しやすいカメラバッグを購入しました.ナショナルジオグラフィック(マンフロット)のアースエクスプローラーコレクションです. かつてNG 2478を使用していたので久しぶりのナショジオバッグ.

旧モデルNG 2346を引き継ぎ,2018年4月に登場したのがこのNG 2347. 本稿では.このNG 2347のレビューを行います.

続きを読む

安く・早くプリント基板を製造してもらう

基板製造時,量産性や表面実装部品の搭載,回路の高速化,小型集積化など,様々な面でプリント基板を採用する利点は多くあります. 一方で,コストと納期との面に着目すると,国内業者は非常に高価,安価な海外業者では基板到着までに数週間~1ヶ月必要という欠点がありました.

そこで本記事では,プリント基板を安く,かつ早く製造してもらう業者の紹介を行いたいと思います.

続きを読む

Terasic DE0ボードでのUSB通信②

前回記事の続きです. kazu1995.hatenablog.jp 今回は,前回記事で行ったJTAGの基本命令であるIDCODEの取得に加え, 自らが作成した命令を介してDE0に搭載している7セグメントLEDやLEDGの点滅操作, SWの状態取得,またFPGA内部にある数値の取得を行います.

1.事前準備

  1. JTAG通信に必要なD2XXドライバを入手します.FTDI社のWebサイトより入手可能です. 以下リンクよりWindows版を入手,i386フォルダにあるftd2xx.dllを使います(使い方は後ほど).
    D2XX Direct Drivers
  2. DE0のピン配置ファイルを入手します. 自作することも可能ですが,今回は製造元であるTerasic社から入手したいと思います. DE0製品ページのResources > DocumentsからDE0 Debounce Projectをダウンロードし,DE0_TOP_NewフォルダにあるDE0_TOP.qsfを使います(使い方は後ほど).
    Terasic - All FPGA Main Boards - Cyclone III - Altera DE0 Board


2.ソースコード

以下サイトにて公開しています.Download ZIPをクリックすることでコードを一括ダウンロードすることができます.
Experimental code of Virtual JTAG ( http://kazu1995.hatenablog.jp/entry/2017/11/18/202718 ) · GitHub


3.QuartusⅡの操作

QuartusⅡを起動し,以下の操作を行います.

  1. File > New Project Wizardからプロジェクトを作成
  2. Page1: working directoryはお好みで指定,project nameはCycloneと入力*1
  3. Page2: Add Filesに配布しているCyclone.vhdを指定しadd
  4. Page3: Family > Cyclone Ⅲ,Available devices > EP3C16F484C7を指定*2
  5. Page4: EDA Tool Settingsはお好みで
  6. Page5: Finishでプロジェクトの完成です
  7. Assignments > Import Assignmentsから,Terasic社より入手したピン配置ファイル(DE0_TOP.qsf)を指定します
  8. Tools > MegaWizard Plug-In ManagerからMegafunctionsを作成します
  9. Page1: Create a new custom megafunction variationを選択
  10. Page2a: Virtual JTAGを選択し,What name do you want for the output file?の入力欄の末尾にvirtualjtagと入力*3
  11. page3: ここからVirtual JTAGの具体的設定を行います,How wide should the instruction register be? > 8を指定
  12. Finish(Page4~6は無視して構いません)
  13. Quartus Ⅱ IP Filesに関するメッセージボックスが出現したらYesをクリック
  14. あとはコンパイルしてDE0に.sofファイルを書き込みます


4.Visual Studioの操作

Visual Studioを起動し,以下の操作を行います.

  1. ファイル > 新規作成 > 既存のコードからプロジェクトを作成
  2. 作成するプロジェクトの種類 > Visual C#を選択
  3. ファイルの場所には先程ダウンロードしたソースファイルのあるフォルダを指定し,好きなプロジェクトの名前とを入力後,出力の種類にはコンソール アプリケーションを指定
  4. プロジェクトはこれで出来上がり
  5. プロジェクト > プロパティから,ビルドを開く
  6. プラットフォームターゲット > x86を選択,アンセーフコードの許可にチェックを入れる
  7. ビルドをし,生成される.exeファイルと同じディレクトリにD2XXドライバ,ftd2xx.dllを配置


5.USB通信を行う

DE0に書き込んだあと,Visual Studioを用いて生成した.exeファイルを実行してください. 無事に起動すると次のような画面が現れると思います. f:id:kazu_1995:20171118161231p:plain 色々試して遊んでみてください. f:id:kazu_1995:20171118163959j:plain ソースファイルの説明はまた改めて行います.感想や改良案など,お待ちしています.


(2017/11/20追記)
ソースコードC# 7.0対応(Visual Studio 2017~)で書いていたため一部修正しました.現在公開しているコードについてはC# 3.0対応(Visual Studio 2008~)となっています.

*1:top-level entityに関わってくるので,Cycloneにしてください.Cyclone以外にする場合配布している.vhdファイルに修正が必要です.

*2:Show in 'Available devices' listのName filterに16f484c7のように入力するとすぐ出てきます.

*3:ここも2.と同様,virtualjtagにしてください.

TeXでの下付き文字(添字)を簡単に出力する

MOSFETの諸特性R_{\mathrm{DS(ON)}}I_{\mathrm{D}}P_{\mathrm{D}}オペアンプでのV_{\mathrm{OS}}I_{\mathrm{B}},電源を示すV_{\mathrm{CC}}というように下付き文字をつける変数が多々存在します. これらの下付き文字は一般に端子名や状態が用いられることが多く,例えばR_{\mathrm{DS(ON)}}だと,ON状態のときのドレイン・ソース(Drain・Source)間抵抗が語源です. この変数自体には書体が指定されていて通常イタリック体(斜体)を用います.一方,下付き部は名称であるためローマン体(立体)が用いられます.

これをTeXにて再現しようとすると,

$ R_{\mathrm{DS(ON}} $

と書く必要があり,大変面倒です.

そこで今回は,マクロ(\newcommand)を用いてもっと簡単に出力できるようにしてみたいと思います. プリアンブル部に以下を書くだけです.

\catcode`_ = \active
\newcommand_[1]{\sb{\mathrm{#1}}}

まず1行目で,下付き文字(カテゴリーコード8)の操作を行えるようにします. 次に2行目で,本文中(ただし数式モード中に限る)にtest_hogeのような文章が出現したとき,hogeの部分をローマン体にするようにします.\sb_と同じ役割を示し、hogeをtestの下付き文字になるようにします.

あとは本文中で,

$ R_{DS(ON}} $

と書けば, R_{\mathrm{DS(ON)}}のように出力されます.

Terasic DE0ボードでのUSB通信①

Terasic社が販売しているFPGAボード・DE0にはUSBコネクタが搭載されていますが, 通信方法について具体的に書かれている資料は英語資料含めても限りなく少ないため中々実装することができませんでした.

しかし,rerm.info JavaでJTAG通信 にてJavaを使って通信する方法が掲載されており, これを元に,と思い立ち今日に至ります.

この記事ではまずUSB通信のテストを行います. 今後の実装の都合上,C#を用いてコーディングしました.


1.USB通信テスト

今回はまずUSB通信の第一歩としてPCから命令を送信し,FPGA特有のコードであるIDCODE*1の受信を試みます.


2.ソースコード

Visual Studioを起動し,Visual C#で新しいコンソールアプリケーションを作成後,以下をコピー・ペーストしてください.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        const string DLL_PATH = "ftd2xx.dll";
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Open( Int16 DeviceNumber, UInt32* ftHandle );
        [DllImport(DLL_PATH)]
        private static extern UInt32 FT_Close( UInt32 ftHandle );
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Write( UInt32 ftHandle,
                [MarshalAs(UnmanagedType.LPArray)] short[] bdata, UInt32 BufferSize, UInt32* BytesWriten );
        [DllImport(DLL_PATH)]
        unsafe private static extern UInt32 FT_Read( UInt32 lngHandle,
            [MarshalAs(UnmanagedType.LPArray)] byte[] bdata, UInt32 lngBufferSize, UInt32* lngBytesReturned );


        static unsafe void Main( string[] args )
        {
            const short L = 0x2D2C;
            const short H = (short)(L | 0x1010);
            const short TMS = (short)(L | 0x0202);
            const short TMS_H = (short)(TMS | H);
            const short WR = 0x81;
            const short RD = 0xC0;
            const short OFF = 0x0D0C;

            uint size;
            UInt32 ftHandle;
            List<short> memory = new List<short>();

            if (FT_Open(0, &ftHandle) != 0)
            {
                Console.WriteLine("Don't connect.");
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Connection!");

            // MoveIdle
            memory = new List<short> { TMS, TMS, TMS, TMS, TMS, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // MoveShiftir
            memory = new List<short> { TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // WriteShiftir
            memory = new List<short> { (short)((0x06 << 8) | WR), L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // MoveShiftirToShiftdr
            memory = new List<short> { TMS, TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            // ReadShiftdr
            int rx = new int();
            byte[] rxData = new byte[4];
            memory = new List<short> { (short)((0 << 8) | (RD | 4)), TMS_H, TMS, TMS, L, L };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            for (int i = 0; i < 4; i++)
            {
                FT_Read(ftHandle, rxData, 1, &size);
                rx += rxData[0] << (i * 8);
            }

            Console.WriteLine("Device IDCODE is " + rx);

            memory = new List<short> { TMS_H, TMS, OFF };
            FT_Write(ftHandle, memory.ToArray(), (UInt32)memory.Count << 1, &size);
            FT_Close(ftHandle);

            Console.WriteLine("JTAG Close...");
            Console.ReadKey();
        }
    }
}


3.注意事項

  1. プラットフォームターゲットに"x86"を指定
    System.BadImageFormatExceptionエラーが発生する場合があります.設定自体はプロパティのビルドから変更します.
  2. アンセーフコードの許可
    ftd2xx.dllを使う関係でunsafeを使用しました.この設定も上と同じくビルドから変更します.
  3. 生成された.exeファイルと同じディレクトリにftd2xx.dllを配置
    FTDI社WebサイトのDrivers,D2XX Driversからドライバをダウンロードすると中に入っています.
  4. QuartusⅡを入手しておく
    USB Blaster認識の都合上必要だと思います(※未検証).フリーのWeb Editionを入手してみてください.


4.実行結果

f:id:kazu_1995:20171019015701p:plain DE0に搭載しているFPGA,CycloneⅢ EP3C16のIDCODEは0000 0010 0000 1111 0010 0000 1101 1101*2であり,10進では34545885になります. また,DE0の電源スイッチ下、POWER-LED右側のLOADとシルクがあるLEDが一瞬点灯することを確認できるかと思います. これらより,JTAG通信を用いてIDCODEの読み出しに成功したことがわかります.


5.備考

他のTerasic社製ボードの場合,Terasic DE0-Nano(CycloneⅣ EP4CE22)だと34549981が,DE1(CycloneⅡ EP2C20)だと34287837が出力されます.

unsafeを使わないやり方を考えていますが,未熟ゆえ良い方法が思いつきません...... もしうまいやり方をご存知でしたら教えてください.


参考文献

rerm.info JavaでJTAG通信
ioioのホームページ FT245RL用DLLの使い方
坂巻佳寿美.JTAGテストの基礎と応用.CQ出版,2003


(11/18追記)続き kazu1995.hatenablog.jp

*1:製造メーカや部品番号などが含まれる32bit長のコードのこと

*2:Altera Cyclone III Device Handbook, Volume 1 『Chapter 12. IEEE 1149.1 (JTAG) Boundary-Scan Testing for the Cyclone III Device Family』 p.12-2より

proxy環境下におけるTeXの導入

研究室に配属され,卒業研究に着手される方が多くなるこの時期.パソコンにTeXを導入される方も多いのではないでしょうか.

そんなとき,学校内のネットワークを使って導入しようとするとエラーが発生して導入できない,なんてことが多々あるかと思います.

この記事では,そんな学内ネットワーク(proxy環境下)においてTeXを導入する方法をご紹介したいと思います.

 

1.導入するTeX

国内においてTeXを導入するにはTeXインストーラ3を使う方法とTeX Liveを使う方法との2つが主流です.TeXインストーラ3はネットワークインストール形式の導入形式でproxy環境下では弾かれることが多いため,今回はTeX Liveでの方法をご紹介します.TeX Liveは以下のWebサイトからtexlive.isoを選択することで入手可能です.

Acquiring TeX Live as an ISO image - TeX Users Group

 

2.isoファイルのマウント(Windows7の方のみ)

Windows8以降のOSを使っている方は読み飛ばしてください.

 ダウンロードしたファイルはそのままでは開くことができません.そのため,7-Zip(圧縮・解凍用ソフト)を追加で導入する必要があります.7-Zipを入手したら,先にダウンロードしたtexlive.isoを展開してください.

また,申請・許可など諸々の事情で7-Zipを導入できない方は,Microsoft純正のVirtual CD-ROM Control Panelが良いでしょう.

7-Zipの入手先:7-Zip

Virtual CD-ROM Control Panelの解説ページ:

Windows 7でISOイメージをマウントするMS純正ソフト(32ビット版のみ): EeePCの軌跡

 

3.まずは最小構成で導入する

texlive.isoをマウント(展開)したら,フォルダ内のinstall-tl-advanced.batを実行します.すると,次のような画面が表れると思います.

f:id:kazu_1995:20170501230322p:plain

この画面が現れたら,--- 基本情報 ---にある"選択したスキーム"の右端,"変更"ボタンをクリックします.すると,

f:id:kazu_1995:20170501230553p:plain

という画面が表れるので,"最小限スキーム"を選択して"OK"ボタンをクリックします.

あとは"TeX Liveの導入"ボタンをクリックして,しばし待ちます.すると,次のような画面が出てきます.この時点で最低限のTeXは導入されました.

f:id:kazu_1995:20170501230713p:plain

ここでなぜ最小限スキームを選択したかというと,TeX Liveでの導入途中に障害が発生し,インストーラが固まった挙句導入に失敗するという問題がよく見られるからです.そこで最小限の構成で導入し,後に足りないものを補う,というのが今回の手法です.

 

4.TeX Live Managerを使って足りないものを補う

TeXでは表を作ったり図を挿入したりという機能1つずつがパッケージという仕組みにより提供されています.このままでは何一つTeXを使うことができないので,先程導入しなかったパッケージ群を一気に導入したいと思います.

3.によりTeXの最小限スキームの導入が終わると,TeX Live Managerというソフトウェアが入ります.まずはこれを起動します.起動すると次のような画面が表示されます.

f:id:kazu_1995:20170501232041p:plain

tlmgrタブから,”他のリポジトリの読み込み”をクリックします.すると画面が出てくるので,"ローカルディレクトリを選択してください"から,先のtexlive.isoがマウントされているドライブ,または解凍してあるディレクトリを選択して"読み込み"をクリックします.すると,リポジトリの項目に"読み込み完了"と表示されるので,"表示設定"の"状態"から"未導入"を選択肢,右端にある"すべて選択"をクリックし,最後に導入をクリックします.簡単なクリックの流れは次の図の通り.

f:id:kazu_1995:20170501232236p:plain

3000を超えるパッケージを導入するので,かなりの時間がかかりますが,待機.全て導入が終わると下のメッセージボックスに"完了 ."とひとことメッセージがでます.以上がproxy環境下におけるTeXの導入でした.

 

いかがでしたでしょうか,無事導入することはできましたか?

最後に,これからTeXを使われる方へ,教科書代わりに使える本をご紹介して終わります.

[改訂第7版]LaTeX2ε美文書作成入門

[改訂第7版]LaTeX2ε美文書作成入門