もくじ

V-scale というオープンソースマイコンを拾ってきて FPGA に乗せて遊んでます

_コンソール付きのシミュレータが欲しい 端末 XMODEM
乗算・除算器を改良した話 : github
FPU 拡張を追加したい話
_演算器のモデル記述 FADD FMUL FMADD FDIV FSQRT : github
_組み込み 転送 演算器

[PR]
# by tom01h | 2017-12-31 23:59 | PCとか | 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)
V-scale xbar の先のペリフェラル用マスターポートには、AHB に代えて AXI ポートを付けようと思っています。
その際、クリティカルパスになりがちだったリクエストを 1サイクル遅延させたいと思います。
AXI がノーウェイトだったらこうなるのかな?
f0054075_20512547.png
でもって、AXI の RVALID が1サイクル遅れる時がこんな感じ。
f0054075_20593847.png
最後に、リクエストすら受け付けてくれない場合。
f0054075_21021808.png


[PR]
# by tom01h | 2017-11-18 22:47 | PCとか | Trackback | Comments(0)
前回は 1024x768 出力だった Arty Z7 の HDMI out の1280x800 に挑戦していますが、なかなかうまく出来ません。→ 出来ました
まずはディスプレイの各種パラメータをいじってから流してみたら
disp_fifo がアンダーフローしてまともな表示になりません。
それならと、DDR の読出しを高速化すると fifo アンダーフローはなくなったみたいですが、
まだ表示はおかしなままです。
で、問題のありかがさっぱりわからなくなりました。
そんなわけで、解像度はそのままに、DDR の読出しだけ高速化してみたいと思います。

1280x800 を表示するために必要な転送速度は、平均で
1280x800x4x60 = 246MByte/sec

Arty Z7 の DDR の転送速度は、理論値の最速で
1050MHz x 2(DDR) x 16bit = 4.2GByte/sec

最大と平均の違いがあるからっていくらなんでもここがネックになるとは思えません。

display IP のマスタポートの転送速度は、理論値の最速で
100MHz x 32bit = 400MByte/sec

ここがネックの可能性が高いでしょう。
いろいろネットを漁ってみると、Zynq の HP ポートは 250MHz 64bit幅が理論値の最速みたい。
周波数を上げるのは大変そうだけど、バス幅なら…

ということで、64bit 幅にしたいと思います。
バスの幅を広げて、バスプロトコルも広げて、アドレスインクリメントのステップも2倍にします。
fifo を 48bit ライト、 24bit リードに変更します。書き込み側の段数はそのままで良いかな。

上手く行かない…
面倒ですが、24bit 幅の fifo を 2個インスタンスして、自力で切り替えながら使ってみると上手く行きました。
賢いはずの fifo IP をうまく使いこなせていないみたいです…

まぁ、これでいい事にして、WXGAに挑戦です。

各種パラメータは
localparam HPERIOD = 11'd1680;
localparam HFRONT = 11'd72;
localparam HWIDTH = 11'd128;
localparam HBACK = 11'd200;
localparam VPERIOD = 10'd831;
localparam VFRONT = 10'd3;
localparam VWIDTH = 10'd6;
localparam VBACK = 10'd22;

ピクセルクロックの生成は83.5MHzが欲しいので
100×41.75÷5÷10

もう一個、71Mhzの別のパラメータがあったんだけど、そっちでは動きませんでした。
f0054075_23460531.jpg


[PR]
# by tom01h | 2017-11-17 23:51 | 本・映画など | Trackback | Comments(0)
そう思って部品だけ買い集めてみました。
DVI で使うなら これくらい適当 でも動くことを期待しています。
SD の基盤は、そのまま PMOD に刺さるかと思いきや、電源とグランドが逆でした。
しかも3.3V電源では動かないようです。レギュレータっぽいICを取っ払って直結すれば動くとの情報もあります。
f0054075_21410969.jpg

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

V-scale chip 更新はじめ

Vivado が Fall Creators Update で起動しない問題は この情報 を参考に解決できました。
とりあえず、V-scale の Vivado IP 化の準備としてメモリインタフェースをAHBもどきから同期SRAMもどきに変更しました。
合成してみると、Dが遅れるために面倒になっていたメモリ周りのスラックが緩和されたおかげで、FPU のスラックがトップに躍り出ました。
FADD 用のアラインメントシフタから加算までのパスと、正規化シフトから丸めてレジスタに書き込むまでのパスです。
やっぱり FPGA ってシフタが遅いのかな?粗粒度でも細粒度でも、リコンフィギュアラブルってこんな感じですよね?
アラインメントシフタは前のサイクルがスカスカなので論理を移動すれば対策できそうです。
正規化シフトは、サブノーマル出力のための回路を工夫すればよいと思っています。
まだ動かない対策をして試しただけですが、4ns スラックくらいまで行きそうな感じです。
しかし、久々に ARTY で動かしてみたら結構はまってしまった…

[PR]
# by tom01h | 2017-11-15 00:46 | PCとか | Trackback | Comments(0)

Vivado が立ち上がらない

V-scale を修正して、憎むべき D が1サイクル遅れるプロトコルから解放してみたんだけど、
Windows Update のせいかな? 1週間前には使えていた Vivado が立ち上がらない。
何もしてないのに壊れた。
[追記 この1週間で Fall Creators Update にしていたのを忘れていました。
こんな情報出てました。]
合成結果を確かめられないけど、とりあえず AXI 化も進めるか。

[PR]
# by tom01h | 2017-11-14 00:27 | Trackback | Comments(0)

Arty ファミリ

なんかすごいの出るみたいですね。3倍ですよ。まぁ、2年も経ちゃそんなものですかね。

f0054075_18212699.png

[PR]
# by tom01h | 2017-11-13 22:03 | Trackback | Comments(0)
今回はサブノーマル数に対応します。回路化は全く考えていない構成ですが、機能的にはすべてが実装されます。
サブノーマル数は指数フィールドが0で示され、その値は↓です。
((-1)^F[31]) * (0.F[22:0]) * (2^(1-127)) ^はべき乗です
つまり、サブノーマル入力を考慮した指数は
expx = (x[30:23]==8'h00) ? 8'h01 : x[30:23];
で表され、仮数は
fracx = {(x[30:23]!=8'h00),x[22:0]};
で表されます。
また、正規化数しか入力されない場合は、正規化シフトはシフトなしか1ビットの右シフトの2通りから選ぶだけでした。
サブノーマル数が入力された場合は左シフトも必要になります。この先どうせ立派なのが必要になるので、63ビットまでのシフト量に対応した正規化シフタを追加します。
ちなみにこの正規化シフタは、サブノーマル数を出力可能とするために正規化後の指数が1となるところで止まります。
あと、今は必要ないですが、仮数が負の数にも対応しています。
また、サブノーマル数の出力にはこれだけじゃ足りなくて、正規化前の指数が負になっちゃった場合は仮数を大きく右シフトして、その分を指数に足してあげます。
そして、正規化シフタで指数が1となるところまで戻してあげると、サブノーマル数が出力できます。
具体的な実装は Github を確認してください。

[PR]
# by tom01h | 2017-11-12 12:43 | 論理設計の話 | Trackback | Comments(0)