« 2014年4月 | トップページ | 2014年6月 »

2014.05.31

RXマイコンをファンクションジェネレータにするライブラリ

RXマイコン(RX621/RX62N/RX63Nなど)には10bitのDAコンバータと、DMAコントローラが内蔵されています。

これらの内蔵ペリフェラルを使ってファンクションジェネレータを作るためのライブラリを作成しました。

typedef enum {
    CONTINUOUSDAC_MODE_CH0  = 0, // ch0のみ出力
    CONTINUOUSDAC_MODE_CH1  = 1, // ch1のみ出力
    CONTINUOUSDAC_MODE_BOTH = 2, // 両チャネルから出力
} ContinuousDacMode;

bool dac_continuous_wave(ContinuousDacMode mode,unsigned short *waveform,unsigned long datacount)

この関数は、内蔵タイマのCMT2を使って1MHzのトリガを発生させ、そのトリガを使ってDMAコントローラを起動し、メモリ上の内容を繰り返しDAコンバータに出力するというものです。

なお、QFP100ピンまでのRXマイコンはDAが1chしかありません。QFP100以下ではDA0がなくDA1のみ使用可となっています。144ピン以上であればDAは2ch使うことができます。

まず、究極のRX62Nボードで実験してみます。このボードはBGA176ピンなので2ch取れます。

Rx62n_dac2ch

X=12sin(2πt)と、Y=13sin(2πt)で2つの正弦波を発生させて

Rx62n_dmac_da

オシロでXYモードにしてみたところ、

Rx62n_lissajous_1

このようなリサージュ図形が描けました。

この波形はメモリ上に格納されている配列の中身をDMAで自動的にDACから出しているので、CPUは止まっていても大丈夫です。JTAGデバッガで停止させても、ペリフェラルが勝手に出し続けてくれます。

簡単なリサージュ図形ではつまらないので、このページ(http://d.hatena.ne.jp/Hyperion64/20110916/1316167090 )で紹介されていた「Madness」というリサージュ図形を描かせてみました。

このようにしてあらかじめ波形を作りこんでおきます。

for (int i=0;i<datasize;i++) {
  dacwave[i*2+0] = 512 + 0.7 * 256 * (sin(0.99*(float)i/datasize*100*3.141592) - 0.7*cos(3.01*(float)i/datasize*100*3.141592)); // ch1
  dacwave[i*2+1] = 512 + 0.7 * 256 * (cos(1.01*(float)i/datasize*100*3.141592) + 0.1*sin(15.03*(float)i/datasize*100*3.141592)); // ch0
}

Rx62n_lissajous_2

静止画像にしてしまうとあまり綺麗に見えませんが、オシロ上では動いて見えて面白く、綺麗です。


実は、このDAコンバータの使い方やDMACの使い方は、RX62とRX63で全く同じだったので、この関数をそのままRX63Nマイコンで動かしてみました。

まずはGR-SAKURAを使って、配列に16段階の階段状の波形を入れておいて、自動出力させてみました。この関数は2~128Mポイントまでの、2^N周期の任意の波形を作り出せます。

Grsa_dmac_auto

GR-SAKURAは100ピンなので、DAが1chしかないのでリサージュ図形は描けません。

そこで、北斗電子さんのHSBRX63NCを使って同じリサージュ図形を描いてみました。このボードは176ピンのRX63NなのでDAが2ch取れます。また、SDRAMも搭載されているので周期の長い波形も出せると思います。

Hokuto_dmac_dac

今回の実験で用いたDAC&DMACサンプルプログラムのソースコードをhttps://www.tokudenkairo.co.jp/login2/download.php?searchtext=fg にアップロードしました。

「特電お客様サイト」にログインできる方(つまり、特電のお客様)であれば誰でもダウンロードできるようにしました。

つまらないものですが、DMACの使い方の例としてご活用いただければ幸いです。

なお、次回のFreeRXduinoライブラリ Version1.2にこの関数が取り込まれる予定です。

| | コメント (0)

2014.05.27

特電のお客様サイトに、ご質問・ご意見・ご要望フォームを設置

特電のお客様サイトに、念願のご質問・ご意見・ご要望フォームを設置しました。

URLはこちら https://www.tokudenkairo.co.jp/login2/question.php です。

Qaform_1

このフォームは、見た目は何の変哲もない、普通のお問い合わせフォームです。

普通にタイトルや、ご質問内容を書いて送信してください。ファイルも送れます。

Qaform_2

ここで書いた内容は、書いた人と特電のスタッフだけが読めます。

あたりまえに感じることですが、

  • 書いた内容は(特電のスタッフにも)メールでは送られない
  • HTTPSを介した当掲示板のみを通じて読み書きされる

という特徴があります。

つまり、秘密の事項を含む内容をメールでやりとりするのが不安という方は、このシステムを使っていただければ、安全にデータを送れるというわけです。

また、

  • 私(なひたふ)が不在のときでも、他の特電スタッフが答えてくれる(かもしれない)
  • 質問と回答の履歴などが一目でわかる

ということで、将来的に特電の顧客サポートスタッフを増やした場合にも、社内の誰でも対応できて、その履歴を社内の権限のあるスタッフ全員で共有できるようになるというわけです。
(今はそんなに質問の頻度も多くないので、当面は私がサポートしますが・・)

お客様が何かご意見・ご質問を書き込んで、特電スタッフが返事を書くと、ありがちですが、トップページに

Qaform_3

と、新着メッセージを知らせる表示が出ます。

お問い合わせフォームのページには、このように「自分が書いたメッセージ」と「自分あてのメッセージ」の一覧が出ます。

Qaform_4

このようなやりとりが、メールを介さずにできるようになりました。BCCやCCをたくさん付けたメールを送らなくても、サポートの履歴が社内で共有できるというわけです。

めざすは、脱メールです。

あたりまえのような機能なのですが、会社を大きくしていくときに、顧客サポートのスケーラビリティが必要になるだろうと考えたのです。似たような既存のシステムがないかと探したのですが、自社の業態にぴったり合うものはないので、PHPやMYSQLを勉強して作りました。

| | コメント (0)

2014.05.25

特電のダウンロードサイトに検索機能

先週から鋭意構築中のファイルダウンロードサイトですが、簡単な検索機能を付けました。

いま、ダウンロードサイト(https://www.tokudenkairo.co.jp/login2/download.php)にアクセスすると、このように100件以上のファイルが見えてしまいます。

Download_all

これではさすがに目的のものを探すのは大変なので、検索機能を使ってみます。

たとえば、Spartan-6ボードで、MATLABに関係したもの・・と入れてみると、

Download_sibori_2

このように目的のファイルだけが表示されます。

「回路図」と入れて「すべての製品を表示」を選ぶと・・

Download_sch

回路図に関するものだけが絞り込まれます。

うーん。データベースってすごい。

この新しいダウンロードサイトは、下記のURLにあるので、ぜひ来て見てください!

https://www.tokudenkairo.co.jp/login2/download.php

上のURLのページはログイン不要です!

なお、この新しいサイトは開発中なので、もしかするとうまく動かない部分などがあるかもしれません。ライセンスが登録できない、とかダウンロードできない、といった不具合がありましたら遠慮なくご連絡ください。

| | コメント (0)

2014.05.23

特電の新しいお客様用サイトでファイルのダウンロードを開始しました

この1週間ほど、お客様用のログインサイトを構築しています。

今日、ファイルのダウンロードサービスを本格的にスタートしました。なお、ダウンロードサービスのページの閲覧だけは、ログインしなくてもできるようになっています。

下記のURLにあるので、ぜひ、来て見てください!

https://www.tokudenkairo.co.jp/login2/download.php

特電とは思えないほど綺麗な作りになっています。

Login_dlsite

このダウンロードサイトを使うメリットは、

  1. 今までの特電のダウンロードサイトでは、ファイルをダウンロードするたびにシリアル場号を入れなければならなかった。今回のサイトでは最初に登録すれば、ダウンロードするたびにシリアル番号をいちいち入れなくてよい
  2. MITOUJTAG BASICは、ライセンスの有効期限が切れてしまうと従来のダウンロードサイトでは何もダウンロードできなくなった。今回のサイトでは、現時点でライセンスの有効期限が切れていても、有効期限内に発行されたファイルなら遡ってダウンロードできるようになった。
  3. どんなファイルがダウンロード可能なのか、一覧が見える

です。

このように便利にしたつもりなのですが、現在発行しているファイルを4分の1ほど登録したところ、ダウンロードできるファイルが多すぎて、探すのが大変になってしまいました。

検索機能をつけなければいけない・・と思う次第です。

今日はもう疲れたので明日にします。

この新しいダウンロードサイトは、下記のURLにあるので、ぜひ来て見てください!

https://www.tokudenkairo.co.jp/login2/download.php

上のURLのページはログイン不要です!

| | コメント (0)

2014.05.22

特電ログインページを作っています

いままで、ユーザ登録とか、質問掲示板とか、ダウンロードサービスとか、そういったお客様向けのWebページがバラバラに存在してきたので、それらを統一したものを作りたいとかねてから考えていました。

そこで、PHPやMYSQL、Smarty、BootStrapといったものを勉強し、お客様ログインページを作ることにしました。

ログインページは、下記のURLにあります。

http://www.tokudenkairo.co.jp/login2/

まず、入口はこんな感じです。

Login_1

月刊特電が一度でも送付された方は、「ユーザ名またはパスワードを忘れた」をチェックしていただければ、だいたいログインできると思います。

そうでない方は、右側の「新規登録」から新規登録をしていただければと思います。

一応、旧ナヒテックの頃からの2003年ごろ以降の情報を全部入れているので、一度でもナヒテックか特殊電子回路の製品をご購入いただいた方なら、だいたい入れるんじゃないかと思います。

ログインページに入ると、画面が紫色になります。

Login_2

メインメニューの[ホーム]の中には[トップページ]と[キャンペーン情報]があります。

[ユーザ情報]の中には、[ご登録情報]と[ご購入履歴]と[ライセンス管理]があります。

ご登録情報を開くと、住所やメールアドレス、氏名などの変更ができます。引っ越した場合や、担当者が変更になった場合に、ここから変更できます。

Login_3

[ユーザ情報]→[ライセンス管理]を開くと、お客様がお持ちの製品のシリアル番号が表示されます。

Login_4

[ダウンロード]は、今、ダウンロードできるファイルの一覧が表示されます。現在の特電のWebサイトにあるダウンロードページは、毎回毎回シリアル番号を入れなければならいので不便でしたが、この新サイトのダウンロードページは、一度ログインしてしまえばダウンロードのたびにシリアル番号を入れる必要がありません。

Login_5

現在は、MITOUJTAG Pro 体験版と、Pocket JTAG Cableドライバしか置いていませんが、早く様々なファイルをこちらにアップロードして、現在のダウンロードページからこの新サイトに移行していきたいと思います。

ログインページは、下記のURLにあります。

http://www.tokudenkairo.co.jp/login2/

どうぞご利用ください。

| | コメント (2)

2014.05.17

Linux版RXプログラマをリリース

もなかさんがPizzaFactoryでFreeRXDuinoをビルドしてくれたのですが、OSXでの書き込み方法がない、ということで、Linux版のrxprogをリリースしました。

このツールを使うと、RX62N,RX621,RX63N,RX631のブートモードでプログラムできてしまうというものです。

GR-SAKURAのファームウェアを使わない場合、あるいは、GR-SAKURA以外のボードで、ファームウェアが使えない場合に便利かと思います。

rxprogは、ここからダウンロードできます。

過去のアーカイブから探してきて公開しただけなので、基本的にテストはしていません。今日、試しに仮想マシンのLinux上で動かしてみたのですが、うまく動きませんでした。

実機のLinuxなら動くかもしれませんが、試していません。

これを作ったときに書いたブログの過去の記事では動いていたようなので、バイナリは変えずにREADME.TXTだけ直してアップロードしました。

動かないよ!という方が多くいらっしゃるようでしたら、今夜あたり、ソースコードごとアップロードします。

| | コメント (2)

2014.05.15

FreeRXduinoを修正した&サンプルプログラムをアップロード

FreeRXduinoを公開したところ、数人の方から暖かいメッセージをいただきました。ありがとうございました。

さて、先日リリースしたFreeRXduinoで、RX63N用のプログラムがうまくビルドできないとのご連絡をいただきましたので、早速原因を調べ、修正したバージョンをアップロードしました。下記のURLからダウンロードできます。

http://rx.tokudenkairo.co.jp/freesoft.html

アーカイブを作成するときのミスで、ソースコード自体には変更はないので、バージョンは1.10Aとしました。

今回は、プログラムが正常にビルドできて、正しく動作することをGR-SAKURAを用いて確認しました。ライブラリ自体はたくさんの基板に対応しているのですが、いろんなボードでの動作は調べきれないので、とりあえずはGR-SAKURAのみでテストしています。

確認に用いたプログラムは、下記のページのサンプルコード集としてアップロードしました。

http://rx.tokudenkairo.co.jp/sample.html

 

Rxduinosample

今のところこんなプログラムがあります。

  • 基本のLEDチカチカ
  • PWMでLEDをじわーっと光らせる
  • 12bit A/Dコンバータのサンプル
  • 浮動小数点演算とprintf
  • 内蔵データフラッシュの使い方
  • サーボを20チャネルとPWMを14チャネル使う
  • HTTPクライアント ホームページの閲覧
  • NTPで内蔵時計を合わせる
  • キャラクタ液晶に文字を表示するには

RXduinoを開発したときに、テストプログラムもたくさん作ったのですが、まだまだ整理しきれていないものが多くあるので、折をみてはアップロードしていきたいと思います。

| | コメント (0)

2014.05.13

DigilentのUSB-JTAGをMITOUJTAGから使う

ZED BoardやZYBO、Digilent JTAG-HS2をMITOUJTAGから使えるようにしています。

これらのUSB-JTAGケーブルは仕様が公開されていませんが、XILINXのiMPACTから使えるので、iMPACTをサーバモードで起動しておき、ローカルホスト経由で接続することでMITOUJTAGからこれらのケーブルを操作できるようにしました。

次の写真は、DigilentのJTAG-HS2をZED Boardに挿したときのものです。

Zed_hs

MITOUJTAGを起動して、Digilentケーブルを選択します。・・

Mj_cables

すると・・

Zed_bscan

このようにバウンダリスキャンできるようになりました。メッセージWindowにはiMPACTみたいなメッセージが出てきます。

2014/05/13 16:59:52  XILCABLE: Digilent Plugin: Plugin Version: 2.4.4
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: found 1 device(s).
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: opening device: "Zed", SN:************
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: User Name: Zed
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: Product Name: Digilent Zed
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: Serial Number: ************
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: Product ID: ************
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: Firmware Version: 0108
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: JTAG Port Number: 0
2014/05/13 16:59:52  XILCABLE: Digilent Plugin: JTAG Clock Frequency: 10000000 Hz
2014/05/13 16:59:52  JTAGケーブル xilcable と接続しました

さて、ZYBOはどうでしょう。

Zybo_photo

同じくUSBを挿した状態でMITOUJTAGから接続すると・・

はい、このとおり。

Zybo_bscan

ちゃんとスキャンできました。

毎秒400回くらいです。どうやら、ZED Boardも、ZYBOも、Digilent JTAG-HS2も全部同じようです。

ロジアナモードで見てみると・・

Zed_wave_2

なんと、波形のあるときとないときが間欠的に繰り返しています。1回あたりのスキャン時間は短いときで0.7~0.8msでした。

このDigilentのケーブルをMITOUJTAGから使えるようにするプラグインは、近日中に公開予定です。ご期待ください!

◆追記

AgilentのオシロでDigilentのJTAG波形をみてみた。

TCKの周期は150nsなので6MHzくらいだ。

Hs_detect Hs_jtag2 Hs_jtag3

 

XILINXのPlatform Cable USBは4bit単位でTCKが動いていたけど、Digilentの波形はだいぶん違う。

| | コメント (0)

RXduinoの無償版「FreeRXduino」をリリースしました

おまたせしました。RXduinoの無償版「FreeRXduino」をリリースしました。

http://rx.tokudenkairo.co.jp/freesoft.html

秋月さんのRX621ボードでも、NGX社のBlueBoard 62Nでも、マルツさんで扱っているYRDKRX63Nでも、もちろん、GR-SAKURAでも同じように動きます。

ライセンスはオープンソースではありませんが、ローカルビルドをしていただいたくことや、作ったアプリケーションの配布は自由にできます。

ローカルビルドは、Cygwin&RX-ELF-GCCか、KPIT社のRX-ELF-GCCでできます。

このFreeRXduinoは当社のWebサイトから無償でダウンロードできます。後からライセンスが厳しく戻ってしまう・・ということはありませんので、ご安心ください。

| | コメント (4)

2014.05.12

RXduinoの今後の方針について

この2~3日の間に、RXduinoについていろいろな動きがありました。

様々な経緯がありましたが、要点をまとめておきます。

  • 5月9日(金)に「RXduino」を商標出願しました。勝手に名称を使われないための予防措置です。エンドユーザ様の権利を制限しようとしたものではありませんのでご安心ください。
  • 現状のRXduinoのライセンスは徐々に緩和します。一度緩和したものが再び制限する方向に戻ることは決してありませんのでご安心ください。

私が望んでいることは、秋月さんの基板も、αさんの基板も、ホクトさんの基板も、マルツさんで売っている外国の基板も、Interfaceの付録基盤も、(販売終了した)特電の基板も、RDKもRSKも、もちろん自作のRXマイコン基板でも、RXを使っていればどれもみーんな同じように動かせて、そこそこ自由なライブラリと開発環境を提供することです。

それは、あのプロジェクトの枠組みの中ではできません。いくら待っていても、コンソーシアムやらエコシステムができるとは思っていません。

だから自分でやります。あのプロジェクトに誘われる前の、ただのなひたふに戻って一人でやります。

目指しているのはH8-OSのような使い勝手です。H8-OSにはお世話になりました。

基本的にフリーのソフトを開発して公開するというわけなので、利益を目的としたものじゃありません。時間も金もスタッフもほとんど割り当てることはできません。つまり、これはボランティア的な活動なので、素早く動けないのはご容赦ください。

sun

今後、唐突にいままでのライセンスの方針と大きく変わることを言い出すかもしれませんが、気まぐれで変えるわけではないのでご理解ください。1年半ほど前から、こういう事態になったときにはこうしようと計画してきたものです。それを実行に移すだけのことです。

ただ、これまでに商用版ライセンスをご購入いただいた方のためにも、ある程度の時間をかけて段階的に以降します。いきなりGPLやらBSDにしたりはしません。

ライセンス条件の変更によって、実際に使うエンドユーザさんにとって不利益になるようなことは一切ありません。それは保障します。

sun

本件にあまり時間はかけられないので、できるだけ開発はせずにライセンスの緩和や対応ボードの増強のみ行います。

one 第一ステップとして、「各種ボードでのローカルビルド環境の無償提供」

多くの方が待ち望んでいるあの桃色のボードだけでなく、秋月のRX621や、青い2000円位のボード、それから、マルツさんで販売しているRSKなどが対象です。これは1~2日以内にすぐにやります。

two 第二ステップは、「Makeファイルと、ビルドスクリプト

GCCについての深い知識がなくても、コマンド一発で簡単にビルドできるアレです。プロジェクトやワークグループを作成するためのフォルダ構成も再度考えます。

three 第三ステップは、「自分ボード用ライブラリジェネレータ

自分のボード用にカスタマイズしたboard.hを作成して、特電サーバ上に用意したクラウドコンパイラでライブラリを生成するツールです。

こんなこと2週間くらいでやろうと考えています。

今までエンドユーザ様の意見を聞いたことがなかったので、ユーザ不在のままライセンスとか考えてきました。皆様、思うことがあれば、どうかコメントとかメールとかいただければ嬉しいです。

| | コメント (4)

2014.05.11

RXduino。夢見たものは…

夢見たものは、RXマイコンを使って誰でも高度なプログラムを手軽に開発できるそういう世の中。

| | コメント (4)

2014.05.09

RXduinoを商標出願しました

「RXduino アールエックスデュイーノ」を商標出願しました。書類を書く手間をかけたくないというのと、後で面倒なことになったときのために今回は弁理士さんを通じて出しました。

| | コメント (0)

2014.05.08

XILINXのcse_serverの使い方

XILINXのJTAGケーブルには、cse_serverという仕組みがあります。このcse_serverを使うとTCP/IP経由でリモートアクセスできます。

まず、スタートメニュからISE Design Suite 32または64 Bit Command Promptを起動します。

Cse_1

32bitのOSでは32Bitを選ぶこと。64bitのOSでは64Bitを選ぶこと。

それから、cse_server.exeを起動します。32bitの場合はこうです。Cse_3

Cse_2

64bitの場合はこうです。

実は極めて重要なことがあります。cse_server.exeは32bit版と64bit版の2つがあるのです。基本的に32bitプロンプトを起動した場合には32bit版が選ばれ、64bitプロンプトを起動した場合には64bit版が選ばれます。

しかし、何でかわかりませんが、64bitプロンプトを起動しても32bit版のcse_serverが選ばれていたことがありました。(その確認のため上の例ではwhichを実行しています)

もし、64bit OSで、32bit版のcse_server.exeを起動してしまっていると、Platform USBケーブルに接続しようとしたときに、

Source driver files not found.

というエラーメッセージがTCP/IP上を流れていきます。つまり、Platform USBに接続できません。

sun

それでは、実際にリモート通信を試してみましょう。ここではiMPACTのバッチモードというのを使います。もう一つのコマンドプロンプトを立ち上げるか、別のマシンを立ち上げて、

impact -batch

とタイプします。すると、iMPACTがテキストモードで起動するので、

setMode -bs
setCable -port usb21 -server ホスト名

と入力します。-port usb21のオプションはサーバ(つまり遠隔地にあるマシン)上のUSBポートにつながっていることを示します。

Cse_4

なお、上の図はcse_serverの32bit/64bitが違っていた場合の画面です。Source driver files not foundが出て、最終的にCable connection failedになっています。

cse_serverが正しく起動している場合はこのように表示されます。

Cse_5

何やらJungoのwindrvr6.sysドライバが読み込まれているようですね。

最後のESN not available for this cable.というのは、黒いPlatform USB Cableで表示されます。赤いPlatform USB Cableではケーブルのシリアル番号が表示されます。

重要なことは、

  • Source driver files not foundが出るのは64bit/32bitが違っているため
  • 64bit OSで確実に正しいcse_serverを起動するにはC:\Xilinx\14.X\ISE_DS\ISE\bin\nt64 ディレクトリにcdで移動してからcse_server.exeを起動したほうが良い。

です。これで1日無駄にしました。

| | コメント (0)

2014.05.07

また新しいスタッフが入りました

今日から特電に新しいアルバイトのスタッフが来てくれました。

大学院1年生の方で、専門はFPGAの高位合成とのこと。コンテストに参加して入賞した経歴があるという実力の持ち主です。

しばらくは週一でしか来られませんが、夏以降は週2~週3で来られるとのこと。とても期待の新人です。

| | コメント (0)

Artix-7で作るUSB3.0 CMOSカメラでAXI-Interconnectを使ってみた

Artix-7版USB3.0 CMOSイメージセンサ取り込み装置で、CoreGenの生成するAXI Interconnectを使ってみました。

数か月前にもCoreGenのAXI-Interconnectに挑戦してみたのですが、その時はAXI Interconnectが動かずそのままになっていました。

今回、久しぶりにチャレンジしてみたのですが、最初はs_axi_arreadyがずっとLのまま動かなかった(つまり下位デバイスのReadの準備ができた状態にならない)のですが、CoreGenの設定でINTERCONNECT_ACLKを10000psにして、

Axiic_1

次の画面でIs Aclk Asyncをチェックしたら動くようになりました。

Axiic_2

どちらが効いているのかは不明です。

さて、CoreGenで生成したAXI-Interconnectに、USB FX3コントローラと、カメラモジュールと、DDR3メモリコントローラをつなぎます。

	
inst_axi_ic : axi_ic PORT MAP (
    INTERCONNECT_ACLK => axiclk,
    INTERCONNECT_ARESETN => axiresetn,
    S00_AXI_ARESET_OUT_N => open,
    S00_AXI_ACLK => axiclk,
    S00_AXI_AWID => usb_axi_awid(0 downto 0),
    S00_AXI_AWADDR => usb_axi_awaddr,
    S00_AXI_AWLEN => usb_axi_awlen,
    S00_AXI_AWSIZE => usb_axi_awsize,
    S00_AXI_AWBURST => usb_axi_awburst,
    S00_AXI_AWLOCK => usb_axi_awlock(0),
    S00_AXI_AWCACHE => usb_axi_awcache,
    S00_AXI_AWPROT => usb_axi_awprot,
    S00_AXI_AWQOS => usb_axi_awqos,
    S00_AXI_AWVALID => usb_axi_awvalid,
    S00_AXI_AWREADY => usb_axi_awready,
    S00_AXI_WDATA => usb_axi_wdata,
    S00_AXI_WSTRB => usb_axi_wstrb,
    S00_AXI_WLAST => usb_axi_wlast,
    S00_AXI_WVALID => usb_axi_wvalid,
    S00_AXI_WREADY => usb_axi_wready,
    S00_AXI_BID => usb_axi_bid(0 downto 0),
    S00_AXI_BRESP => usb_axi_bresp,
    S00_AXI_BVALID => usb_axi_bvalid,
    S00_AXI_BREADY => usb_axi_bready,
    S00_AXI_ARID => usb_axi_arid(0 downto 0),
    S00_AXI_ARADDR => usb_axi_araddr,
    S00_AXI_ARLEN => usb_axi_arlen,
    S00_AXI_ARSIZE => usb_axi_arsize,
    S00_AXI_ARBURST => usb_axi_arburst,
    S00_AXI_ARLOCK => usb_axi_arlock(0),
    S00_AXI_ARCACHE => usb_axi_arcache,
    S00_AXI_ARPROT => usb_axi_arprot,
    S00_AXI_ARQOS => usb_axi_arqos,
    S00_AXI_ARVALID => usb_axi_arvalid,
    S00_AXI_ARREADY => usb_axi_arready,
    S00_AXI_RID => usb_axi_rid(0 downto 0),
    S00_AXI_RDATA => usb_axi_rdata,
    S00_AXI_RRESP => usb_axi_rresp,
    S00_AXI_RLAST => usb_axi_rlast,
    S00_AXI_RVALID => usb_axi_rvalid,
    S00_AXI_RREADY => usb_axi_rready,
    S01_AXI_ARESET_OUT_N => open,
    S01_AXI_ACLK => axiclk,
    S01_AXI_AWID => cam_axi_awid(0 downto 0),
    S01_AXI_AWADDR => cam_axi_awaddr,
    S01_AXI_AWLEN => cam_axi_awlen,
    S01_AXI_AWSIZE => cam_axi_awsize,
    S01_AXI_AWBURST => cam_axi_awburst,
    S01_AXI_AWLOCK => cam_axi_awlock(0),
    S01_AXI_AWCACHE => cam_axi_awcache,
    S01_AXI_AWPROT => cam_axi_awprot,
    S01_AXI_AWQOS => cam_axi_awqos,
    S01_AXI_AWVALID => cam_axi_awvalid,
    S01_AXI_AWREADY => cam_axi_awready,
    S01_AXI_WDATA => cam_axi_wdata,
    S01_AXI_WSTRB => cam_axi_wstrb,
    S01_AXI_WLAST => cam_axi_wlast,
    S01_AXI_WVALID => cam_axi_wvalid,
    S01_AXI_WREADY => cam_axi_wready,
    S01_AXI_BID => cam_axi_bid(0 downto 0),
    S01_AXI_BRESP => cam_axi_bresp,
    S01_AXI_BVALID => cam_axi_bvalid,
    S01_AXI_BREADY => cam_axi_bready,
    S01_AXI_ARID => cam_axi_arid(0 downto 0),
    S01_AXI_ARADDR =>cam_axi_araddr,
    S01_AXI_ARLEN => cam_axi_arlen,
    S01_AXI_ARSIZE => cam_axi_arsize,
    S01_AXI_ARBURST => cam_axi_arburst,
    S01_AXI_ARLOCK => cam_axi_arlock(0),
    S01_AXI_ARCACHE => cam_axi_arcache,
    S01_AXI_ARPROT => cam_axi_arprot,
    S01_AXI_ARQOS => cam_axi_arqos,
    S01_AXI_ARVALID => cam_axi_arvalid,
    S01_AXI_ARREADY => cam_axi_arready,
    S01_AXI_RID => cam_axi_rid(0 downto 0),
    S01_AXI_RDATA => cam_axi_rdata,
    S01_AXI_RRESP => cam_axi_rresp,
    S01_AXI_RLAST => cam_axi_rlast,
    S01_AXI_RVALID => cam_axi_rvalid,
    S01_AXI_RREADY => cam_axi_rready,
    M00_AXI_ARESET_OUT_N => open,
    M00_AXI_ACLK => axiclk,
    M00_AXI_AWID => ddr_axi_awid,
    M00_AXI_AWADDR => ddr_axi_awaddr,
    M00_AXI_AWLEN => ddr_axi_awlen,
    M00_AXI_AWSIZE => ddr_axi_awsize,
    M00_AXI_AWBURST => ddr_axi_awburst,
    M00_AXI_AWLOCK => ddr_axi_awlock(0),
    M00_AXI_AWCACHE => ddr_axi_awcache,
    M00_AXI_AWPROT => ddr_axi_awprot,
    M00_AXI_AWQOS => ddr_axi_awqos,
    M00_AXI_AWVALID => ddr_axi_awvalid,
    M00_AXI_AWREADY => ddr_axi_awready,
    M00_AXI_WDATA => ddr_axi_wdata,
    M00_AXI_WSTRB => ddr_axi_wstrb,
    M00_AXI_WLAST => ddr_axi_wlast,
    M00_AXI_WVALID => ddr_axi_wvalid,
    M00_AXI_WREADY => ddr_axi_wready,
    M00_AXI_BID => ddr_axi_bid,
    M00_AXI_BRESP => ddr_axi_bresp,
    M00_AXI_BVALID => ddr_axi_bvalid,
    M00_AXI_BREADY => ddr_axi_bready,
    M00_AXI_ARID => ddr_axi_arid,
    M00_AXI_ARADDR => ddr_axi_araddr,
    M00_AXI_ARLEN => ddr_axi_arlen,
    M00_AXI_ARSIZE => ddr_axi_arsize,
    M00_AXI_ARBURST => ddr_axi_arburst,
    M00_AXI_ARLOCK => ddr_axi_arlock(0),
    M00_AXI_ARCACHE => ddr_axi_arcache,
    M00_AXI_ARPROT => ddr_axi_arprot,
    M00_AXI_ARQOS => ddr_axi_arqos,
    M00_AXI_ARVALID => ddr_axi_arvalid,
    M00_AXI_ARREADY => ddr_axi_arready,
    M00_AXI_RID => ddr_axi_rid,
    M00_AXI_RDATA => ddr_axi_rdata,
    M00_AXI_RRESP => ddr_axi_rresp,
    M00_AXI_RLAST => ddr_axi_rlast,
    M00_AXI_RVALID => ddr_axi_rvalid,
    M00_AXI_RREADY => ddr_axi_rready
  );

・・長い! ぐちゃーっと同じようなものを延々と書きます。

その後もで紆余曲折あったけど動きました。

ノートPCにArtix-7 CMOSイメージセンサをつないでお出かけしましょう。

Axicmoscam

神田川の風景を撮影してみました。本当は2048×1536で撮影したのですが、このブログは横1600までしか対応していないようなので、1600×1200にリサイズしています。

Axicmoscamkandagawa

デジカメ並みに綺麗です。 こんなカメラが自作できてしまう。やはりUSB3.0とArtix-7は面白い。

8bitで屋外を撮影しようとすると、明るいところと暗いところが出てしまって、色深度が足りないですね。

| | コメント (0)

2014.05.05

XILINXのPlatform USBを自分のプログラムからコントロールする

XILINXのPlatform USBはいろいろなところに既にあるし、XILINXの純正評価ボードにも最初から組み込まれています。

これを自分のプログラムから自由にコントロールできたら素晴らしいことです。その方法を探ってきました。

やり方は3つ思いつきます。

  1. USBプロトコルアナライザで解析し、汎用USBドライバ(libusb)でアクセスする
  2. XILINXのデバイスドライバを呼び出す方法を探る
  3. リモート接続を使う

まず、1の方法ですが、この方法だと、INFファイルを新たに作って、PlatformUSBケーブルがつながれたときにXILINXのドライバではなく、libusbが読み込まれるようにしなければなりません。これはユーザの環境を変えてしまうのでNGとします。

2の方法ですが、XILINXのPlatform USB CableはWinDriver6というドライバを使っています。CreateFileとDeviceIoControlとWriteFile、ReadFileで頑張ればできなくはないかもしれません。ですが、不確実性やライセンスの面で懸念が残ります。

そのため、ここでは3の方法を探ってみることにしました。

XILINXのiMPACTは、実は、TCP/IPを持ちいてリモート接続することができます。ISEの環境が設定されたコマンドプロンプトからcse_server.exeを起動すると、ポート50001で待ち受けが始まります。

Cse_1

ここで、iMPACTを起動して、CableのSetupでRemoteを選ぶとTCP/IPで通信が行われ、他のマシンにあるPlatform USBケーブルに接続できるというわけです。

ここで、重要なことがあります。ISE10かISE11の頃に、cse_serverの仕様が変わりました。古いcse_serverはテキストベースで端子の上げ下げを通知していたのですが、新しいcse_serverはバイナリデータ化され、プロトコルは複雑なものに変わりました。

新旧のcse_serverでプロトコルは全く異なります。

Interface誌の2010年で紹介されているcse_serverの記事は古いプロトコルのものなので、まったく役に立ちません。だから、改めて解析しなおす必要があるのです。

そこで、cse_serverを使っているときのTCP/IPのパケットをダンプして、解析しました。

Csejtag_analyze

その結果、わかってきたことは、

  • ファイルの転送やデバイスプログラミングなど、かなり高レベルなコマンドを与えて、リモート操作している
  • 一応、低レベル(TMSやTDIの上げ下げ、SCANの実行)な操作もできる
  • 要するに、コマンド体系はJTAGのそれではなく、iMPACTのものである

ということです。

とりあえず、自分で作ったプログラムからSCAN DRコマンドを発行して、Artix-7のIDCODEを読み出すことまではできました。

Cse_3

上の画面に出ている13631093というのが、XC7A100TのIDCODEです。

一応、接続や、初期化、TMSやTDIなどの低レベル操作、SCANの実行まではやり方がわかってきました。もう、自由にJTAGの波形は作り出せます。

Cse_4

まだよくわかっていないのが、TAPの操作方法です。TAPを任意のステートに動かしたり、SCAN_DRやSCAN_IRの終了後にどこに動かすか、という方法が解明できていないでいます。

まぁ、でもあと1週間もあればMITOUJTAGからPlatform USBを操作できるようになっていると思います。

| | コメント (0)

2014.05.02

特電の勉強会は、ほぼ毎週やっています

今日、FPGAをバリバリ使っているという優秀な学生さんがアルバイトの面接に来てくれました。思わず1時間くらい話し込んでしまいました。

その中で「勉強会はやっているのですか?」という質問がありました。

はい。人が揃わなかったり、内藤が超多忙だったりする場合を除いて、ほぼ毎週やっています。

第2回目(2013/12/12)以降のテーマをざっと調べてみると・・

  • 誘電体吸収(DA)について
  • A/D変換とノイズについて
  • A/D変換とプリアンプの構成
  • A/D変換とプリアンプの構成2
  • CICフィルタ
  • FFTの実装とディジタルフィルタ
  • DDR3 SDRAMの回路設計方法
  • 低ひずみ発振器とFFT
  • Google Analyticsの使い方 全5回
  • ○○社のHPの分析 (類似のテーマで計4回)
  • 特電のHPの改善案 (類似のテーマで計2回)
  • Windows Azureを使ってみよう
  • Windows Azureの料金体系
  • Windows Azure上でのアプリケーションの開発
  • VHDLの基礎
  • クロックが異なるドメインをまたぐステートマシンの設計
  • ステートマシンの連携方法
  • 帳票類の保存方法
  • 特殊電子回路の製品紹介
  • 特殊電子回路の取引先紹介
  • 顧客獲得の方法 (○○の書籍より)
  • 成長曲線について
  • 特電の営業戦略2014

だいたいこのようなテーマでやっています。このほか、あまりオープンにできない秘密のテーマや、Office365の操作を誤って消失してしまったプレゼンもあるので、もう少し多くなります。

私が書いたスライドの中からお見せできるページをいくつか紹介します。

Benkyo1Benkyo2

あたりさわりのない部分だけ・・

Benkyo3Benkyo4_2

Benkyo5

発表は、最初はノートPC+USBメモリでやっていたのですが、次にGoogleのドライブで共有を行うようになりました。しかし、GoogleのドライブはPowerPointの文字がずれたりするので、最終的にはMicrosoftのOffice365を使うようになりました。

というわけで、Office365と液晶プロジェクタを使って、(ほぼ)毎週開催しています。

こんな勉強会にご興味がある方は、ぜひ、特電へお越しください。優秀な若い頭脳をお待ちしております。

| | コメント (0)

« 2014年4月 | トップページ | 2014年6月 »