タグ:V-scale ( 37 ) タグの人気記事

もくじ

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

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

[PR]
by tom01h | 2017-12-31 23:59 | PCとか | Trackback | Comments(0)
コンパイル後にいろいろと変更するのは格好悪いので…
--- a/bsp/env/freedom-e300-hifive1/link.lds
+++ b/bsp/env/freedom-e300-hifive1/link.lds
@@ -4,6 +4,7 @@ ENTRY( _start )
MEMORY
{
+ spi (rxai!w) : ORIGIN = 0x00400000, LENGTH = 512M
flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M
ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K
}
@@ -22,7 +23,7 @@ SECTIONS
.init :
{
KEEP (*(SORT_NONE(.init)))
- } >flash AT>flash :flash
+ } >flash AT>spi :flash
以下同様に AT> を変更。最後の1行を取っ払うのはこうかっ。
--- a/bsp/env/common.mk
+++ b/bsp/env/common.mk
@@ -25,11 +25,12 @@ INCLUDES += -I$(PLATFORM_DIR)
TOOL_DIR = $(BSP_BASE)/../toolchain/bin
-CC := $(TOOL_DIR)/riscv32-unknown-elf-gcc
-AR := $(TOOL_DIR)/riscv32-unknown-elf-ar
+CC := riscv32-unknown-elf-gcc
+AR := riscv32-unknown-elf-ar
LDFLAGS += -T $(LINKER_SCRIPT) -nostartfiles
LDFLAGS += -L$(ENV_DIR)
+LDFLAGS += -e 0 ← これ


[PR]
by tom01h | 2017-04-11 00:13 | PCとか | Trackback | Comments(0)
ソフトは論理のリポジトリには含まれてないんじゃないかと疑い始めました。ソフト用のリポジトリ が別にあるようです。
git clone --recursive https://github.com/sifive/freedom-e-sdk.git
またしても gnu-tools を取りに行くので途中で止めます。自前のコンパイラを使わないで済ますためのオマジナイ。
--- a/bsp/env/common.mk
+++ b/bsp/env/common.mk
@@ -25,8 +25,8 @@ INCLUDES += -I$(PLATFORM_DIR)
TOOL_DIR = $(BSP_BASE)/../toolchain/bin
-CC := $(TOOL_DIR)/riscv32-unknown-elf-gcc
-AR := $(TOOL_DIR)/riscv32-unknown-elf-ar
+CC := riscv32-unknown-elf-gcc
+AR := riscv32-unknown-elf-ar
V-scale 用に作ったコンパイラは rv32im なので、a 拡張付きで作り直します。
./configure --prefix=/opt/riscv --with-arch=rv32ima --with-abi=ilp32
sudo make
a を付けるだけなら vscale-chip と共存できると信じてます。
make して software/demo_gpio に移って Intel Hex に変換します。
make software PROGRAM=demo_gpio BOARD=freedom-e300-arty
cd software/demo_gpio
riscv32-unknown-elf-objcopy -O ihex demo_gpio demo_gpio.ihex
これを mcs ファイルの後ろにくっつけるのですが、”:00000001FF” はファイル終了マークなので削除してから連結します。で書き込んでみると… 動かん。ちょっと変更してみると動きました。00400000 が QSPI のローカルアドレスで、 20400000 がシステムから見たアドレスになるのだと思います。最後の1行は必要なさそうなので取っちゃいました。
1c1
< :020000040040BA
---
> :0200000420409A
4098c4098
< :020000040041B9
---
> :02000004204199
5834a5835
> :040000052040000097
[追記 この手変更は 明日の記事 で解決します]
ビルド済みの mcs とは、少しだけ動きが違うようです。
f0054075_22025507.png
同じ要領で dhrystone を試してみたのですが、残念ながら、キー入力を待たないようです。で、デフォルトのループ回数は大きすぎるようなので変更しました。
--- a/software/dhrystone/dhry_stubs.c
+++ b/software/dhrystone/dhry_stubs.c
@@ -11,5 +11,6 @@ long time(void)
// set the number of dhrystone iterations
void __wrap_scanf(const char* fmt, int* n)
{
- *n = 100000000;
+//*n = 100000000;
+ *n = 100000;
}
流してみると…
Dhrystone Benchmark, Version 2.1 (Language: C)
Program compiled without 'register' attribute
Please give the number of runs through the benchmark: ← ここで入力を待ってくれない
Execution starts, 100000 runs through Dhrystone
Execution ends
Final values of the variables used in the benchmark:

Microseconds for one run through Dhrystone: 40.0
Dhrystones per Second: 25000.0

Progam has exited with code:0x00000000
[追記
ちなみにビルド済みの mcs を編集して自前プログラムを走らすには、ビルド済みの mcs から プログラム部分を削除する必要があります。

まずは、mcs (Intel HEX フォーマット) ファイルの解析。
mcs は巨大すぎるので、データの行を取っ払って見通しをよくします。

grep -v ":10" freedom-e310-arty-1-0-2.mcs | less

:020(正確には:02000004)で始まるのがベースアドレスを指定する行

で、:020000040040BA 以降がプログラム部分で、それ以前が回路部分です。
プログラム部分を自前のプログラムと差し替えます。

ちなみにこれはブートアドレスが20400000の場合で、QSPIのベースアドレスを引いたアドレスが00400000で、この指定が:020000040040BAです。]

[PR]
by tom01h | 2017-04-10 00:47 | PCとか | Trackback | Comments(0)
WSL が新しくなっているかもしれないので、chisel のテストも兼ねて Freedom E310 を作ってみます。
Arty 用の E310 のマニュアルは ここ。論理は GitHub
sudo apt install default-jre
sudo apt install default-jdk

git clone https://github.com/sifive/freedom
cd freedom/
git submodule update --init --recursive ← 途中(riscv-tools)で止めたけど
make -f Makefile.e300artydevkit verilog
おや?Verilog 出てるぞ。WSL の問題、修正されたのかな?
調子に乗って FPGA 用のビルドも試してみます。Vivado は Windows 用を使うので、~/bin/vivado のシェルスクリプトを作ってみました。
cmd.exe /C C:\\Xilinx\\Vivado\\2016.4\\bin\\vivado.bat $*
環境変数がないって怒られました。ちょっと強引ですが、vivado に
cmd.exe /C C:\\Users\\tom01\\bin\\vivado.bat $*
vivado.bat に
set VSRC_TOP=c:\Users\tom01\RISC-V\freedom\builds\e300artydevkit\sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitConfig.v
set EXTRA_VSRCS=C:\Users\tom01\RISC-V\freedom\rocket-chip\vsrc\AsyncResetReg.v c:\Users\tom01\RISC-V\freedom\rocket-chip\vsrc\DebugTransportModuleJtag.v c:\Users\tom01\RISC-V\freedom\sifive-blocks\vsrc\SRLatch.v
call C:\Xilinx\Vivado\2016.4\bin\vivado.bat %*
で、ビルドが出来たみたいです。
つぎに Arty で流してみます。参考にしたのはいつもお世話になっている ここ。動きませんよ。仕方がないので、SiFive の ビルド済みファイル で試してみるとちゃんと動きました。差分を確認してみたところ、ほかにも細かな違いはありますが、大きくは ”:020000040040BA” 以降のデータが自作の方にはごっそり無いみたいです。たぶん論理はちゃんとできたけど、プログラムがないのだと思います。強引ですが、ここら辺の足りない分をコピーしてリトライするとちゃんと動きました。git submodule update を途中で止めちゃったのがいけないのでしょうね。だってとっても時間がかかるんですよ。

[PR]
by tom01h | 2017-04-09 21:33 | PCとか | Trackback | Comments(0)

Vostro にも RISC-V

Creators Update に合わせて、主力のデスクトップにも RISC-V 環境を構築中です。ついでに、Vivado も ModelSim も最新にしようかと思います。
で、ひとつ大事なことに気付きました。巨大な波形ファイルを作ると、ウイルス監視ソフトが頑張り過ぎちゃうみたいです。Verilator を使って vscale-chip をシミュレーションすると、一気に数百メガのファイルを吐き出します。それが原因か定かではないのですが、シミュレーションが終わってからプロンプトが出るまでにとっても時間がかかる。Inspiron でやっていたときは、Defender が勝手に止まっていたみたいです。Defender には監視除外の指定ができるみたいなので、フォルダごと監視から除外の指定をしちゃいました。
それにしても、やっぱり速いPCは良いなぁ。

[PR]
by tom01h | 2017-04-08 14:35 | PCとか | Trackback | Comments(0)
IEEE754 を読み直してみたら、”指数は限界なしで仮数を丸めた結果が最小値より小さい”みたいな感じなので、SoftFloatが合っているのかな? Subnormal に丸めるための丸め位置と、Tininess 検出のための丸め位置は違うってこと? Subnormal を生成するための丸めは 2段階丸めじゃなくて良いんだよね? 不安になってくるなぁ。とりあえず、手を入れていない TestFloat が Pass したから良い事にするか。

[PR]
by tom01h | 2017-02-16 22:49 | PCとか | Trackback | Comments(0)
V-scale chip シミュレータを更新しました。
  • 命令トレース出力機能を追加
  • 端末機能のローカルエコーをなくす
昨日は、XMODEM 追加だけで手いっぱいだったので…

[PR]
by tom01h | 2017-02-09 00:20 | PCとか | Trackback | Comments(0)
結構放置気味だった、V-scale chip シミュレータに XMODEM 機能を追加しました。
だらだらとしたテストベンチになっちゃいましたが、動けば良いんです。CAN には対応していませんが、CAN なんて来るわけ無いんで良いんです。
kzload は XMODEM の実装で待ち時間を作るために空のループをすごくたくさん回しています。こんなのが有るとシミュレーションがとても終わりません。うまく解決する方法が思いつかないので、#if 使ってループ回数切り替えてます。とっても格好悪いです。Makefile もかなり格好悪いです。もう、動けば何でもいいや状態です。
とりあえず検証環境が完成したので、V-scale と AHB X-bar の役割分担をちゃんと直して、無駄な命令フェッチのストールも無くしたいと思います。
こんな感じで動くのですが、エコーバックが1文字ずつにならないのが謎です。
[追記 getc は改行があるまでバッファするようです。ここに書いてました。ここには解決法も書いてあって、ローカルエコーも改行待ちも無しにするおまじないがありました。真似しました。]
~/RISC-V/vscale-chip/src/main/c/bootload$ make
[省略]
~/RISC-V/vscale-chip/src/main/c/os$ make
[省略]
~/RISC-V/vscale-chip$
make verilator-sim
[省略]
~/RISC-V/vscale-chip$ make verilator-board-test
cp src/main/c/bootload/kzload.ihex loadmem.ihex
cp src/main/c/os/kozos xmodem.dat
touch ram.data3 ram.data2 ram.data1 ram.data0
sim/Vvscale_verilator_top +max-cycles=180000 --vcdfile=tmp.vcd
Running ...
kzload (kozos boot loader) started.
kzload> load

XMODEM receive succeeded.
kzload> run
starting from entry point: 1900
Hello World!
> echo aaa
aaa
> q
rm ram.data3 ram.data2 ram.data1 ram.data0

[PR]
by tom01h | 2017-02-08 01:29 | PCとか | Trackback | Comments(0)

トレースログ

う~~ん。spike にはいつからか命令トレースを出力するオプションが付いていたみたい。そんな訳で、開発環境の話を修正しておきました。ついでに、V-scale のシミュレータにも命令トレース出力を追加しました。さらなるついでに、FPU 転送命令のバイパスも追加しました。トレース出ると、バイパス無いの気になっちゃいますので…

[PR]
by tom01h | 2017-02-01 00:29 | PCとか | Trackback | Comments(0)
FMADD の動作モデルも作ってみます。アラインは乗算結果の時は幅を広げて、加数の時はシフト量を増やします。ノーマライズは幅を広げる必要はないですが、シフト量は増やします。ここまで出来ると、大雑把に必要な資源の見積もりができます。まぁ、最初に予想していたのとそれほど違いなく出来そうです。また、残りの命令はチョイ変で済みそうなので、これで回路を意識した記述に手を付けられます。
testfloat だと、mulAdd の検証はかなりたくさんのパタンを必要とするようで、-level 2 を指定するといつ終わるんだろう?って感じです。Verilator は結構速いみたいで testfloat で入力データと期待値生成しながら走らせているのですが、CPU 使用率の比較はこんな感じになっています。
f0054075_13082097.png

[PR]
by tom01h | 2017-01-30 00:19 | PCとか | Trackback | Comments(0)