2016-08-01から1ヶ月間の記事一覧
Twitterでちょくちょく流れてくる、「シェルプログラミング 実用テクニック」を本屋で見付けたので買ってみた。 シェルプログラミング実用テクニック (Software Design plus)作者: 上田隆一,USP研究所出版社/メーカー: 技術評論社発売日: 2015/05/15メディア…
ここからは、ARM上のプログラムの開発に入る。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com 使用ツール : Vivado 2016.2 使用OS : Windows 10 ARM上で動作するプログラムを書いてCustom IPを制御する [File]→[New Project]をクリックする。 プログ…
前回まででIPの生成が完了したので、Wrapperを作成してbitstreamの合成の準備に入る。 使用ツール : Vivado 2016.2 使用OS : Windows 10 FPGA用のBitstreamを作成する msyksphinz.hatenablog.com msyksphinz.hatenablog.com Sourceペインで[design_1]を右ク…
前回までで、ZedBoard用のハードウェアの基盤が出来上がったので、今度はPLロジック部に追加するハードウェアを作り、IPとして追加していこう。 msyksphinz.hatenablog.com 使用ツール : Vivado 2016.2 使用OS : Windows 10 VivadoでIPを新規作成する 前回ま…
ZedBoardはずっと持っていたのだが、Linuxを単体で立ち上げたりなど、これまであまりPL側の回路を活用することが無かった。 ところが最近、PL側の回路設計も行う機会が増えたため、勉強のためにも、Zynq ZedBoardとVivadoを使って、どのようにPS+PLの協調設…
だいぶ前になったが、Windows PowerShellがオープンソース化され、Linux上でも利用できるようになった。 jp.techcrunch.com かくいう僕はPowerShellなど一度も使ったことがなく、Windows のコマンドプロンプトとの違いも分からない。 コマンドプロンプトは使…
CPUのレジスタリネーミングでは、フリーリストと呼ばれる、空いているレジスタ番号を管理するためのFIFOキューが存在する。 フリーリストには、現在使用されていない物理レジスタ番号が格納されており、命令がデコードされ、レジスタ書き込みが必要な命令で…
CPU設計を行うにあたり、検証に必要なフレームワークを構築する。 RTLで記述されたCPUは、シミュレーション中にログを出力し、同じプログラムをISSでも実行する。 この2つのログを比較して、正しくRTLが動作しているかを検証する訳だが、この場合に何をどの…
レジスタリネーミングでは、アーキテクチャレジスタと物理レジスタを接続するための仕組みだ。 レジスタに書き込みを行う命令が実行されると、アーキテクチャレジスタのIDはリネーミングレジスタのレジスタIDに置き換われる。 このレジスタリネーミングの仕…
LSUとはLoad Store Unit(たぶん)のことで、メモリアクセスに関わるすべての操作を担当するユニットだ。最もシンプルなものであれば、キャッシュに対するロードストアが出来れば良い。 CPUのパイプラインからの要求に応じて、外部バスを操作してメモリにデー…
CPU開発をしていると、自分の設計したCPUが正しく動作しているかを検証する必要が必ず生じる。 プログラムを流して動作させているときに、そのプログラムが正しく動作したかを確かめるためには、いくつかの方法がある。 一つ目はプログラム自体に検証能力を…
実際に実装したハードウェアをシミュレーションしてみる。 現状はまだ公開できる段階には無いので、とりあえず波形のみ貼り付ける。 まず、このIFUでは128bit x 4burstの命令フェッチリクエストを出している。 この際、MARリクエストバッファを4エントリ分消…
msyksphinz.hatenablog.com この話の続き。RISC-V対応のCPUの実装にあたり、足回りのAXIをどのように実装するか。 今のところ1次キャッシュは備えていないので(いずれは追加しないといけないが)、足回りのAXIは、 命令アドレスリクエスト用チャネル (IF_MAR)…
コマンドラインでファイルの相対パスを絶対パスに変換する処理は、結構必要だった。 Emacsでファイルを開くのに、別の場所で開いていたら絶対パスで記述しないとダメだし、いくつかのファイルを参照するのに、相対パスを簡単に絶対パスにしておきたい。 これ…
回路設計をするにあたり、バスの回りはAXIを利用している。CPUの回りにはいくつかのAXIのバスが出ているのだが、それらをうまくコントロールするためにはどのようにすれば良いのだろうか。 バスにおける基本は、以下の2つだと考えられる。 アービタ : 2つの…
例えばの話、CPUでフェッチリクエストを出したとして、その間にフラッシュ信号を受信してしまい、それまでのフェッチを無かったことにしたい。 そんなときはどうすれば良いのか。基本的にAXIにリードリクエストを出してしまうとそれを止めることは出来ない(…
xv6の割り込み処理の実装は基本的にx86用に記述されているため、それを他のアーキテクチャに移植するのはなかなか骨が折れる。 RISC-Vのアーキテクチャでは割り込み処理は下記のPrivileged Architecture Manualに従っており、0x100番台のアドレスもしくは、H…
RISC-Vにてxv6を起動させるための続き。トラップフレームと、コンテキストの内容を書き換えることによってまずはswitch()によりforkretが呼ばれるようになるところまで来た。 github.com 最初のプロセスが呼ばれる仕組み まずはuserinit()により最初のプロセ…
これまでTensorFlowを使ったことはあっても、TensorBoardを使ったことはなかった。なぜならば、僕の環境は基本的にVagrant上で動作しており、CUIがベースとなっている。 TensorBoardを使うためにはXをフォワードする必要があり、面倒だなと思って使っていな…