SystemVerilogで記述されたRISC-VプロセッサArianeについて解析を進めている。回路面積が大きいという話で、実際にどれくらいのサイズなのか見てみることにした。
上記を使用している。FPGAの合成には、リポジトリをダウンロードした上でmake fpga
としてVivadoを実行する。
ちなみに、Genesys2のボードパッケージを持っていなかったので以下のように構成を若干変更して合成した。
diff --git a/Makefile b/Makefile index f83eaff..cc46c6d 100644 --- a/Makefile +++ b/Makefile @@ -503,7 +503,8 @@ fpga: $(ariane_pkg) $(util) $(src) $(fpga_src) $(uart_src) @echo read_verilog -sv {$(filter-out $(fpga_filter), $(src))} >> fpga/scripts/add_sources.tcl @echo read_verilog -sv {$(fpga_src)} >> fpga/scripts/add_sources.tcl @echo "[FPGA] Generate Bitstream" - cd fpga && make BOARD="genesys2" XILINX_PART="xc7k325tffg900-2" XILINX_BOARD="digilentinc.com:genesys2:part0:1.1" CLK_PERIOD_NS="20" + cd fpga && make CLK_PERIOD_NS="20" +# cd fpga && make BOARD="genesys2" XILINX_PART="xc7k325tffg900-2" XILINX_BOARD="digilentinc.com:genesys2:part0:1.1" CLK_PERIOD_NS="20" .PHONY: fpga @@ -522,4 +523,3 @@ clean: check-benchmarks check-asm-tests \ torture-gen torture-itest torture-rtest \ run-torture run-torture-verilator check-torture check-torture-verilator - diff --git a/fpga/sourceme.sh b/fpga/sourceme.sh index 5a6d156..26faf96 100644 --- a/fpga/sourceme.sh +++ b/fpga/sourceme.sh @@ -9,6 +9,7 @@ if [ "$BOARD" = "genesys2" ]; then echo -n "Configuring for " echo "Genesys II" export XILINX_PART="xc7k325tffg900-2" - export XILINX_BOARD="digilentinc.com:genesys2:part0:1.1" + export XILINX_BOARD="xilinx.com:kc705:part0:1.4" + # "digilentinc.com:genesys2:part0:1.1" export CLK_PERIOD_NS="20" fi
合成が終了すると以下のようなレポートが出力された(一部下位の階層は省略している)。
やはり一番大きいのはコアだが、DDRコントローラなども結構大きい。コアの中で最も大きいのは演算器のようだ(ex_stage_i
)。
ArianeはFPUを載せているのか。それでここまで大きくなっているのかな。
+------------------------------------+---------------------------+------------+------------+---------+------+-------+--------+--------+--------------+ | Instances | Modules | Total LUTs | Logic LUTs | LUTRAMs | SRLs | FFs | RAMB36 | RAMB18 | DSP48 Blocks | +------------------------------------+---------------------------+------------+------------+---------+------+-------+--------+--------+--------------+ | ariane_xilinx | (top) | 63150 | 61558 | 1224 | 368 | 48346 | 49 | 2 | 27 | | (ariane_xilinx) | (top) | 5 | 5 | 0 | 0 | 1 | 0 | 0 | 0 | | i_ariane | ariane | 37633 | 37633 | 0 | 0 | 23263 | 36 | 0 | 27 | | (i_ariane) | ariane | 103 | 103 | 0 | 0 | 0 | 0 | 0 | 0 | | csr_regfile_i | csr_regfile | 298 | 298 | 0 | 0 | 1136 | 0 | 0 | 0 | | ex_stage_i | ex_stage | 14886 | 14886 | 0 | 0 | 7069 | 0 | 0 | 27 | | i_cache_subsystem | wt_cache_subsystem | 6136 | 6136 | 0 | 0 | 2510 | 36 | 0 | 0 | | i_frontend | frontend | 2684 | 2684 | 0 | 0 | 3614 | 0 | 0 | 0 | | i_perf_counters | perf_counters | 283 | 283 | 0 | 0 | 896 | 0 | 0 | 0 | | id_stage_i | id_stage | 494 | 494 | 0 | 0 | 290 | 0 | 0 | 0 | | issue_stage_i | issue_stage | 12752 | 12752 | 0 | 0 | 7748 | 0 | 0 | 0 | | i_ariane_peripherals | ariane_peripherals | 3801 | 3690 | 104 | 7 | 4663 | 10 | 2 | 0 | | i_axi2rom | axi2mem | 68 | 68 | 0 | 0 | 36 | 0 | 0 | 0 | | i_axi_riscv_atomics | axi_riscv_atomics_wrap | 1765 | 1765 | 0 | 0 | 888 | 0 | 0 | 0 | | i_axi_xbar | axi_node_wrap_with_slices | 7364 | 7364 | 0 | 0 | 8636 | 0 | 0 | 0 | | i_bootrom | bootrom | 65 | 65 | 0 | 0 | 9 | 2 | 0 | 0 | | i_clint | clint | 180 | 180 | 0 | 0 | 152 | 0 | 0 | 0 | | i_ddr | xlnx_mig_7_ddr3 | 10560 | 9283 | 916 | 361 | 8548 | 1 | 0 | 0 | | i_dm_axi2mem | axi2mem_0 | 350 | 350 | 0 | 0 | 41 | 0 | 0 | 0 | | i_dm_axi_master | axi_adapter | 54 | 54 | 0 | 0 | 69 | 0 | 0 | 0 | | i_dm_top | dm_top | 562 | 562 | 0 | 0 | 675 | 0 | 0 | 0 | | i_dmi_jtag | dmi_jtag | 327 | 327 | 0 | 0 | 339 | 0 | 0 | 0 | | i_fan_ctrl | fan_ctrl | 20 | 20 | 0 | 0 | 24 | 0 | 0 | 0 | | i_rstgen_main | rstgen | 1 | 1 | 0 | 0 | 4 | 0 | 0 | 0 | | i_xlnx_axi_clock_converter_ddr | xlnx_axi_clock_converter | 398 | 194 | 204 | 0 | 998 | 0 | 0 | 0 | | i_xlnx_clk_gen | xlnx_clk_gen | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +------------------------------------+---------------------------+------------+------------+---------+------+-------+--------+--------+--------------+