Hardware

シリアル怪奇現象の正体見たり、「使用しているライブラリの仕様には注意」

先日、FPGAにシリアル接続すると、データが化けるという怪奇現象が発生することがわかりました。 thira2.hatenablog.com 原因が不明でオシロスコープやロジアナでみないといけない(持ってないですが)と思ったのですが、 識者の方からのコメントではボーレー…

シリアルの怪奇現象を追っている話

先日、Uartの通信がPCとFPGA間でできるようになったので、 次にFPGAにChiselのMemを置いて書き込めるか確認しようとしました。 他にもGPIO設定できるものや、スイッチの設定値を読める機能もついでに追加しました。 で、テスト用のプログラムを作って、動作…

FPGAとシリアル通信しました

先日、Chiselでシリアル通信のループバックモジュールを作成しました。 Chiselでテストしようとしたのですが、1データテストするのに1分くらいかかることがわかりました。 UARTの転送bit数は8bitなので、全部テストするのに、256分くらいかかるということで…

Chiselでシリアル送信器のテストしていたら、OutOfMemoryError: Java heap spaceが発生した話

先日、chiselでシリアル受信器を作成したので、次に送信器を作ってみました。 以下のようなループバックになるようにしてみました。 シリアル受信器で受診したデータを送信器に送る。 送信器はPCに送り返す。 chiselのテストは送受信で行うので、時間として…

Vivadoを使ってChiselで作ったシリアル受信器をFPGA上で動作確認しました

先日、Uart受信器を作ったので、試しにFPGAで動かしてみることにしました。 FPGAは、大昔に購入しずっと眠っていてホコリをかぶっていた、Digilent Zybo Zynq-7000を使ってみることにしました。 以下ボードなんですが、数万ゲートは対応できそうなので、RISC…

chiselでDMA書いてみました

chiselで色々書けるようになってきたので、負荷をかけるために次にDMAを作ることにしました。 以下のとてもシンプルなおもちゃですが、あっさりかけました。 DMAモジュール AXI4 Liteの4byte転送のみ AXI_interface/DMA.scala at master · moamoai/AXI_inter…

ChiselでbundleのWire接続に詰まった話

DMAを作成する前に、Busモジュールが複数Master/Slaveに対応できないといけないため、 Parameterでマスタ数、スレーブ数を変更できるようにしようしました。 まずは本当にシンプルに以下の仕様で作成しようとしたんです。 Master側のIFモジュールで複数マス…

続chiselでリファクタリングしてみました(for/vec/reduce)

前回、chiselでinterfaceが良い感じでにかけることがわかりました。 すると、次にレジスタモジュールを良い感じで書きたくなりました。 レジスタを複数書くには、verilogだと、generate文を使えば良いと思います。 では、chiselだと?と思い、調べました!! モ…

chiselでリファクタリングしてみました

chiselの使い方がわかってきたので、よりまともな記述ができるようにリファクタリングしてみました。 チートシートを参考にしたりしました。 chiselチートシート: GitHub - freechipsproject/chisel-cheatsheet: Chisel Cheatsheet ChiselSheet · freechipsp…

Chiselで簡単なaxi4-lite busを書いてみました

chiselのSlaveモジュールらしきものができたので、次にBUSを書いてみることにしました。 あまりにひどいbusですが、ひとまず、interfaceの切替ができて満足しました。 chiselは書きやすく、Interfaceを「<>」で簡単に接続できました。 また、「:=」でInterfa…

chiselで簡単なAXI4-Liteのレジスタを書いてみました

chiselの書き方が少しわかってきたので、次にAXI4-LiteのSlaveモジュールを書こうと思いました。 まずは、chisel intefaceの書き方を以下公式ガイドを見て学ぶことにしました。 なんと、class文でかけるだけあって、parityつけることなどが継承で簡単にでき…

高位合成に興味が出てきた話

最近、高位合成に今度は興味が出てきました。 といいますか、chiselにハマってたんですが、chiselもアルゴリズムをそのまま合成できるわけでないので、使い勝手が結局verilogと同じ気がしてきたんです。 要はあまり使いやすくないんです。 もっと使いやすい…

RISC-VのVector命令を動かしてみました

最近ベクトル演算機に興味を持っていて、調べているんですが、 Vector命令の仕様がオープンなものは、RISC-V Vector命令しかないようでした。 なので、まずは仕様が明確なRISC-VのVector命令の動かし方について、調べてみました。 まずは、通常のrisc-vtool…

x86のSIMD命令(SSE)の動かし方を調べました

最近、ベクタ命令を学ぶ気になったので、SIMD/ベクタ命令を試そうとしました。 まずは最も身近にあるIntel CPUのSIME命令であるSSEを試しに動かしてみることにしました。 SSE命令とは ストリーミングSIMD拡張命令 - Wikipedia ↑の説明で、なんとなく概要は理…

chiselで簡単な除算器を書きました

chiselの手始めに、何十年前かに書いた除算器を書こうとしました。 chisel-examplesにaluあるのに、除算器がなかったので、それならということです笑 まずは本当に単純で、小型なシフト、引き算除算器を書いてみました。 仕様は以下になります。 入力データ…

よくわからないままChiselをインストールしてみた

先日、Chiselというハードウェア 記述言語があるという噂を聞きつけたので、試しに使ってみることにしました。 まずはインストール部分を備忘録として記載していきます。 インストールとチュートリアルは以下を参照しました。 とてもわかりやすいです! https…

WindowsにQuartus 18.01をインストールして、MAX10評価ボードのLEDを光らせました

Windows開発環境を手に入れたので、せっかくなので、Intel Quartusをインストールしてみることにしました。 備忘録として、MAX10サンプル動作まで記載します。 Windows用の19.1 Liteは11/17(日)時点でまだ公開されてないようでしたので、18.1を使っています…

定量的アプローチ第6版を気づけば買ってしまいました

先日、本屋さんに一冊の大きな本が置いてあるのを見つけました。 なんだか、懐かしい感じと希望に溢れている本で気づけば手に取って買って帰りました。 (会計の時にすごく値段が高くてびっくりしました。) はい、そうです、ヘネパタ六版の翻訳版です。 中を…

DockerでVivadoを動かそうとして失敗した話

先日、Mac OS XからVivadoを使いたいと思いました。 以前Viratual boxで同じように立ち上げたことあったんですが、今回は試しにDockerを使ってみることにしました。 忘備録として記載します。 はじめにDocker for MacをDownloadしてインストール します。 参…

Visual Studio Codeを使って、Jetson nano内のフォルダを編集する

Visual Studio CodeにはExtensionでサーバ内のファイルを編集することが可能です。 今回は、Jetson nano内のフォルダを編集することを試してみました。 Remote - SSHを使用(したかった話、結局できませんでした) まずは王道?のMicrosoft純正Remote - SSHを使…

Jetsonの初期設定、USBカメラ撮影

Jetsonの初期設定をしたので、忘備録として以下メモします。 SD CardにOSを書き込み 最新VersionにUpdate 5Wモードに設定変更 リモートデスクトップ カメラ使ってみる方法 SD CardにOSを書き込み 以下URLを参考にEtcher を使ってSD CardにOSを書き込みました…

Jetson Nano開発キットとその他必要なものを衝動買いした話

先日、ふとGPUが触りたいと思い、NVIDIA Jetsonのことを知りました。 調べてみると、Raspiと同じように使え、CUDAが128器で472GFLOPとかなり高性能な小型コンピュータであることがわかり、欲しくなったんです。 で、気づけば秋葉原に探し回ってました笑 当初…

Verilogのプリプロセッサを試しに作ってみた

Verilogのプリプロセッサを試しに作ってみました。 今はifdef/else/endifくらいしか対応していないのでほぼ使えませんが、一応risc vのソースコードに適用できてました。 以下にソースコードと実行方法を示します。 ソースコード RTL_View/rtl_preprocess.py…

System verilog parserを試しに作ってみている

モジュールの入出力信号を自動抽出して、csvか何かファイルに出力できたら便利だと思ったので、試しにSystem verilogのparserを作ってみようとしました。で、以下System Verilogの言語仕様を読んでみたんですが、難しい笑 http://www.ece.uah.edu/~gaede/cpe…

RISC-Vプロセッサシミュレータ作成試行

RISC-Vについて、仕様理解を深めるために試しにプロセッサシミュレータ(RV32UI)を作ってみている。理解は進められているが、思ったより、難しく、技術を学ぶ必要があるということが結論。 妥当性確認方法 riscv-tests/isaが流れることとして確認を進めている…

Spike使ってriscv-testを試しに実行してみた

RISC-Vの命令セットが期待通り動いているか確認するために、riscv-testがある。今回は命令セットシミュレータspikeを使って、riscv-testがPassすることを確認してみる。 以下方法ではPass/Failの表示がされないため、改良が必要 GitHub - riscv/riscv-tests …

GCCでRISCVの命令セットの指定してコンパイルする方法について

GCCでRISCVの命令セットの指定してコンパイルする方法を調べたので以下に記載する。 -mabiは付けないとなぜかコンパイル失敗してしまう。 ABIはApplication Binary Interfaceの略でバイナリ版のAPIらしいがこの辺りもそのうち調べていきたい。 参考: All Abo…

RISC-V(SCR1)のRTLシミュレーションを試してみた

次に以下コンパイラインストールの続きで適当なRISC-VプロジェクトをcloneしてRTLシミュレーションを実施してみる。 今回は公式ドキュメントが特に詳しく、知名度も高いSCR1を使用してサンプル実行まで確認してみることにした。 前回: RISC-Vのコンパイライ…

RISC-Vのコンパイラインストールについて

今更ではあるがRISC-Vについて聞こえてきて、学ぶいい機会と判断したので、いろいろ使ってみることにした。まずはRISC-Vのコンパイラ(gcc)とシミュレータ(spike)をインストールしhello worldが表示されることを確認した。 環境: MacOS(10.14.2) 1. 以下でURL…