| 
									
										
										
										
											2019-06-04 22:57:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | .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] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-20 10:25:04 +08:00
										 |  |  | .input | 
					
						
							| 
									
										
										
										
											2019-06-04 22:57:48 +08:00
										 |  |  | rv32c = { | 
					
						
							| 
									
										
										
										
											2020-02-20 10:25:04 +08:00
										 |  |  |         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] | 
					
						
							| 
									
										
										
										
											2019-06-04 22:57:48 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .output | 
					
						
							|  |  |  | rv32c = { | 
					
						
							|  |  |  |         rdrd | 
					
						
							|  |  |  |         rdrs1 | 
					
						
							|  |  |  |         rs2rs2 | 
					
						
							|  |  |  |         rdprd | 
					
						
							|  |  |  |         rdprs1 | 
					
						
							|  |  |  |         rs2prs2 | 
					
						
							|  |  |  |         rs2prd | 
					
						
							| 
									
										
										
										
											2020-02-20 10:25:04 +08:00
										 |  |  |         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] | 
					
						
							| 
									
										
										
										
											2019-06-04 22:57:48 +08:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #  assign rs2d[4:0] = i[6:2]; | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   assign rdd[4:0] = i[11:7]; | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   assign rdpd[4:0] = {2'b01, i[9:7]}; | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2020-02-20 10:25:04 +08:00
										 |  |  | #   assign rs2pd[4:0] = {2'b01, i[4:2]}; | 
					
						
							| 
									
										
										
										
											2019-06-04 22:57:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | .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 |