カテゴリ:PCとか( 162 )

zero-riscy の vivado ip 化が出来たので、今度は ARTY Z7 の Zynq の上で動くようにしたいと思います。
下の図のように、Zynq PS の UART を使います。なんでこんな面倒なことをするかというと、PL に作った UART からでは、MIO ポートに接続された ARTY Z7 ボード上の USB-UART を使えないためです。PMOD に USB-UART 拡張基板をつないで、PC とはプログラム用と UART 用の 2本の USB をつなぐなんてスマートじゃないですからね。まぁでも、Zynq で Arm を使わないっていうこと自体が…
f0054075_23472547.png
ブロックデザインは下みたいな感じ。この構成で DDR にアクセスできそうな気がしないでもないですが、まだ試していません。
f0054075_23501551.png
これですんなり動くと思ったのですが甘かった…
どうやら、PS の設定用のプログラムを自前で用意しないといけないらしいです。TRM を読みながら頑張ってみたけど無理でした。
で、一度 SDK で作った Hello World プロジェクトを実行後に、もう一度 Bitstream を書き込んであげる方法を試してみると動きました。
ps7_init.c を zero-riscy 上で実行すればこんな手順要らなくなるのかな?まぁ、ちょっと面倒だけど、まずはこのままでいい事にしておくか。

[PR]
by tom01h | 2018-02-17 23:59 | PCとか | Trackback | Comments(0)
zero-riscy を ARTY 用に合成すると、100MHz ターゲットで 6ns 以上の違反が出ます。まぁ、実際は動いちゃうみたいですが、対策を考えてみました。
vivado のタイミングレポートはとっても見難いのですが、どうやら aluの加算器を除算の時にも使っているのが原因の模様。multdiv で作ったオペランドが alu に入って、(加算器を共有しているために)条件分岐の判定結果を経由して SRAM まで行きます。面積削減が目的なのでしょうが、ここをワーストにするのはちょっと格好悪い気がするので、multdiv の中に加算器を持ってしまうことにしました。
結果、乗算器を通るパスがぎりぎり 4ns を切れないくらいのワーストパスに。乗算器は BNN アクセラレータ命令のついでに全面見直しをしようと思います。

[PR]
by tom01h | 2018-02-16 22:26 | PCとか | Trackback | Comments(0)
昨日の続き。
[ちょっと修正]
結局、vivado でバージョン管理が必要なファイルはちょっとだけしかありませんでした。
CPU の IP の方は、project_1/project_1.xpr と、なぜか zero-riscy-test 直下に出来た component.xml, xgui/zeroriscy_sim_top_v1_0.tcl。
チップは project_2/project_2.srcs/sources_1/bd/design_1/design_1.bd の中にブロックデザインの定義があって、
ほかには自動生成された最上位の project_2/project_2.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v と project_2/project_2.xpr だけかな?
これらのファイルを追加して、Githubを更新しました。
また、kozos を UART Lite 用に書き換えたのに合わせて、Verilator 用のダミーの uart と文字出力用のアドレスを変更しました。

[PR]
by tom01h | 2018-02-15 23:59 | PCとか | Trackback | Comments(0)
include ファイルは IsInclude にチェックを付けると良いみたいです。
$readmemh は Type=mem にしてみました。なんか Warining 出ていますが、一応コンパイルできました。
f0054075_22314406.png
で、シミュレーションしてみるとリセットの極性が間違っていたので修正しました。
f0054075_22342117.png
さらに、kozos の serial.c を UART Lite 用に変更して、アドレスマップも変更すると FPGA ボード上でも動くことが確認できました。
あとは、どのファイルをバージョン管理する必要があるか調べないといけないけど、それは明日にするか…


[PR]
by tom01h | 2018-02-14 23:29 | PCとか | Trackback | Comments(0)
zero-riscy のファイル構成が、include_dirs を指定しないと vivado がファイルのありかを見つけられないようになっているのですが、IP の場合はどうすればよいんだろうか?とりあえずこんなのを作りたいんだけど…
f0054075_00510462.png

[PR]
by tom01h | 2018-02-13 23:48 | PCとか | Trackback | Comments(0)
昔の日記 を見ると、去年の11月ころから V-scale を vivado IP 化の構想が始まっているみたいです。
その後、やっぱり V-scale は何かと問題があるので zero-riscy に乗り換えて、他にも別の事やってたりして時間がかかりましたが、やっとここまで来ました。
AXI マスター用のブリッジは、 PULP プロジェクトから core2axi を流用させてもらいました。
f0054075_21242093.png
ダミー uart の接続はかなりいい加減です。
ブリッジはライトのアドレスリクエストとデータリクエストを同じタイミングで出すので、uart との接続もそれを頼りにしたさぼったインプリになっています。
また、今のところ xbar はウェイトに対応していないので、core から xbar とブリッジを通って uart まで、一切のリタイミング無しで作っています。
しかも… このブリッジは連続リクエストは受け付けられなさそうですねぇ。
シミュレーション上では、uart のリードライトが出来ているようです。
xbar が AXI のウェイトに対応できたら vivado IP 化が始められるかな?

[PR]
by tom01h | 2018-02-07 21:56 | PCとか | Trackback | Comments(0)
やっと FPGA で動きました。
これで V-scale の到達地点まで来たかな。スラックは6ns超えですが…
f0054075_22424789.png

[PR]
by tom01h | 2018-02-05 22:45 | PCとか | Trackback | Comments(0)
いきなり kozos の Step 6 ではサンプルとしていまいちかと思ったので、Hello World も追加しました。
いい加減、FPGA にも手を付けなくては。

[PR]
by tom01h | 2018-02-02 21:23 | PCとか | Trackback | Comments(0)
zero-riscy の Windows で実行可能なシミュレータを作ったので、kozos のコンパイルも Windows 上で実行できる環境を探ってみました。
コンパイラは SiFive GNU Embedded Toolchain v20171231 をダウンロードします。
kozos は make を使うので、GnuWin の中から make をインストール。
この2つがあれば、あとは このリポジトリ を使って kozos on zero-riscy のシミュレーションができます。
実際のやり方は Github の方に書きました。
最小限の環境を探ってみましたが、実際問題、コマンドプロンプトを CLI として使い続けるのはつらいでしょうけどね。


[PR]
by tom01h | 2018-02-01 22:21 | PCとか | Trackback | Comments(0)
キャラクタベースのシミュレータですが、Verilator から呼び出す gcc を Windows 用バイナリを吐くコンパイラに変更すると、Windows で実行できる zero-riscy のシミュレータを作る事が出来ます。
以前試した方法 で簡単に出来るはずでした。まぁ、とりあえず動くバイナリはできたのですが、キー入力がなんか変。
ここで ちょっとだけ触れた方法ですが、端末のローカルエコーをなくしたり、エンターキーの入力を待たなかったりする方法が、Unix と Windows では違うんですね。
Windows 用の方法を調べると conio.h と getch() の組み合わせで出来るみたい。
が、試してみると動かない。
getch() は改行を '\r' から '\n' に変換してくれないらしく、load コマンド入力で XMODEM モードに移行する部分の判定が動いていませんでした。
UART 通信の改行は '\r' が正しいはずなので、ここは合わせて修正しておきました。

[PR]
by tom01h | 2018-01-31 21:23 | PCとか | Trackback | Comments(0)