<   2017年 11月 ( 23 )   > この月の画像一覧

なんでか知らないけど C 拡張の tohost レジスタのアドレスがちょっと違ったけど、そこだけ直すと rv32uc-p-rvc もパスしました。
マシンモードのテストに戻ります。
mstatus レジスタの mpp フィールドは、ユーザかマシンに限定するなら1ビットに省略してもよいとあります。
スーパバイザを選べないようにすことで、いろいろなテストを省略して illegal がパスしました。こんなので良いのかどうかは…
さらに変更なくとも scall, shamt がパスしました。
そしてマシン何とかIDレジスタを読み出し0固定で実装すると mcsr がパス。
tselect レジスタを -1 固定読み出しで追加すると breakpoint もパスします。
その際、zero-riscy 固有機能なの?パフォーマンスレジスタがアドレスがかぶっていたので移動しました。
残りのマシンモードテストは sbreak になりました。
ユーザモードの fence.i と合わせて保留かな?
V-scale の時はユーザモードではアクセスできない CSR とか命令とかあったけど、実装しなくてもよいのかな?

[PR]
by tom01h | 2017-11-30 22:02 | Trackback | Comments(0)

Interface 1月号

Arty Z7 で PYNQ の環境が動くって話が載ってました。
他にもいろいろ Arty Z7 の情報が載っていて面白そうです。
f0054075_21304516.jpg

[PR]
by tom01h | 2017-11-29 21:34 | 本・映画など | Trackback | Comments(0)
チューリッヒ工科大学とボローニャ大学が共同で作っている zero-riscy の調査中です。
rv32ui と rv32um の isa-test を流してみます。
以下の修正をしました。
  • 実装の無い CSRegister へのアクセスは illegal instruction 例外を発生
  • fence/fence.i を NOP 命令として実装
  • mtvec レジスタを書き込み可能にして Direct Mode に対応
  • mstatus レジスタに USER モード追加 ← これ、かなり大規模
  • mcause レジスタに入れる Exception Code の修正 (ecall 時のモード)
この修正で fence.i 以外はパスするようになりました。
fence.i は自己書き換えコードの実行かな?プリフェッチャが付いていて良く分からないので、とりあえず後回しにしたいと思います。
次は rv32mi を試してみたいと思います。
ma_addr と ma_fetch はすぐにパスしました。
次の修正すると csr がパスしました。
  • misa レジスタ追加
  • mscratch レジスタ追加
続く??
そういえば、rv32uc も通るはずなのかな?

[PR]
by tom01h | 2017-11-28 23:17 | Trackback | Comments(0)

PULPino zero-riscy

V-scale のメンテが面倒で、例外とかバグがあったり、マシンモードもちゃんとできているのかよくわからないまま放置して使っていたのですが、チューリッヒ工科大学とボローニャ大学が共同で作っている zero-riscy に乗り換えると、問題が簡単に解決するのか探り始めました。
とりあえず、メモリインタフェースはDが遅れないタイプに変更した後の V-scale と似たようなプロトコルです。
まずは isa-test を流してみようと、V-scale の環境から CPU コアだけを差し替えてみました。

さすがにそのままでは流れない。
fence と fence.i は実装されていないみたいで、illegal instruction 例外でテストが始まる前に落ちちゃいます。
とりあえず NOP で良いって書いてあるので適当に追加しておきます。↓あたりで良いのかな?
// flush pipeline
pipe_flush_o = 1'b1;
次に MTVEC レジスタの扱いが isa-test との相性が悪いです。
ISA マニュアルは ROM で良いって書いてあるけど、isa-test では書き込んでいるんですよね。
こっちは ISA マニュアルで省略しても良いって書いてある機能も実装しないと、 isa-test は通らなそうです。
さらに medeleg レジスタで落ちるのですが、これは機能を実装しないならレジスタも実装するなって書いてあります。なぜここで落ちるのか?illegal csr 例外がないのかな?
Attempts to access a non-existent CSR raise an illegal instruction exception.
多分続く…

[PR]
by tom01h | 2017-11-27 23:41 | Trackback | Comments(0)

覚書

Vivado ブロックデザインを保存 ここ
RISC-V のマイクロコントローラ実装 PULPino
オープンソース合成ツール YOSYS

[PR]
by tom01h | 2017-11-25 10:30 | Trackback | Comments(0)
サイズを変えるたびに、フレームバッファ読み出しアドレスのインクリメントの大きさを更新し忘れます。
今回はソフトの方もピクセルサイズを short から int にするのを忘れていました。
両方直すと動きました。
f0054075_21301185.jpg

しかし、とにかく接触が悪い。
次はコネクタの向きを間違えないで、もっとうまくはんだ付けする。

[PR]
by tom01h | 2017-11-24 21:35 | 本・映画など | Trackback | Comments(0)
Pmod HDMI OUT を使って、FPGA プログラミング大全 の Appendix II-1-3 の Arty で MicroBlaze と MIG を使ったディスプレイ表示回路を試します。
サポートページ にあった display.tcl の vivado と clk_wiz と microblaze のバージョンを変更して無理やり実行します。
display IP は、PYNQ 用の XGA のやつを持ってきます。
そして Arty Z7 の時 と同じように RGB to DVI IP を接続します。
こんな感じになります。
f0054075_22545650.png
んで、流してみると盛大に FIFO アンダーフローしたので 1280x800 の時のやり方 で、display IP のリクエストポートを 64bit 化します。
なんか FIFO がアンダーフローもオーバーフローもしているように見えます。
とりあえずスタート地点には立てたかな?って感じです。
f0054075_22570668.jpg

[PR]
by tom01h | 2017-11-23 23:46 | 本・映画など | Trackback | Comments(0)

Pmod HDMI OUT の作り方

Pmod に HDMI コネクタをつける工作の話です。
適当に作ったら動いたって話なので、鵜呑みにはしないでくださいね。
HDMI コネクタを使っていますが、信号としては DVI 出力です。

Digilent の RGB to DVI IPを使っての出力を試しています。
解像度は 1280x800 の出力が出来ました。
FPGA 側の設計は ここ です。ポート接続は変える必要がありますが…
使っているコネクタはアマゾンで買った これ です。
このコネクタの仕様書は見つからなかったのですが、似たようなのがあったのでその通りに作ったらちゃんと動きました。
f0054075_12021546.png
DVI 出力なので、使うのはD2-0とCKのnega-posiで計8本です。Pmod 1個で接続可能です。
昨日の写真は2個分の幅がありますが、使っているPmodは1個だけです。
Pmodにつなぐ信号の他には、真ん中1行がグランド直結で、さらにオープン(OPN)とプルアップ(PU)とプルダウン(PD)が数本あります。
こいつらを固定しちゃっているせいで、DVIの出力しかできなくなっています。
プルアップ・ダウン抵抗は4.7KΩを使っていますが、多分もっと大きいほうがいいんじゃないかと思っています。
Pmod側のつなぎはRGB to DVI IPとの接続がつじつま合っていれば途中はどうでもよいでしょう。

[PR]
by tom01h | 2017-11-22 22:01 | Trackback | Comments(0)

Pmod HDMI OUT

かなり目がしょぼしょぼですが、何とか動くものが出来ました。
でも、ピンヘッダの向きを間違えたからか、ちょっと接触が悪いです。
部品はいっぱいあるし、はんだ付けのコツもちょっとだけつかめてきたので、
もう1回チャレンジしてみたいと思います。
本当は Arty 用なのですが、今は出力できる回路がないので Arty Z7 で試しています。
f0054075_23084284.jpg

[PR]
by tom01h | 2017-11-21 23:23 | Trackback | Comments(0)
V-scale に使っている FPU 乗算器の話です。
V-scale に使っている乗算器の話 にも書いた通り、整数乗算と FPU 乗算では 4サイクル目までの動作は同じです。
4サイクルで仮数部の乗算結果を求るのは、整数乗算器の説明の通りです。
そして、5サイクル目は正規化と丸めをします。ここは前回と変わりありません。
ただ、今回はちょっと高速化を狙って正規化シフタを変更しています。あまり効果ありませんでしたが…
ちなみに、実際に V-scale で使っている記述とは表現が全然違うのですが、構成も若干違うところがあります。
表現の違いは合成に過大な期待をしていない(加算器をたくさん生成しないとか)ため、構成の違いはディレイ対策の有無と思ってください。


[PR]
by tom01h | 2017-11-19 23:45 | 論理設計の話 | Trackback | Comments(0)