ゆけッ!やっせんぼ・とよちゃん! : サイクリング日記
HASH-TAG : Audio



2019年05月09日(木) 21.7/12.5℃

Update: 05:56:05
サイクリング
今日もサイクリングば無しでした。
今朝もなんとか 05:30 には起きれましたが、04:30 には程遠いです。(┳◇┳)

Update: 07:25:16
今日のコーヒー
最近はこのコーヒーを飲むことが多いです。
TULLY′S Smooth Latte。


Update: 15:31:42
趣味の工作
今週発注した部品が届きました。 まだ届いていないものもあるけど、そのうち届きます。
プリント基板ももうそろそろ届くと思うのですよ。
運が良ければ、今週末半田付けできます。o(^Δ^)o



#趣味の工作 #Audio Processor




2019年05月10日(金) 26.5/10.0℃

Update: 05:52:05
サイクリング
今日もサイクリングは無しでした。
なんとか 05:30 に起きました。
今日も元気に頑張ります。

Update: 12:14:15
髪をきりました
午前中空いてる時間にと思って 12:00 前にいつもの散発屋さんに行って髪を切ってもらいました。 今回切ってくれたのは年配のおねいさんで、丁寧で、綺麗にスッキリにしてもらえました。
前回「髪の毛を切った」って書いたのは、3月1日だったんですね。

Update: 15:52:46
プリント基板
プリント基板が届きました。
1日に発注して、今日10日に届きました。 速いですね。



今回は、赤と青の基板にしました。
それぞれ10枚ずつです。


#散髪 #趣味の工作 #Audio Processor




2019年05月11日(土) 28.0/13.0℃

Update: 05:53:01
サイクリング
今日もサイクリングは無しでした。
目が覚めたら 05:30 でした。
明日は早起きできるかなぁ?

Update: 09:52:06
とうもろこし
田舎の妹からとうもろこしが送られてきました。 会社の人たちと食べてって言われたけど、いやいやもったいない。 私が全部食べます。( ̄∀ ̄)
電子レンジでチンしました。 いただきます。(⌒~⌒)


Update: 13:45:44
ハンダ付け
午後から会社に来ました。 会社大好き。
これからハンダ付けをします。( ´ ▽ ` )ノ


Update: 14:50:00
ハンダ付け中止
諸事情により( ̄∀ ̄)回路図がないので、今日のハンダ付け作業は中止にして、とっとと帰ってきました。
KiCad のデータは NextCloud にあるので会社からもダウンロードできるのですが、KiCad 5.x で作成したもんだから 会社のPCにインストールされている KiCad 4.x とバージョンが合わなくて、会社のPCにも KiCad 5.x をダウンロードしてインストールしようとしたら ダウンロードだけで2時間とかかかるって出たので、時間の無駄なので帰ってきました。
ハンダ付けは明日にします。

#趣味の工作 #Audio Processor




2019年05月12日(日) 22.9/13.0℃

Update: 08:51:01
サイクリング
今日もサイクリングは無しでした。
昨夜 22:00 くらいに寝たら 02:00 くらいに目が覚めちゃって、その後どうしても眠れなかっので Bosnaさん のライブ配信を見たのですが、いつの間にか寝落ちしていて、起きたら 08:30 でした。

Update: 10:46:27
ハンダ付け
またまた会社に来ました。
今日こそはハンダ付けを済ませます。( ̄∀ ̄)


Update: 12:37:05
難関
今日最大のハイライトを突破しました。
周りのコンデンサを先に付けてしまったものだから、コンデンサーが邪魔でレシーバーのICをハンダ付けするのに苦労しました。(⌒~⌒)


Update: 13:57:15
ハンダ付け終わり
ハンダ付けが終わりました。 完璧です。
今使っているオーディオプロセッサーにつないで試験します。 あ、DSPのファームウェア書き換えないとです。( ̄∀ ̄)


#趣味の工作 #Audio Processor




2019年05月19日(日) 22.0/16.0℃

Update: 08:28:47
サイクリング
今日もサイクリングは無しでした。
起きたら 07:30 でした。 寝たのが 03:00 くらいだったと思うので、まぁ当然ですわな。( ̄∀ ̄)

Update: 09:30:37
デジタル出力
今日は会社に来ました。
これから先週ハンダ付けしたデジタル出力ボードのデバッグを行います。


#趣味の工作 #Audio Processor




2019年05月22日(水) 24.0/15.0℃

Update: 05:37:14
サイクリング
今日もサイクリングは無しでした。
05:00 前に目が覚めました。 もう少しです。
てか、昨日の雨でまだ路面濡れてる?

Update: 17:20:19
デジタル入力
デジタル入力ボードが動作しました。
PIC12 で CS8422 の初期設定を行っているのですが、設定レジスタの意味と設定値は全く異なるのですが、設定方法はこの前の CS8406 とまったく同じだったので 簡単だと思っていたのです。 ところが、なかなかうまくいかなくて、月曜日からずっと悩んでいました。 結局、SPI の設定速度(クロック)の問題でした。
SPI の最大クロックが、CS8406 は 6MHz なのに対して CS8422 は 100kHz で、設定速度が速すぎてうまく設定できていなかったのでした。 SPI のクロックを 1/100 にしたらあっさり動作しました。


#趣味の工作 #Audio Processor




2019年05月24日(金) 30.0/13.5℃

Update: 05:39:04
サイクリング
今日もサイクリングは無しでした。
今朝も 05:00 起きでした。 なんか、朝起きのリズムが 05:30 固定になっちゃったみたいです。

Update: 09:27:36
デジタル入出力
デジタル入出力ボードを 1kHz トーンを使ってテストをしてみました。
PC ==USB=> ROLAND Quad-Capture ==AES3=> デジタル入力ボード ==I2S=> DSP ボード ==I2S=> デジタル出力ボード ==AES3=> ROLAND Quad-Capture ==USB=> PC という接続で行いました。
下の図が、パワースペクトルスペクトルです。 サンプリング周波数は 192kHz です。 すこし高調波歪みがありますが、どこで入ったんですかね? デジタルでは入り得ないはずなんですけど。(笑)


わざわざ DSP ボードを入れないでデジタル出力ボードとデジタル入力ボードの間を AES3 で折り返せば良いじゃんというツッコミを入れてくださったあなた。 鋭いですね。 でも残念。 デジタル信号系にはマスタークロックが必要でして、AES3 入出力ボードと ROLAND Quad Capture だけの接続ではクロック信号を出してくれる人がいないんですよ。 上の測定では、DSP ボードに載っているアナログ音声の入出力用のコーデックがマスタークロックを生成しています。

#趣味の工作 #Audio Processor




2019年05月26日(日) 33.5/16.0℃

Update: 08:27:38
サイクリング
今日もサイクリングは無しでした。
起きたら 08:00 でした。 昨日は会社に行って今使っている Audio Processor に繋ぐ AES3 入力ボードを新しく作成して、さらにファームウエアの更新作業もやろうと思っていたのですが、結局一日中寝ていて、何もしませんでした。
昨日は一日寝太郎だったのに、昨夜もぐっすり寝ました。 寝すぎて頭がボーーーーッとしています。わら

Update: 09:47:18
デジタル入力ボード
会社に来ました。
これからデジタル入力ボードのハンダ付けを行います。 まずは難関の CS8422 からです。


Update: 11:06:55
完了
デジタル入力ボードのハンダ付けが終わりました。 DSP ボードにつなぐので 実装してない部品もあります。


Update: 13:31:08
Audio Processor
Audio Processor の DSP ボードのファームウェアの書き換えが完了しました。 黒い色のボードが現在運用している Audio Processor の信号処理装置(DSP ボード)です。 デジタル入力とアナログ入力の切り替え、デジタル入力のボリューム調整機能などを組み込みました。


#趣味の工作 #Audio Processor




2019年05月28日(火) 31.7/20.4℃

Update: 05:49:14
サイクリング
今日もサイクリングはなしでした。
05:30 になんと起きれました。
あと1時間、なんとかならんですかね?( ̄∀ ̄)

Update: 07:16:30
紫陽花
会社に来る途中、紫陽花が咲いていました。 もうそんな季節なんですね。


Update: 07:17:59
スムージー
コンビニに寄ったら新しいのがあったので買ってみました。
スジャータ めいらく メロンミックススムージー果肉入り。


Update: 18:11:00
Audio Processor
Audio Processor のデジタル入力が完璧に動作するようになりました。 昨夜デジタル入力による信号処理は問題なく動作したのですが、リモコンやロータリーエンコーダーなどを制御しているコントローラーボードとの通信が上手くいかずに アナログチャネルとデジタルチャネルの切り替えが出来なかったのでした。 それも今日のファームウエアの更新で修正できて、もう完璧です。\(^∇^)/

#趣味の工作 #Audio Processor




2019年10月02日(水) 29.5/17.5℃

Update: 05:46:54
サイクリング
今日もサイクリングは無しでした。
最近 PCB のデザインを遅くまでやっていて、朝起きれなくなってしまいました。

Update: 09:56:09
デジタルアンプ
完成しました。
早くスピーカーを鳴らしたいな。(⌒~⌒)


Update: 13:19:48
エネルギー補給
元気の補給に買ってきました。
DyDo VITA ENERGY ぷるっシュッ!! ゼリー×スパークリング ナタデココ入り。


Update: 21:39:18
Audio Processor
新しいバージョンの Audio Processor の PCB のデザインが、とりあえずできました。 まだこれから細かいところを修正していくのですが、とりあえずできたって感じです。
今回は、75mm x 100mm の4層基板です。 Fusion PCB に10枚頼むと US$50 みたいです。 送料が DHL で US$20 くらいなので、日本円で全部で 8000円 くらいですかね。 まじで激安ですね。 因みに、日本のどっかの★板に頼むと、製作は中国なのに、70000円 くらい取られますよ。(笑)


#Audio Processor #デジタルアンプ




2019年10月06日(日) 23.1/18.4℃

Update: 09:17:21
サイクリング
今日もサイクリングは無しでした。
昨夜も遅くまで PCB のデザインをやっていて、今朝起きたのは 09:00 でした。

Update: 09:50:01
口内炎
パッチをつけたら秒で治りました。
昨夜バッチを貼って PCB デザインをやっていたら、6時間くらいしたら自然に取れちゃって、そしたらもう治っていました。 治りかけていたってのもあるかもですけど、それにしてもすげえ。

Update: 10:51:25
アナログ入力回路
昨日から始めた PCB のデザインがほぼ完了しました。
今回のは、PCM1804 を使ったアナログ入力回路です。 先週からデザインしている新しい Audio Processor と組み合わせて使います。
両方とも今日中に仕上げて、まとめて Fusion PCB に発注したいと思っているのです。
アナログ入力回路は、現在使用している Audio Processor のアナログ入力部分をそのまま使っています。 S/N が良くて信頼性のある回路です。 PCB のデザインは 49.5x49.5mm の2層です。 部品数はそこそこ多いですが、スペース的にはスカスカで、2層でも余裕でした。


#Audio Processor




2019年10月07日(月) 23.1/17.0℃

Update: 08:03:48
サイクリング
今日もサイクリングは無しでした。
起きれませんでした。
起きたら 08:00 でした。
昨夜は早く寝たんですけどね。

Update: 11:38:39
PCB 発注
一週間前から先週末にかけてデザインしていたプリント基板2種類を Fusion PCB に発注しました。 もっと早く発注したかったのですが、朝起きてから細かい部分の最終チェックを始めたら、3時間半もかかってしまいました。
価格的にはこんな感じです。


   種別   サイズ[mm]   層数    価格[US$](円)
  ---------------------------------------------------------
   基板1   49.5 x 49.5    2      4.90( 546.8)
   基板2   74.9 x 99.0    4      44.90(5010.4)
   送料(DHL)               19.61(2188.3)
  ---------------------------------------------------------
   合計                  69.41(7745)

本当にこんな値段でいいんですかってくらいの驚愕の激安ですね。(⌒〜⌒)

基板1は、PCM1804 を使ったアナログ入力基板です。


基板2は、C6745 と MAX10 10M50 を使った DSP 基板です。


いずれも回路・PCB のデザインは、KiCAD でやっています。 赤の配線が表の部品面、緑の配線が裏面の配線面、黄色が電源層、赤紫色がグランド層です。 赤紫色のグランド層は、黄色の電源層に隠れて見えていないです。 黄色の電源層に穴が空いている部分が少しだけ見えている状態です。 黄色の電源層と同じで、一面べったりの層です。

#Audio Processor #プリント基板 #Fusion PCB




2019年10月17日(木) 17.7/14.0℃

Update: 05:46:14
サイクリング
今日もサイクリングは無しでした。
04:30 に目覚ましが鳴ったような記憶がありますが、寒かったので無視しました。
起きたら 05:30 でした。

Update: 12:34:14
楽しい半田付け
今から電源回路の半田付けを始めます。


Update: 14:52:57
USB充電器
先日買った Raspberry Pi Zero W の電源に、Micro B の USB ケーブル付きの USB 充電器を買いました。
色がシルバーでめっちゃかっこいいです。


Update: 14:56:13
Mini HDMI
それと、HDMI <=> Mini HDMI の変換ケーブルも買いました。


#DSP #FPGA #MAX10 #Audio Processor #Raspberry Pi




2019年10月18日(金) 16.5/14.5℃

Update: 05:35:28
サイクリング
今日もサイクリングは無しでした。
雨ですよ。(´△`)

Update: 12:13:34
楽しい半田付け
昨日、真っ先に最難関の電源ICを付けました。 もう峠は超えたも同然です。
ちなみに、ICのサイズは、黒い四角の部分が 3.1mm x 3.1mm です。 ピンは出ていなくて、黒い四角のハッケージの側面にパッドがちょこっとついています。 パッドとパッドのピッチは、0.5mm です。 まじで難しいです。


今日は、これからこのトランジスターを3個半田付けします。


Update: 12:35:25
綺麗に付いたかな?
綺麗に付けられたみたいです。
あとはコンデンサーと抵抗だけ。(⌒~⌒)


Update: 20:51:05
Raspberry Pi Zero W
100インチのプロジェクターをディスプレイにして起動中です。 普通に動いて、ある意味感動してます。(⌒~⌒)


Update: 22:48:54
Ryzen 9 3900X 最強?
先日、うちの開発マシンの調子が悪くなったんですよ。 C6745 のファームウエアとか MAX10 の VHDL とかの開発している主力開発機です。(゜∇゜) 今絶賛半田付中の新しい DSP ボードのファームウエアも開発しなくちゃなので、今壊れてもらっては困るのですよ。
で、そろそろ新しい PC 組まなくっちゃなのかなと思って、新しい CPU の候補として以前からいいなと思っていた Core i9 9900K の価格をチェックしていたら、つい最近 AMD から新しく Ryzen 9 3900X が発売されたって知ったんですよ。 性能をチェックしたら、消費電力、CPU性能全てにおいて Core i9 9900K を遥かに凌駕していました。(°□°;)
最近はずっと intel の CPU ばかり使ってきたんですが、今回の Ryzen 9 3900X、まじで使いたくなってしまいました。
時代は AMD ですかね。

#DSP #FPGA #MAX10 #Audio Processor #Raspberry Pi




2019年10月19日(土) 22.6/14.0℃

Update: 09:13:39
サイクリング
今日もサイクリングは無しでした。
目が覚めたら 09:00 でした。
昨夜雨が降っていたので、今朝のサイクリングは 諦めたのでした。 なんだか寝るのがもったいなかったので、映画やらアニメやらYouTube 動画やら観ていたら、いつの間にか 02:00 になっちゃってました。

Update: 10:12:12
朝ご飯
というか今日の主食。
不二家 チョコチップクッキー カントリーマアム バニラ&ココア。


それとこれ。 先日、全部一気に食べちゃって気持ち悪くなったやつです。( ̄∀ ̄)
SEVEN&i バラエティー豊かな9種の味わい チョコ&クッキーミックス。


Update: 10:19:42
楽しい半田付け
今日は会社に来ました。 これから一気に DSP 基板の半田付けをやります。 できたら今日中に全部終わらせたいです。
半田付の工具他全部自前で持っているので 別にわざわざ会社に来なくても良いのですが、家でやると絨毯を焦がしたり半田を散らかしたりしちゃうので嫌なんですよね。
まずは左下隅の電源回路からです。 残りはコンデンサーだけなので、すぐに終わると思います。


Update: 11:22:19
電源回路動作確認OK
電源回路が正しく動作しました。 まずは一安心です。
後は一気に半田付けを進めます。


Update: 15:51:02
半田付け終了
とりあえず、DSP 部分の半田付けが終わりました。 これから動作確認をします。
ちなみに、回路図の茶色いシミは、コーヒーではなくフラックスです。 半田付け中にフラックスの瓶を倒してしまいました。(≧∇≦)


Update: 16:56:23
動作確認!
DSP が動作しました Code Composer Studio (CCS) のデバッガーが繋がらなくて JTAG 周りをチッェクしたりとちょっとジタバタしてしまいました。 原因は、CCS の環境設定でした。
とりあえず LED チカチカを動かしてみました。o(≧∇≦)o


今日はこれで終わりです。

#DSP #FPGA #MAX10 #Audio Processor




2019年10月20日(日) 24.4/17.0℃

Update: 06:37:11
サイクリング
今日もサイクリングは無しでした。
起きたら 06:30 でした。
昨夜も夜更かししてしまいました。(´△`)

Update: 08:35:36
朝ご飯
今日も会社に来ました。
昨日のカントリーマアムとチョコレートの詰め合わせがまだたっぷり残っているのですが美味しそうだったので買ってきました。
Tarami ぎっしりみかんミルクプリン ミルクのコクとさわやか果実。


Update: 08:42:09
楽しい半田付け
今日もこれから半田付けをします。
今日は右半分の MAX10 の部分をやっつけます。 部品数が少ないので早めに終わると思います。


Update: 12:57:14
半田付け終了
ただし1カ所を除いて。 中央最上部の 24.576MHz の発振器を発注するのを忘れていたみたいです。(┳◇┳)


裏面はこんな感じです。


今日はこれで終わりです。

#DSP #FPGA #MAX10 #Audio Processor




2019年11月01日(金) 23.2/10.5℃

Update: 07:38:27
サイクリング
今日のサイクリングは無しでした。
目が覚めたら 07:00 でした。
昨夜めっちゃ早く寝たんです。 そしたら 03:00 くらいに目が覚めてしまって、眠くなかったのでYouTube動画を見てたら寝落ちしてしまって、起きたら 07:00 でした。
びっくり。(⌒~⌒)

Update: 08:51:55
デジタルアンプ
今朝は、会社で先日製作したデジタルアンプの試験をやっています。 大きいスピーカーを鳴らして、音質とか発熱とかをチェックしています。
一番下に写っている緑の基板がデジタルアンプなのですが、大音量で鳴らしてもなにも問題ないようです。 素晴らしいです。
ちなみに、一番上に写っている赤い基板が AES/EBU の受信部、 真ん中のかぼちゃ色のが ついこの間製作した DSP 基板です。 電源は、信号処理系が 3.3V と 1.3V、デジタルアンプが 19V です。


#DSP #FPGA #MAX10 #Audio Processor #デジタルアンプ




2019年11月04日(月) 19.2/10.9℃

Update: 06:06:26
サイクリング
今日もサイクリングは無しでした。
昨夜 00:00 ごろまで雨が降っていたので諦めたのですが、なんだか外は晴れてます。( ̄∀ ̄)

Update: 08:35:20
PCBデザイン
昨日からデジタルアンプの回路と CPB デザインの改修を始めて、やっとさっき PCB を Fusion PCB に発注しました。
回路の変更は、GAIN 設定の部分をちょこっとだけ。
PCB のデザインは、基板のサイズを前は 50mmx50mm だったのを 75mmx75mm に変更しました。 色々とテストしていて、24V の電源で駆動すると 効率が落ちるようで、発熱がけっこうあったんです。 まぁ、24V で駆動することはないと思うんですけど、趣味ですから 色々とこだわるんですよ。( ̄∀ ̄) 発熱は、TAS5760M 自身からも多かったのですが、出力用のインダクタンスからもあったので、インダクタンスのサイズを 6mmx6mm から 10mmx10mm に大きくしました。
放熱板は特に要らないと思うのですが、必要なら基板の裏面に放熱板を貼り付けるか、または基板自体を筐体に密着固定して放熱できるように、裏面には部品を置きませんでした。 完璧ですね。


発注価格は、PCB の製造が US$4.90、DHL の送料が US$16.04 で、合計 US$20.94、日本円で 2,363円 でした。 激安なので、何度でも作り直せますよねぇ。 ありがたいです。
今回も、多分1週間程度で届くと思います。

#回路設計 #プリント基板 #Fusion PCB #Audio Processor #デジタルアンプ




2019年11月10日(日) 17.8/7.5℃

Update: 07:31:47
サイクリング
今日は、起きれちゃったので、久しぶりに陣馬街道コースを乗ってきました。
台風による大雨後初めてのサイクリングだったのですが、陣馬街道も道路の一部が崩落して片側通行になっているところが2箇所ありました。 道路脇の崩落も何箇所もありましたね。 後、川底が洗われて川幅が広くなっていました。 相当の激流だったんですかね。
前回のサイクリングから1が月ちょっと経ってしまいました。 季節もすっかり変わって、最近は朝の気温は8℃ですよ。 8℃がどの程度の寒さなのか忘れちゃったので、寒くないような格好で出ました。 上は、イヤーウォーマー、夏物の半袖ジャージ2枚、アームウォーマー、ニック(日本語でいうところのレーパン(ださッWWW))、レッグウォーマー、シューカバー、耐10℃長指グラブでした。 後、下りで羽織るためのウインドブレーカーをポケットに入れて行きました。 上は2枚重ねとは言っても夏物で風通しが良いため 走り始めは少しだけスースーしましたが、5分もすると快適になりました。 しかし、帰りの下りで手が痛かったです。 耐10℃ではダメでしたね。(笑)

Update: 09:36:38
楽しいハンダ付け
今日は会社に来ました。 金曜日に発注した追加分の部品が昨日届いたので、新しいバージョンのデジタルアンプのハンダ付けをします。


Update: 11:28:47
ハンダ付け終わり
ハンダ付けが終わりました。
右が新しいバージョン、左が前のバージョンです。
これからちょっとだけ追加のケーブルを作ってその後実際にスピーカを鳴らします。
良い音がするといいな。


Update: 13:47:41
デジタルアンプ試聴
今大き目のスピーカー(40cmx40cmx40cm くらい)で色々な音源を試聴しているのですが、完璧ですね。 良い音です。(⌒~⌒)
12V で駆動しても十分大きな音が出ます。 19V、24V と電圧を上げていくと効率が下がってくるせいなのか発熱が多くなります。 12V で使う分には発熱はほとんどなく、何も問題ないです。


#回路設計 #プリント基板 #Fusion PCB #半田付け #Audio Processor #デジタルアンプ




2019年11月25日(月) 22.0/11.9℃

Update: 05:54:09
サイクリング
今日もサイクリングは無しでした。
昨夜寝る前に考え事を始めちゃったらなかなか寝つかれなくて、今朝はなんとかかんとか 05:30 過ぎに起きれました。 もっと寝ていたいです。

Update: 18:25:51
プロジェクト「びっくりちゃん」
ここ2週間ほど趣味の工作関連についての書き込みがないけどどうしたのかなぁとご心配いただいている読者のかたがたがいるかどうかは知らないですが、実は新しいプロジェクトを発動して 結構色々とやっていたのですよ。
新しいプロジェクト名は「びっくりちゃん」です。\(^O^)/ジャジャーン!

プロジェクトの内容はですね、FPGA にカスタムでデザインした MCU を組み込んでやろうと言うものです。 MCU コアの名前も「Bikkurichan」です。

2週間ほど前に C6745 と MAX10 を載せた新しい DSP 基板と新しいデジタルアンプが動いて、「さてこいつを今運用中の Audio Processor に組み込んでやろうかな」と思ったとき、ふと気づいたのです、今 PIC16F でやっているロータリーエンコーダーとか赤外線リモコンの受信とか7セグメントLEDの表示コントロールとかの処理を全部 MAX10 でやればいいじゃんと。 FPGA 初心者の私でも PIC16F でやっている処理をそのまま MAX10 に載せるのは、うーんと頑張ればできると思うのですが、それじゃあ面白くもなんともないので、だったら MAX10 にマイコンを組み込んでその上で処理を動かしてやろうと思ったのです。 そう言うわけで、ここ2週間、簡単な MCU の命令セットをデザインして、MCU コアを MAX10 に組み込んで、ハンドアセンブラでチョー簡単な LED チカチカプログラムを書いて、巧く動かせるかどうか実験していたのでした。

なんでわざわざ自分で MCU をデザインすることにしたかと言いますと、PIC16 をそのまま組み込むのは糞ダサいし、かといって世の中にあるオープンソースの CPU アーキテクチャは重すぎてオーバースペックで使い物にならないし、と言う理由なのです。 というか趣味なので出来合いのものを使っちゃダメでしょ。 大人の趣味は、プラモデル製作とはレベルが違うのですよ。 そこはできる限り一から自分で作らないとですよ。

とりあえずでデザインしたプログラムはこんなです。 r01、r02、でカウントして r03 の内容を IO 出力するってものです。 r03 の 0 ビットが LED に繋がれていて  r03 がカウントされると LED がチカチカするって仕組みです。 MCU の動作クロックは、24.576MHz の 4倍 の 98.304MHz で、大体2秒サイクルでチカチカしてました。 LED が1サイクル点滅するには r03 が2回カウントされないといけないです。 r03 カウンタはループ 2457600 回に1回カウントしているので、逆算すると大体1命令 2.2 クロックで動作しています。 上出来ですね。


 loop: adi   r01, #1
       cmi   r01, #24576
       adi,z r02, #1
       add,z r01, r00, r00
       cmi   r02, #100
       adi,z r03, #1
       add,z r02, r00, r00
       out   r03
       jmp   loop

思ったより簡単に MCU が作れたので、自分でもびっくりです。 ただ、これからが大変なのですよ。
これから
 (1) MCU のアーキテクチャを固める
 (2) ちゃんとした命令セットをデザインする
 (3) コンパイラも作らないとね
と言う作業が待ってます。
(1) は、普通のタイプのプロセッサでは面白くないので、イベントドリブンなアーキテクチャにしてやろうと思っています。 割り込みみたいな従来のうざい仕組みは排除しようかなとも目論んでいます。 と言うか、イベントドリブンってこと自体が割り込み処理を包括しています。 当然ですが、今時はマルチコアですよね。
(2) は、RISC ベースで、2クロックに1命令を実行できるようにしたいなと思っています。 音声の信号処理を効率よく実行できる固定小数点の DSP 命令セットも組み込もうと思っています。
(3) が一番大変なんですよね。 C# で GUI ベースの簡単な IDE もどきを作って、VHDL の ROM コードを吐き出すようにしたいなぁ。

あ、ちなみにですが、プロジェクト名「びっくりちゃん」は、AKB48 Team8 の行天優莉奈さんの愛称から頂きました。

#FPGA #MAX10 #Audio Processor #プロジェクトびっくりちゃん




2019年12月01日(日) 12.0/2.0℃

Update: 08:19:29
サイクリング
今日もサイクリングは無しでした。
03:00 に目が覚めて YouTube を観てたんですが、残念ながら 04:30 に目覚ましが鳴っても外に出る気にはなりませんでした。
いやぁ、寒いですよ。
なので、05:00 過ぎに二度寝しました。

Update: 18:52:38
プロジェクト「びっくりちゃん」
先日「FPGA にカスタムでデザインした MCU を組み込む」と書いてから、なんとなく構想が固まってきました。
やるべきことは、大きく分けて
 (1) MCU のアーキテクチャを固める
 (2) ちゃんとした命令セットをデザインする
 (3) コンパイラも作らないとね
でしたね。

(1) のMCUアーキテクチャ(最大型)は、こんな感じです。 あくまでラスボス的な最大型で(笑)、PIC のプログラムを組み込むくらいなら MCU コアを含むイベント制御ブロック1個と GPIO だけで十分です。
ちなみに、私が組み込もうとしている MCU では レジスター(REGISTERS)は、32ビット(16ビットもありかもね)で、256個あります。 ほとんどの処理はレジスターだけで事足りるので、イベント制御ブロックの中の RAM はオプションになります。 スタックとか配列処理とか必要になったら組み込みます。


(2) と (3) については、LLVM を使わせてもらうことにしました。 LLVM については、clang というと知っている人が多いと思います。 clang は、GCC の何か新げなやつと思っている人もいるかもしれないですが、ライブラリの互換性はあるものの、全く違うものと思って良いと思います。
LLVM の基本的なアイデアは、コンパイラーやその他ツール類をモジュール化して、色々と柔軟性を持たせようというものです。
構成としては、(間違っているかもしれないですが)大まかには、
 (A) 多種多様な高級言語をハード依存のない中間言語に翻訳する「フロントエンド」
 (B) 中間言語を最適化する「最適処理」
 (C) 中間言語を機械語に翻訳する「バックエンド」
 (D) 翻訳された機械語をライブラリと結合して最終的な実行形式にする「リンカー」
 (E) その他のツール
のようになっています。
前記の clang は、(A) の部分に入っていて、C、C++、Mac でお馴染みの Objective-C などをコンパイルしてくれるプログラムです。

LLVM を使わせてもらうことの最大の利点は、Eclipse 等の統合環境(IDE)があるところですね。 C言語で開発して、最適化された中間言語コードまで半自動で出力してくれます。 最高ですよね。 私がやらなくちゃいけないのは、バックエンドを書くことです。 これは大したことではないですね。
私の場合のバックエンドの処理は、中間言語コードを自分で設計した MCU の機械語に変換して、FPGA の ROM イメージ(VHDLとか)に出力することです。 上図の ROM ってところに組み込むコードですね。

それでは、その中間言語ってどなものなのかという点ですが、LLVM では LLVM Intermediate Representation(IR) というアセンブラに似た言語になります。
例として、ロータリーエンコーダーの回転方向をチェックしてボリュームを上げ下げする処理を書きますと、C言語ではこんな感じですかね。 この re_event_handler() は、例えば 10[ms] のタイマーイベントとか、GPIO ポートの pahse-A のビットが変化したというイベントとかが発生したときに イベント制御から実行されるようにします。 GPIO ポートのアドレスは、仮に 0x80000000 としておきました。


#include <stdio.h>
#include <stdlib.h>

#define  _RE_PHASEA    (0x00000001)
#define  _RE_PHASEB    (0x00000002)
unsigned int*  GPIO = (unsigned int*)0x80000000u;

volatile static unsigned int  re_oPhaseA;
volatile static unsigned int  volume = 0;

int  re_event_handler()
{
    unsigned int  v;

    // check the phase-A for the value change
    v = *GPIO & _RE_PHASEA;
    if (re_oPhaseA != v) {
        // save the current value
        re_oPhaseA = v;

        // check the phase-B at phase-A rising-up timing
        if (v) {
            // check the phase-B for the rotation direction
            if ((*GPIO & _RE_PHASEB) == _RE_PHASEB) {
                // volume up
                ++volume;
            } else {
                // volume down
                --volume;
            }
        }
    }

    return 0;
}

で、このプログラムを clang にかけて、中間言語で最適化するとこんな感じのコードが生成されます。 実際に自分で設計した MCU コードに落とす段階で もうちょっと最適化が必要ですが、ここまで自動でやってくれるのなら、あとは屁でもないですよね。

@GPIO = dso_local local_unnamed_addr global i32* inttoptr (i64 2147483648 to i32*), align 8
@re_oPhaseA = internal global i32 0, align 4
@volume = internal global i32 0, align 4

; Function Attrs: norecurse nounwind uwtable
define dso_local i32 @re_event_handler() local_unnamed_addr #0 {
  %1 = load i32*, i32** @GPIO, align 8, !tbaa !2
  %2 = load i32, i32* %1, align 4, !tbaa !6
  %3 = and i32 %2, 1
  %4 = load volatile i32, i32* @re_oPhaseA, align 4, !tbaa !6
  %5 = icmp eq i32 %4, %3
  br i1 %5, label %16, label %6

; <label>:6:                                      ; preds = %0
  store volatile i32 %3, i32* @re_oPhaseA, align 4, !tbaa !6
  %7 = icmp eq i32 %3, 0
  br i1 %7, label %16, label %8

; <label>:8:                                      ; preds = %6
  %9 = and i32 %2, 2
  %10 = icmp eq i32 %9, 0
  %11 = load volatile i32, i32* @volume, align 4, !tbaa !6
  br i1 %10, label %14, label %12

; <label>:12:                                     ; preds = %8
  %13 = add i32 %11, 1
  store volatile i32 %13, i32* @volume, align 4, !tbaa !6
  br label %16

; <label>:14:                                     ; preds = %8
  %15 = add i32 %11, -1
  store volatile i32 %15, i32* @volume, align 4, !tbaa !6
  br label %16

; <label>:16:                                     ; preds = %6, %0, %14, %12
  ret i32 0
}

なんでこれが屁でもないのかが分からないという人のために解説します。(笑)
なんかごちゃごちゃした魔法みたいな訳の分からないコードに見えますが、アセンブラがわかる人ならすぐに理解できますが、基本的に処理するべき命令は
 load
 store
 and
 icmp
 br
 label(命令じゃないけど)
しかないんですよ。 あとは全部飾りです。(笑) つまり、上記の5つの命令を組み込めば、ロータリーエンコーダーの処理ができちゃうんですよ。 屁でもないでしょ!(笑)
実際のところ、マイコンでやっている処理なんて 上記の5つくらいの命令(あと足し算と、引き算と、掛け算が欲しいかも)がごちゃごちゃ組み合わされている程度のものなのですよ。 屁でもないでしょ?(笑)

#FPGA #プロジェクトびっくりちゃん #Audio Processor




2019年12月08日(日) 10.0/0.5℃

Update: 09:15:32
サイクリング
今日もサイクリングは無しでした。
昨日は、今巷で面白いと噂の「鬼滅の刃」を Amazon Prime で見つけてしまって、26話一気観してしまいました。
毎朝どんどん寒くなっていませんかねぇ。 今朝なんか、水道の水が「冷たい」を通り越して「痛い」になってましたよ。(┳◇┳)

Update: 23:59:58
プロジェクト「びっくりちゃん」
実は、今週末は金曜日に休みをもらって、3連休でした。 金曜日は何もせずに一日だらだらして、昨日の土曜日は鬼滅の刃を一気観して、今日はプロジェクト「びっくりちゃん」のバックエンドの開発をやっていました。

プロジェクト「びっくりちゃん」のバックエンドは、
 (1) 今 PIC で動作しているプログラムを FPGA に載せた時に実行させるプログラムに書き換えて、
 (2) それを clang でコンパイルして LLVM-IR を吐かせて、
 (3) 生成されたアセンブラを Bikkurichan 用に変換できるようにするバックエンドを開発する
というなんともややこしい方法をとっています。 この方が Bikkurichan に組み込むプログラムもバックエンドも同時に開発できるし、どうしたら良いか分からなくて仕様がなかなか固まらい部分がイメージできるようになって効率が良いのですよ。
でもまだ完成までは先が長そうです。

Update: 23:59:59
FPGA のプログラミング
FPGA の開発では、Hardware Description Language (HDL) というハードウエアをプログラムみたいに記述する言語で書くのですが、代表的なのに VHDL と Verilog というのがあるんです。 歴史的には VHDL の方が古くて、仕様的にはガチガチの堅苦しい言語なのに対して、Verilog はC言語みたいにやわやわ系なんですよ。 今までは、私は VHDL を使っていたのですが、今週から Verilog に切り替えました。 そういうわけで、Bikkurichan も Verilog で開発します。
というどうでも良い宣言でした。( ̄∀ ̄)

#FPGA #プロジェクトびっくりちゃん #Audio Processor




2019年12月19日(木) 9.5/6.0℃

Update: 06:20:49
サイクリング
今日もサイクリングは無しでした。
起きたら 06:00 過ぎでした。
早起きできなくなってしまいました。
というか、早寝できなくなってしまいました。

Update: 19:06:32
プロジェクト「びっくりちゃん」
「屁でもない」って書いた割には時間かかってます。(≧Δ≦)
とりあえず、今 PIC16F で動いているファームウエアを LLVM-IR にして FPGA に組み込むアセンブラの仕様を決めているところです。
ほとんどの部分は何も考えることないんですけど、
 (1) サブルーチンコール
 (2) Phi ノード
の2点でつまづいています。

(1) については、Bikkurichan Core はスタックを持っていないしローカルメモリもレジスタにアサインされているので、従来の言語が持っているようなサブルーチンコールの機能をどうやって実現しようかと悩んでいます。
スタックを持たせようと思えばできるんですけど、そんなのなんか糞ダサいんですよね。

(2) については、アセンブラとしては概念が高級かつ抽象的なんですよね。
どの経路で分岐してきたかによって代入する値を変えるような時に使うみたいなんですが、Phi ノード命令を実行するためには実行履歴を保持しなくちゃいけないんですよ。 ループ処理の時によく出てくるんですよね。
アセンブラにするには、結局ジャンプ命令の組み合わせにするしかないんですよね。 何か他にいい方法がないのか思案中です。

他には、select 命令や switch 命令っていうのがあって、if 文とか switch-case 文で出てくるみたいなんですが、これもジャンプ命令の羅列にするしかないよなぁと思っています。

とは言っても本当に大したことなくて、演算命令や比較命令については signed と unsigned があって命令数が倍になっちゃうんですけど、今のところ組み込む予定の命令の数は 60 弱ってとこです。 命令コードは8ビットとってあって 256 命令までいけるのですが、余裕のよっちゃんですわ。
余った分は、拡張命令やマクロ命令みたいに使えるようにできたらいいなと思っています。

命令長については、32ビットの固定長にしたかったのですが、16、32、48 ビットの可変長にすることにしました。 でも、常に48ビットをフェッチするようにして、命令フェッチは1クロックで済ませます。( ̄∀+ ̄) 当然ですが、命令実行中に次の命令をフェッチしますよ。

#FPGA #プロジェクトびっくりちゃん #Audio Processor