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 |