324 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			324 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.definition
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								add       =  [0000000..........000.....0110011]
							 | 
						||
| 
								 | 
							
								addi      =  [.................000.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sub       =  [0100000..........000.....0110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								and       =  [0000000..........111.....0110011]
							 | 
						||
| 
								 | 
							
								andi      =  [.................111.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								or        =  [0000000..........110.....0110011]
							 | 
						||
| 
								 | 
							
								ori       =  [.................110.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								xor       =  [0000000..........100.....0110011]
							 | 
						||
| 
								 | 
							
								xori      =  [.................100.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sll       =  [0000000..........001.....0110011]
							 | 
						||
| 
								 | 
							
								slli      =  [0000000..........001.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sra       =  [0100000..........101.....0110011]
							 | 
						||
| 
								 | 
							
								srai      =  [0100000..........101.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								srl       =  [0000000..........101.....0110011]
							 | 
						||
| 
								 | 
							
								srli      =  [0000000..........101.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								lui       =  [.........................0110111]
							 | 
						||
| 
								 | 
							
								auipc     =  [.........................0010111]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								slt       =  [0000000..........010.....0110011]
							 | 
						||
| 
								 | 
							
								sltu      =  [0000000..........011.....0110011]
							 | 
						||
| 
								 | 
							
								slti      =  [.................010.....0010011]
							 | 
						||
| 
								 | 
							
								sltiu     =  [.................011.....0010011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								beq       =  [.................000.....1100011]
							 | 
						||
| 
								 | 
							
								bne       =  [.................001.....1100011]
							 | 
						||
| 
								 | 
							
								bge       =  [.................101.....1100011]
							 | 
						||
| 
								 | 
							
								blt       =  [.................100.....1100011]
							 | 
						||
| 
								 | 
							
								bgeu      =  [.................111.....1100011]
							 | 
						||
| 
								 | 
							
								bltu      =  [.................110.....1100011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								jal       =  [.........................1101111]
							 | 
						||
| 
								 | 
							
								jalr      =  [.................000.....1100111]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								lb        =  [.................000.....0000011]
							 | 
						||
| 
								 | 
							
								lh        =  [.................001.....0000011]
							 | 
						||
| 
								 | 
							
								lw        =  [.................010.....0000011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sb        =  [.................000.....0100011]
							 | 
						||
| 
								 | 
							
								sh        =  [.................001.....0100011]
							 | 
						||
| 
								 | 
							
								sw        =  [.................010.....0100011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								lbu       =  [.................100.....0000011]
							 | 
						||
| 
								 | 
							
								lhu       =  [.................101.....0000011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fence     =  [0000........00000000000000001111]
							 | 
						||
| 
								 | 
							
								fence.i   =  [00000000000000000001000000001111]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ebreak    =  [00000000000100000000000001110011]
							 | 
						||
| 
								 | 
							
								ecall     =  [00000000000000000000000001110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								mret      =  [00110000001000000000000001110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								wfi       =  [00010000010100000000000001110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrrc_ro  =  [............00000011.....1110011]
							 | 
						||
| 
								 | 
							
								csrrc_rw0 =  [............1....011.....1110011]
							 | 
						||
| 
								 | 
							
								csrrc_rw1 =  [.............1...011.....1110011]
							 | 
						||
| 
								 | 
							
								csrrc_rw2 =  [..............1..011.....1110011]
							 | 
						||
| 
								 | 
							
								csrrc_rw3 =  [...............1.011.....1110011]
							 | 
						||
| 
								 | 
							
								csrrc_rw4 =  [................1011.....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrrci_ro  = [............00000111.....1110011]
							 | 
						||
| 
								 | 
							
								csrrci_rw0 = [............1....111.....1110011]
							 | 
						||
| 
								 | 
							
								csrrci_rw1 = [.............1...111.....1110011]
							 | 
						||
| 
								 | 
							
								csrrci_rw2 = [..............1..111.....1110011]
							 | 
						||
| 
								 | 
							
								csrrci_rw3 = [...............1.111.....1110011]
							 | 
						||
| 
								 | 
							
								csrrci_rw4 = [................1111.....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrrs_ro  =  [............00000010.....1110011]
							 | 
						||
| 
								 | 
							
								csrrs_rw0 =  [............1....010.....1110011]
							 | 
						||
| 
								 | 
							
								csrrs_rw1 =  [.............1...010.....1110011]
							 | 
						||
| 
								 | 
							
								csrrs_rw2 =  [..............1..010.....1110011]
							 | 
						||
| 
								 | 
							
								csrrs_rw3 =  [...............1.010.....1110011]
							 | 
						||
| 
								 | 
							
								csrrs_rw4 =  [................1010.....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrrsi_ro  = [............00000110.....1110011]
							 | 
						||
| 
								 | 
							
								csrrsi_rw0 = [............1....110.....1110011]
							 | 
						||
| 
								 | 
							
								csrrsi_rw1 = [.............1...110.....1110011]
							 | 
						||
| 
								 | 
							
								csrrsi_rw2 = [..............1..110.....1110011]
							 | 
						||
| 
								 | 
							
								csrrsi_rw3 = [...............1.110.....1110011]
							 | 
						||
| 
								 | 
							
								csrrsi_rw4 = [................1110.....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrw  =       [.................001000001110011]
							 | 
						||
| 
								 | 
							
								csrrw0 =      [.................001....11110011]
							 | 
						||
| 
								 | 
							
								csrrw1 =      [.................001...1.1110011]
							 | 
						||
| 
								 | 
							
								csrrw2 =      [.................001..1..1110011]
							 | 
						||
| 
								 | 
							
								csrrw3 =      [.................001.1...1110011]
							 | 
						||
| 
								 | 
							
								csrrw4 =      [.................0011....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								csrwi   =     [.................101000001110011]
							 | 
						||
| 
								 | 
							
								csrrwi0 =     [.................101....11110011]
							 | 
						||
| 
								 | 
							
								csrrwi1 =     [.................101...1.1110011]
							 | 
						||
| 
								 | 
							
								csrrwi2 =     [.................101..1..1110011]
							 | 
						||
| 
								 | 
							
								csrrwi3 =     [.................101.1...1110011]
							 | 
						||
| 
								 | 
							
								csrrwi4 =     [.................1011....1110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								mul =        [0000001..........000.....0110011]
							 | 
						||
| 
								 | 
							
								mulh =       [0000001..........001.....0110011]
							 | 
						||
| 
								 | 
							
								mulhsu =     [0000001..........010.....0110011]
							 | 
						||
| 
								 | 
							
								mulhu =      [0000001..........011.....0110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								div =        [0000001..........100.....0110011]
							 | 
						||
| 
								 | 
							
								divu =       [0000001..........101.....0110011]
							 | 
						||
| 
								 | 
							
								rem =        [0000001..........110.....0110011]
							 | 
						||
| 
								 | 
							
								remu =       [0000001..........111.....0110011]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.input
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i = {
							 | 
						||
| 
								 | 
							
								        i[31]
							 | 
						||
| 
								 | 
							
								        i[30]
							 | 
						||
| 
								 | 
							
								        i[29]
							 | 
						||
| 
								 | 
							
								        i[28]
							 | 
						||
| 
								 | 
							
								        i[27]
							 | 
						||
| 
								 | 
							
								        i[26]
							 | 
						||
| 
								 | 
							
								        i[25]
							 | 
						||
| 
								 | 
							
								        i[24]
							 | 
						||
| 
								 | 
							
								        i[23]
							 | 
						||
| 
								 | 
							
								        i[22]
							 | 
						||
| 
								 | 
							
								        i[21]
							 | 
						||
| 
								 | 
							
								        i[20]
							 | 
						||
| 
								 | 
							
								        i[19]
							 | 
						||
| 
								 | 
							
								        i[18]
							 | 
						||
| 
								 | 
							
								        i[17]
							 | 
						||
| 
								 | 
							
								        i[16]
							 | 
						||
| 
								 | 
							
								        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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i = {
							 | 
						||
| 
								 | 
							
								      alu
							 | 
						||
| 
								 | 
							
								      rs1
							 | 
						||
| 
								 | 
							
								      rs2
							 | 
						||
| 
								 | 
							
								      imm12
							 | 
						||
| 
								 | 
							
								      rd
							 | 
						||
| 
								 | 
							
								      shimm5
							 | 
						||
| 
								 | 
							
								      imm20
							 | 
						||
| 
								 | 
							
								      pc
							 | 
						||
| 
								 | 
							
								      load
							 | 
						||
| 
								 | 
							
								      store
							 | 
						||
| 
								 | 
							
								      lsu
							 | 
						||
| 
								 | 
							
								      add
							 | 
						||
| 
								 | 
							
								      sub
							 | 
						||
| 
								 | 
							
								      land
							 | 
						||
| 
								 | 
							
								      lor
							 | 
						||
| 
								 | 
							
								      lxor
							 | 
						||
| 
								 | 
							
								      sll
							 | 
						||
| 
								 | 
							
								      sra
							 | 
						||
| 
								 | 
							
								      srl
							 | 
						||
| 
								 | 
							
								      slt
							 | 
						||
| 
								 | 
							
								      unsign
							 | 
						||
| 
								 | 
							
								      condbr
							 | 
						||
| 
								 | 
							
								      beq
							 | 
						||
| 
								 | 
							
								      bne
							 | 
						||
| 
								 | 
							
								      bge
							 | 
						||
| 
								 | 
							
								      blt
							 | 
						||
| 
								 | 
							
								      jal
							 | 
						||
| 
								 | 
							
								      by
							 | 
						||
| 
								 | 
							
								      half
							 | 
						||
| 
								 | 
							
								      word
							 | 
						||
| 
								 | 
							
								      csr_read
							 | 
						||
| 
								 | 
							
								      csr_clr
							 | 
						||
| 
								 | 
							
								      csr_set
							 | 
						||
| 
								 | 
							
								      csr_write
							 | 
						||
| 
								 | 
							
								      csr_imm
							 | 
						||
| 
								 | 
							
								      presync
							 | 
						||
| 
								 | 
							
								      postsync
							 | 
						||
| 
								 | 
							
								      ebreak
							 | 
						||
| 
								 | 
							
								      ecall
							 | 
						||
| 
								 | 
							
								      mret
							 | 
						||
| 
								 | 
							
								      mul
							 | 
						||
| 
								 | 
							
								      rs1_sign
							 | 
						||
| 
								 | 
							
								      rs2_sign
							 | 
						||
| 
								 | 
							
								      low
							 | 
						||
| 
								 | 
							
								      div
							 | 
						||
| 
								 | 
							
								      rem
							 | 
						||
| 
								 | 
							
								      fence
							 | 
						||
| 
								 | 
							
								      fence_i
							 | 
						||
| 
								 | 
							
								      pm_alu
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.decode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[mul]       =  { mul         rs1 rs2 rd low                         }
							 | 
						||
| 
								 | 
							
								rv32i[mulh]      =  { mul         rs1 rs2 rd rs1_sign rs2_sign           }
							 | 
						||
| 
								 | 
							
								rv32i[mulhu]     =  { mul         rs1 rs2 rd                             }
							 | 
						||
| 
								 | 
							
								rv32i[mulhsu]    =  { mul         rs1 rs2 rd rs1_sign                    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[div]       =  { div rs1 rs2 rd            }
							 | 
						||
| 
								 | 
							
								rv32i[divu]      =  { div rs1 rs2 rd unsign     }
							 | 
						||
| 
								 | 
							
								rv32i[rem]       =  { div rs1 rs2 rd         rem}
							 | 
						||
| 
								 | 
							
								rv32i[remu]      =  { div rs1 rs2 rd unsign  rem}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[add]       =  { alu rs1 rs2   rd add pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[addi]      =  { alu rs1 imm12 rd add pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[sub]       =  { alu rs1 rs2   rd sub pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[and]       =  { alu rs1 rs2   rd land pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[andi]      =  { alu rs1 imm12 rd land pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[or]        =  { alu rs1 rs2   rd lor pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[ori]       =  { alu rs1 imm12 rd lor pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[xor]       =  { alu rs1 rs2   rd lxor pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[xori]      =  { alu rs1 imm12 rd lxor pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[sll]       =  { alu rs1 rs2    rd sll pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[slli]      =  { alu rs1 shimm5 rd sll pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[sra]       =  { alu rs1 rs2    rd sra pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[srai]      =  { alu rs1 shimm5 rd sra pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[srl]       =  { alu rs1 rs2    rd srl pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[srli]      =  { alu rs1 shimm5 rd srl pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[lui]       =  { alu imm20    rd lor pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[auipc]     =  { alu imm20 pc rd add pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[slt]    =     { alu rs1 rs2    rd sub slt        pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[sltu]    =    { alu rs1 rs2    rd sub slt unsign pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[slti]    =    { alu rs1 imm12  rd sub slt        pm_alu }
							 | 
						||
| 
								 | 
							
								rv32i[sltiu]    =   { alu rs1 imm12  rd sub slt unsign pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[beq]    =     { alu rs1 rs2 sub condbr beq }
							 | 
						||
| 
								 | 
							
								rv32i[bne]    =     { alu rs1 rs2 sub condbr bne }
							 | 
						||
| 
								 | 
							
								rv32i[bge]    =     { alu rs1 rs2 sub condbr bge }
							 | 
						||
| 
								 | 
							
								rv32i[blt]    =     { alu rs1 rs2 sub condbr blt }
							 | 
						||
| 
								 | 
							
								rv32i[bgeu]    =    { alu rs1 rs2 sub condbr bge unsign }
							 | 
						||
| 
								 | 
							
								rv32i[bltu]    =    { alu rs1 rs2 sub condbr blt unsign }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[jal]    =     { alu imm20 rd pc    jal }
							 | 
						||
| 
								 | 
							
								rv32i[jalr]    =    { alu rs1   rd imm12 jal }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[lb] =      { lsu load rs1 rd by    }
							 | 
						||
| 
								 | 
							
								rv32i[lh] =      { lsu load rs1 rd half  }
							 | 
						||
| 
								 | 
							
								rv32i[lw] =      { lsu load rs1 rd word  }
							 | 
						||
| 
								 | 
							
								rv32i[lbu] =     { lsu load rs1 rd by   unsign  }
							 | 
						||
| 
								 | 
							
								rv32i[lhu] =     { lsu load rs1 rd half unsign  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[sb] =      { lsu store rs1 rs2 by   }
							 | 
						||
| 
								 | 
							
								rv32i[sh] =      { lsu store rs1 rs2 half }
							 | 
						||
| 
								 | 
							
								rv32i[sw] =      { lsu store rs1 rs2 word }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[fence] =   { alu lor fence presync}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# fence.i has fence effect in addtion to flush I$ and redirect
							 | 
						||
| 
								 | 
							
								rv32i[fence.i] = { alu lor fence fence_i presync postsync}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# nops for now
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[ebreak] = {  alu rs1 imm12 rd lor ebreak postsync}
							 | 
						||
| 
								 | 
							
								rv32i[ecall] =  {  alu rs1 imm12 rd lor ecall  postsync}
							 | 
						||
| 
								 | 
							
								rv32i[mret] =   {  alu rs1 imm12 rd lor mret   postsync}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[wfi] =    {  alu rs1 imm12 rd lor pm_alu }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# csr means read
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# csr_read - put csr on rs2 and rs1 0's
							 | 
						||
| 
								 | 
							
								rv32i[csrrc_ro] =        { alu rd csr_read }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# put csr on rs2 and make rs1 0's into alu.  Save rs1 for csr_clr later
							 | 
						||
| 
								 | 
							
								rv32i[csrrc_rw{0-4}] =   { alu rd csr_read rs1 csr_clr            presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrci_ro] =       { alu rd csr_read }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrci_rw{0-4}] =  { alu rd csr_read rs1 csr_clr   csr_imm  presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrs_ro] =        { alu rd csr_read }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrs_rw{0-4}] =   { alu rd csr_read rs1 csr_set            presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrsi_ro] =       { alu rd csr_read }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrsi_rw{0-4}] =  { alu rd csr_read rs1 csr_set   csr_imm presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrw{0-4}] =     { alu rd csr_read rs1 csr_write         presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrrwi{0-4}] =         { alu rd csr_read rs1 csr_write csr_imm presync postsync }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# optimize csr write only - pipelined
							 | 
						||
| 
								 | 
							
								rv32i[csrw] =                { alu rd rs1 csr_write           }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rv32i[csrwi]       =         { alu rd     csr_write csr_imm   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.end
							 |