# はじめに
RISC-V Vector Extension な Vector Unit である Ara の中身を覗てみました。
- Ara is a vector unit working as a coprocessor for the CVA6 core. It supports the RISC-V Vector Extension, version 0.10.
ブロック図
hardware/src/ara_soc.sv の中身を図示しました。
Ara は、RISC-V CPU core (arina や CVA6) とのインターフェース(acc_XXX)を持っています。
module ara import ara_pkg::*; #( // RVV Parameters parameter int unsigned NrLanes = 0, // Number of parallel vector lanes. // Support for floating-point data types parameter fpu_support_e FPUSupport = FPUSupportHalfSingleDouble, // AXI Interface parameter int unsigned AxiDataWidth = 0, parameter int unsigned AxiAddrWidth = 0, parameter type axi_ar_t = logic, parameter type axi_r_t = logic, parameter type axi_aw_t = logic, parameter type axi_w_t = logic, parameter type axi_b_t = logic, parameter type axi_req_t = logic, parameter type axi_resp_t = logic, // Dependant parameters. DO NOT CHANGE! // Ara has NrLanes + 3 processing elements: each one of the lanes, the vector load unit, the // vector store unit, the slide unit, and the mask unit. localparam int unsigned NrPEs = NrLanes + 4 ) ( // Clock and Reset input logic clk_i, input logic rst_ni, // Scan chain input logic scan_enable_i, input logic scan_data_i, output logic scan_data_o, // Interface with Ariane input accelerator_req_t acc_req_i, input logic acc_req_valid_i, output logic acc_req_ready_o, output accelerator_resp_t acc_resp_o, output logic acc_resp_valid_o, input logic acc_resp_ready_i, // AXI interface output axi_req_t axi_req_o, input axi_resp_t axi_resp_i );
SoCモデルなので、RISC-V Core と Ara は、axi_mux 経由で axi_xbar に接続しています。
axi_xbar には、
が接続しています。
テストベンチ
hardware/tb/ara_testharness.svの中で、
- ara_soc
- mock_uart
が接続されています。
入出力は、
- input clk_i
- input rst_ni
- output [63:0] exit_o
です。
トップテストベンチは、Verilator と QuestSim は、別。
- verilator 用 : hardware/tb/ara_tb_verilator.sv
- questasim 用 : hardware/tb/ara_tb.sv
Verilator用 ara_tb.cpp
hardware/tb/verilator/ara_tb.cppの中で、Verilator用のトップテストベンチを構築しています。
Ara の内部構造
Ara hardware/src/ara.svの内部構成は下記のようになっています。
左上のレイアウト図は、
論文 : A “New Ara” for Vector Computing: An Open Source Highly Efficient RISC-V V 1.0 Vector Processor Design の中の図を引用しています。この論文では、Vector Extensionの仕様が V0.5な Ara を Vector Extensionの仕様を V1.0 にした New Ara の評価のようです。
RISC-V CPU Core からの命令を ara_dispatcher で受け、対応するユニット (lane: Vector Unit, vlsu: Vector Load/Store Unit、sldu: Slide Unit、masku: Mask Unit) に処理を依頼します。タイミング制御は、ara_sequencer が行っています。
おわりに
RISC-VなGPGPUのVortexについて調べていたので、なんとなく、こんな感じで動くんですね。という感じでした。
関連ブログ: vengineer.hatenablog.com