R-Type Instrcution.
vadd.vv vd, vs2, vs1
[R-Type]
+---------------------------------------------------------------------------------------------------+
| 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 |
+-----------------------+--------------+--------------+--------+--------------+---------------------+
| funct7 | rs2 | rs1 | funct3 | rd | opcode |
+-----------------------+--------------+--------------+--------+--------------+---------------------+
[VADD]
+---------------------------------------------------------------------------------------------------+
| 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 |
+------------------+----+--------------+--------------+--------+--------------+---------------------+
| 000000 | vm | vs2 | vs1 | 000 | vd | 1010111 |
+------------------+----+--------------+--------------+--------+--------------+---------------------+
There are 8 different sizes of adder, from 8-bit to 1024-bit.
for(vSew <- 0 to 7) {
val sew = 1 << (vSew + 3)
val num = Vlen*8 / sew
when(csrSew === sew.U) {
vAddvv := Cat(Seq.tabulate(num)(n =>
(vs1Data(sew*(n+1)-1, sew*n) + vs2Data(sew*(n+1)-1, sew*n))
).reverse)
}
}