FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

2016-08-01から1ヶ月間の記事一覧

「シェルプログラミング 実用テクニック」を購入

Twitterでちょくちょく流れてくる、「シェルプログラミング 実用テクニック」を本屋で見付けたので買ってみた。 シェルプログラミング実用テクニック (Software Design plus)作者: 上田隆一,USP研究所出版社/メーカー: 技術評論社発売日: 2015/05/15メディア…

Zynq ZedBoardを使ってPSとPLの協調プログラミング入門(4)

ここからは、ARM上のプログラムの開発に入る。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com 使用ツール : Vivado 2016.2 使用OS : Windows 10 ARM上で動作するプログラムを書いてCustom IPを制御する [File]→[New Project]をクリックする。 プログ…

Zynq ZedBoardを使ってPSとPLの協調プログラミング入門(3)

前回まででIPの生成が完了したので、Wrapperを作成してbitstreamの合成の準備に入る。 使用ツール : Vivado 2016.2 使用OS : Windows 10 FPGA用のBitstreamを作成する msyksphinz.hatenablog.com msyksphinz.hatenablog.com Sourceペインで[design_1]を右ク…

Zynq ZedBoardを使ってPSとPLの協調プログラミング入門(2)

前回までで、ZedBoard用のハードウェアの基盤が出来上がったので、今度はPLロジック部に追加するハードウェアを作り、IPとして追加していこう。 msyksphinz.hatenablog.com 使用ツール : Vivado 2016.2 使用OS : Windows 10 VivadoでIPを新規作成する 前回ま…

Zynq ZedBoardを使ってPSとPLの協調プログラミング入門(1)

ZedBoardはずっと持っていたのだが、Linuxを単体で立ち上げたりなど、これまであまりPL側の回路を活用することが無かった。 ところが最近、PL側の回路設計も行う機会が増えたため、勉強のためにも、Zynq ZedBoardとVivadoを使って、どのようにPS+PLの協調設…

Windows PowerShellをLinuxで試す

だいぶ前になったが、Windows PowerShellがオープンソース化され、Linux上でも利用できるようになった。 jp.techcrunch.com かくいう僕はPowerShellなど一度も使ったことがなく、Windows のコマンドプロンプトとの違いも分からない。 コマンドプロンプトは使…

CPUのリネーミングを支えるユニット、フリーリスト

CPU

CPUのレジスタリネーミングでは、フリーリストと呼ばれる、空いているレジスタ番号を管理するためのFIFOキューが存在する。 フリーリストには、現在使用されていない物理レジスタ番号が格納されており、命令がデコードされ、レジスタ書き込みが必要な命令で…

ISSとRTLを比較するためのフレームワークの実装

CPU

CPU設計を行うにあたり、検証に必要なフレームワークを構築する。 RTLで記述されたCPUは、シミュレーション中にログを出力し、同じプログラムをISSでも実行する。 この2つのログを比較して、正しくRTLが動作しているかを検証する訳だが、この場合に何をどの…

リネームIDをISSでモデル化する

CPU

レジスタリネーミングでは、アーキテクチャレジスタと物理レジスタを接続するための仕組みだ。 レジスタに書き込みを行う命令が実行されると、アーキテクチャレジスタのIDはリネーミングレジスタのレジスタIDに置き換われる。 このレジスタリネーミングの仕…

AXIと接続するLSUの実装方法検討(1)

CPU

LSUとはLoad Store Unit(たぶん)のことで、メモリアクセスに関わるすべての操作を担当するユニットだ。最もシンプルなものであれば、キャッシュに対するロードストアが出来れば良い。 CPUのパイプラインからの要求に応じて、外部バスを操作してメモリにデー…

CPU開発に必須な検証手法の話

CPU

CPU開発をしていると、自分の設計したCPUが正しく動作しているかを検証する必要が必ず生じる。 プログラムを流して動作させているときに、そのプログラムが正しく動作したかを確かめるためには、いくつかの方法がある。 一つ目はプログラム自体に検証能力を…

AXIバスリクエスト中に命令フラッシュが入った場合を考慮した命令Fetcherの実装(2)

AXI

実際に実装したハードウェアをシミュレーションしてみる。 現状はまだ公開できる段階には無いので、とりあえず波形のみ貼り付ける。 まず、このIFUでは128bit x 4burstの命令フェッチリクエストを出している。 この際、MARリクエストバッファを4エントリ分消…

AXIバスリクエスト中に命令フラッシュが入った場合を考慮した命令Fetcherの実装(1)

CPU

msyksphinz.hatenablog.com この話の続き。RISC-V対応のCPUの実装にあたり、足回りのAXIをどのように実装するか。 今のところ1次キャッシュは備えていないので(いずれは追加しないといけないが)、足回りのAXIは、 命令アドレスリクエスト用チャネル (IF_MAR)…

コマンドラインでファイルの相対パスを絶対パスに変換するためには

コマンドラインでファイルの相対パスを絶対パスに変換する処理は、結構必要だった。 Emacsでファイルを開くのに、別の場所で開いていたら絶対パスで記述しないとダメだし、いくつかのファイルを参照するのに、相対パスを簡単に絶対パスにしておきたい。 これ…

AXIのアービタを設計するための考察

AXI

回路設計をするにあたり、バスの回りはAXIを利用している。CPUの回りにはいくつかのAXIのバスが出ているのだが、それらをうまくコントロールするためにはどのようにすれば良いのだろうか。 バスにおける基本は、以下の2つだと考えられる。 アービタ : 2つの…

AXIのバスリクエスト中に取消をしたい場合にどうすれば良いのか

AXI

例えばの話、CPUでフェッチリクエストを出したとして、その間にフラッシュ信号を受信してしまい、それまでのフェッチを無かったことにしたい。 そんなときはどうすれば良いのか。基本的にAXIにリードリクエストを出してしまうとそれを止めることは出来ない(…

RISC-V版xv6における割り込み処理の実装

xv6

xv6の割り込み処理の実装は基本的にx86用に記述されているため、それを他のアーキテクチャに移植するのはなかなか骨が折れる。 RISC-Vのアーキテクチャでは割り込み処理は下記のPrivileged Architecture Manualに従っており、0x100番台のアドレスもしくは、H…

最初のプロセスを起動させるための試行錯誤

xv6

RISC-Vにてxv6を起動させるための続き。トラップフレームと、コンテキストの内容を書き換えることによってまずはswitch()によりforkretが呼ばれるようになるところまで来た。 github.com 最初のプロセスが呼ばれる仕組み まずはuserinit()により最初のプロセ…

Vagrant上のLinuxでTensorBoardを起動する

これまでTensorFlowを使ったことはあっても、TensorBoardを使ったことはなかった。なぜならば、僕の環境は基本的にVagrant上で動作しており、CUIがベースとなっている。 TensorBoardを使うためにはXをフォワードする必要があり、面倒だなと思って使っていな…