aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeel Gala <neelgala@incoresemi.com>2023-05-02 11:09:46 +0530
committerGitHub <noreply@github.com>2023-05-02 11:09:46 +0530
commit1f9273810e34f937deb3a6675f3e67e15b6d19c7 (patch)
tree17ffd7cc37f4eeaf5f10f6a076efd7366f3ff03d
parent78762248c4fbccd90dd03f7b353f4da536131595 (diff)
parentafebbc69bbb721b57a27db3623eaf69240934e1d (diff)
downloadriscv-opcodes-1f9273810e34f937deb3a6675f3e67e15b6d19c7.zip
riscv-opcodes-1f9273810e34f937deb3a6675f3e67e15b6d19c7.tar.gz
riscv-opcodes-1f9273810e34f937deb3a6675f3e67e15b6d19c7.tar.bz2
Merge pull request #167 from Lucas-Wye/master
change decode generation part of chisel
-rwxr-xr-xparse.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/parse.py b/parse.py
index e78a158..1c41d9c 100755
--- a/parse.py
+++ b/parse.py
@@ -735,6 +735,12 @@ def make_ext_latex_table(type_list, dataset, latex_file, ilen, caption):
# dump the contents and return
latex_file.write(header+content+endtable)
+def instr_dict_2_extensions(instr_dict):
+ extensions = []
+ for item in instr_dict.values():
+ if item['extension'][0] not in extensions:
+ extensions.append(item['extension'][0])
+ return extensions
def make_chisel(instr_dict, spinal_hdl=False):
@@ -744,8 +750,28 @@ def make_chisel(instr_dict, spinal_hdl=False):
for i in instr_dict:
if spinal_hdl:
chisel_names += f' def {i.upper().replace(".","_"):<18s} = M"b{instr_dict[i]["encoding"].replace("-","-")}"\n'
- else:
- chisel_names += f' def {i.upper().replace(".","_"):<18s} = BitPat("b{instr_dict[i]["encoding"].replace("-","?")}")\n'
+ # else:
+ # chisel_names += f' def {i.upper().replace(".","_"):<18s} = BitPat("b{instr_dict[i]["encoding"].replace("-","?")}")\n'
+ if not spinal_hdl:
+ extensions = instr_dict_2_extensions(instr_dict)
+ for e in extensions:
+ e_instrs = filter(lambda i: instr_dict[i]['extension'][0] == e, instr_dict)
+ if "rv128_" in e:
+ e_format = e.replace("rv128_", "").upper() + "128"
+ elif "rv64_" in e:
+ e_format = e.replace("rv64_", "").upper() + "64"
+ elif "rv32_" in e:
+ e_format = e.replace("rv32_", "").upper() + "32"
+ elif "rv_" in e:
+ e_format = e.replace("rv_", "").upper()
+ else:
+ e_format = e.upper
+ chisel_names += f' val {e_format+"Type"} = Map(\n'
+ for instr in e_instrs:
+ tmp_instr_name = '"'+instr.upper().replace(".","_")+'"'
+ chisel_names += f' {tmp_instr_name:<18s} -> BitPat("b{instr_dict[instr]["encoding"].replace("-","?")}"),\n'
+ chisel_names += f' )\n'
+
for num, name in causes:
cause_names_str += f' val {name.lower().replace(" ","_")} = {hex(num)}\n'
cause_names_str += ''' val all = {