254 lines
7.5 KiB
Plaintext
254 lines
7.5 KiB
Plaintext
|
|
.definition
|
|
|
|
|
|
|
|
# invalid rs2=0
|
|
c.add0 = [1001.....1....10]
|
|
c.add1 = [1001......1...10]
|
|
c.add2 = [1001.......1..10]
|
|
c.add3 = [1001........1.10]
|
|
c.add4 = [1001.........110]
|
|
|
|
# invalid rs2=0
|
|
c.mv0 = [1000.....1....10]
|
|
c.mv1 = [1000......1...10]
|
|
c.mv2 = [1000.......1..10]
|
|
c.mv3 = [1000........1.10]
|
|
c.mv4 = [1000.........110]
|
|
|
|
|
|
# invalid if rs1=0
|
|
c.jalr0 = [10011....0000010]
|
|
c.jalr1 = [1001.1...0000010]
|
|
c.jalr2 = [1001..1..0000010]
|
|
c.jalr3 = [1001...1.0000010]
|
|
c.jalr4 = [1001....10000010]
|
|
|
|
c.addi = [000...........01]
|
|
|
|
# invalid imm=0
|
|
c.addi16sp0 = [011100010.....01]
|
|
c.addi16sp1 = [011.000101....01]
|
|
c.addi16sp2 = [011.00010.1...01]
|
|
c.addi16sp3 = [011.00010..1..01]
|
|
c.addi16sp4 = [011.00010...1.01]
|
|
c.addi16sp5 = [011.00010....101]
|
|
|
|
# invalid uimm=0
|
|
c.addi4spn0 = [0001..........00]
|
|
c.addi4spn1 = [000.1.........00]
|
|
c.addi4spn2 = [000..1........00]
|
|
c.addi4spn3 = [000...1.......00]
|
|
c.addi4spn4 = [000....1......00]
|
|
c.addi4spn5 = [000.....1.....00]
|
|
c.addi4spn6 = [000......1....00]
|
|
c.addi4spn7 = [000.......1...00]
|
|
|
|
|
|
c.and = [100011...11...01]
|
|
c.andi = [100.10........01]
|
|
c.beqz = [110...........01]
|
|
c.bnez = [111...........01]
|
|
c.ebreak = [1001000000000010]
|
|
c.j = [101...........01]
|
|
c.jal = [001...........01]
|
|
|
|
|
|
c.jr0 = [10001....0000010]
|
|
c.jr1 = [1000.1...0000010]
|
|
c.jr2 = [1000..1..0000010]
|
|
c.jr3 = [1000...1.0000010]
|
|
c.jr4 = [1000....10000010]
|
|
|
|
c.li = [010...........01]
|
|
|
|
# invalid rd=x2 or imm=0
|
|
c.lui0 = [01111.........01]
|
|
c.lui1 = [0111.1........01]
|
|
c.lui2 = [0111..1.......01]
|
|
c.lui3 = [0111...0......01]
|
|
c.lui4 = [0111....1.....01]
|
|
c.lui5 = [011.1....1....01]
|
|
c.lui6 = [011..1...1....01]
|
|
c.lui7 = [011...1..1....01]
|
|
c.lui8 = [011....0.1....01]
|
|
c.lui9 = [011.....11....01]
|
|
c.lui10= [011.1.....1...01]
|
|
c.lui11= [011..1....1...01]
|
|
c.lui12 = [011...1...1...01]
|
|
c.lui13 = [011....0..1...01]
|
|
c.lui14 = [011.....1.1...01]
|
|
c.lui15 = [011.1......1..01]
|
|
c.lui16 = [011..1.....1..01]
|
|
c.lui17 = [011...1....1..01]
|
|
c.lui18 = [011....0...1..01]
|
|
c.lui19 = [011.....1..1..01]
|
|
c.lui20 = [011.1.......1.01]
|
|
c.lui21 = [011..1......1.01]
|
|
c.lui22 = [011...1.....1.01]
|
|
c.lui23 = [011....0....1.01]
|
|
c.lui24 = [011.....1...1.01]
|
|
c.lui25 = [011.1........101]
|
|
c.lui26 = [011..1.......101]
|
|
c.lui27 = [011...1......101]
|
|
c.lui28 = [011....0.....101]
|
|
c.lui29 = [011.....1....101]
|
|
|
|
|
|
c.lw = [010...........00]
|
|
|
|
|
|
c.lwsp = [010...........10]
|
|
|
|
c.or = [100011...10...01]
|
|
|
|
# bit 5 of the shift must be 0 to be legal
|
|
c.slli = [0000..........10]
|
|
|
|
c.srai = [100001........01]
|
|
|
|
c.srli = [100000........01]
|
|
|
|
c.sub = [100011...00...01]
|
|
c.sw = [110...........00]
|
|
c.swsp = [110...........10]
|
|
c.xor = [100011...01...01]
|
|
|
|
|
|
.input
|
|
rv32c = {
|
|
i[15]
|
|
i[14]
|
|
i[13]
|
|
i[12]
|
|
i[11]
|
|
i[10]
|
|
i[9]
|
|
i[8]
|
|
i[7]
|
|
i[6]
|
|
i[5]
|
|
i[4]
|
|
i[3]
|
|
i[2]
|
|
i[1]
|
|
i[0]
|
|
}
|
|
|
|
.output
|
|
rv32c = {
|
|
rdrd
|
|
rdrs1
|
|
rs2rs2
|
|
rdprd
|
|
rdprs1
|
|
rs2prs2
|
|
rs2prd
|
|
uimm9_2
|
|
ulwimm6_2
|
|
ulwspimm7_2
|
|
rdeq2
|
|
rdeq1
|
|
rs1eq2
|
|
sbroffset8_1
|
|
simm9_4
|
|
simm5_0
|
|
sjaloffset11_1
|
|
sluimm17_12
|
|
uimm5_0
|
|
uswimm6_2
|
|
uswspimm7_2
|
|
o[31]
|
|
o[30]
|
|
o[29]
|
|
o[28]
|
|
o[27]
|
|
o[26]
|
|
o[25]
|
|
o[24]
|
|
o[23]
|
|
o[22]
|
|
o[21]
|
|
o[20]
|
|
o[19]
|
|
o[18]
|
|
o[17]
|
|
o[16]
|
|
o[15]
|
|
o[14]
|
|
o[13]
|
|
o[12]
|
|
o[11]
|
|
o[10]
|
|
o[9]
|
|
o[8]
|
|
o[7]
|
|
o[6]
|
|
o[5]
|
|
o[4]
|
|
o[3]
|
|
o[2]
|
|
o[1]
|
|
o[0]
|
|
}
|
|
|
|
# assign rs2d[4:0] = i[6:2];
|
|
#
|
|
# assign rdd[4:0] = i[11:7];
|
|
#
|
|
# assign rdpd[4:0] = {2'b01, i[9:7]};
|
|
#
|
|
# assign rs2pd[4:0] = {2'b01, i[4:2]};
|
|
|
|
.decode
|
|
|
|
|
|
|
|
|
|
rv32c[c.add{0-4}] = { rdrd rdrs1 rs2rs2 o[5] o[4] o[1] o[0] }
|
|
|
|
rv32c[c.mv{0-4}] = { rdrd rs2rs2 o[5] o[4] o[1] o[0] }
|
|
|
|
rv32c[c.addi] = { rdrd rdrs1 simm5_0 o[4] o[1] o[0] }
|
|
|
|
rv32c[c.addi16sp{0-5}] = { rdeq2 rs1eq2 simm9_4 o[4] o[1] o[0] }
|
|
rv32c[c.addi4spn{0-7}] = { rs2prd rs1eq2 uimm9_2 o[4] o[1] o[0] }
|
|
|
|
|
|
rv32c[c.and] = { rdprd rdprs1 rs2prs2 o[14] o[13] o[12] o[5] o[4] o[1] o[0] }
|
|
rv32c[c.andi] = { rdprd rdprs1 simm5_0 o[14] o[13] o[12] o[4] o[1] o[0] }
|
|
rv32c[c.beqz] = { rdprs1 sbroffset8_1 o[6] o[5] o[1] o[0] }
|
|
rv32c[c.bnez] = { rdprs1 sbroffset8_1 o[12] o[6] o[5] o[1] o[0] }
|
|
|
|
|
|
rv32c[c.ebreak] = { o[20] o[6] o[5] o[4] o[1] o[0] }
|
|
|
|
rv32c[c.j] = { sjaloffset11_1 o[6] o[5] o[3] o[2] o[1] o[0] }
|
|
rv32c[c.jal] = { sjaloffset11_1 rdeq1 o[6] o[5] o[3] o[2] o[1] o[0] }
|
|
|
|
|
|
rv32c[c.jalr{0-4}] = { rdeq1 rdrs1 o[6] o[5] o[2] o[1] o[0] }
|
|
rv32c[c.jr{0-4}] = { rdrs1 o[6] o[5] o[2] o[1] o[0] }
|
|
rv32c[c.li] = { rdrd simm5_0 o[4] o[1] o[0] }
|
|
|
|
rv32c[c.lui{0-29}] = { rdrd sluimm17_12 o[5] o[4] o[2] o[1] o[0] }
|
|
rv32c[c.lw] = { rs2prd rdprs1 ulwimm6_2 o[13] o[1] o[0] }
|
|
rv32c[c.lwsp] = { rdrd rs1eq2 ulwspimm7_2 o[13] o[1] o[0] }
|
|
|
|
|
|
rv32c[c.or] = { rdprd rdprs1 rs2prs2 o[14] o[13] o[5] o[4] o[1] o[0] }
|
|
|
|
rv32c[c.slli] = { rdrd rdrs1 uimm5_0 o[12] o[4] o[1] o[0] }
|
|
rv32c[c.srai] = { rdprd rdprs1 uimm5_0 o[30] o[14] o[12] o[4] o[1] o[0] }
|
|
rv32c[c.srli] = { rdprd rdprs1 uimm5_0 o[14] o[12] o[4] o[1] o[0] }
|
|
|
|
|
|
rv32c[c.sub] = { rdprd rdprs1 rs2prs2 o[30] o[5] o[4] o[1] o[0] }
|
|
rv32c[c.sw] = { rdprs1 rs2prs2 uswimm6_2 o[13] o[5] o[1] o[0] }
|
|
rv32c[c.swsp] = { rs2rs2 rs1eq2 uswspimm7_2 o[13] o[5] o[1] o[0] }
|
|
rv32c[c.xor] = { rdprd rdprs1 rs2prs2 o[14] o[5] o[4] o[1] o[0] }
|
|
|
|
|
|
|
|
.end |