- meta:STATOR v1(参与 .stb 型号标识) - type 3 条:BOOL(uint8, range=[0,1], tag=0) / INT(int16, tag=1) / TIME(int64, tag=2) - op 34 条:全属性必填,与 kOpDefs 逐条一致(26 PLAIN + 8 INSTANCE=CAL) - fb 8 条:opcode 与 op 行一致,字段类型命中 type 表 - 核对程序通过:types=3 ops=34 fbs=8 ALL CONSISTENT
343 lines
5.3 KiB
TOML
343 lines
5.3 KiB
TOML
# 机器定义:指令集与类型的唯一事实来源(只给编译器)
|
||
# 格式见 Doc/isa/指令配置.md;全属性必填,与代码强校验一致。
|
||
|
||
[meta]
|
||
name = "STATOR" # 型号名(参与 .stb 型号标识[32])
|
||
version = 1 # 指令集版本(参与 .stb 型号标识[32])
|
||
|
||
# ---- 类型:编译器内建基元(bit/int8/int16/int32/int64/uint8/uint16/uint32/uint64/float32/float64)
|
||
# 配置类型 = 基元别名(+ 值域约束 + .stb 契约 tag)
|
||
|
||
[[type]]
|
||
name = "BOOL"
|
||
base = "uint8"
|
||
range = [0, 1] # 值域约束:只允许 0/1
|
||
tag = 0
|
||
|
||
[[type]]
|
||
name = "INT"
|
||
base = "int16"
|
||
tag = 1
|
||
|
||
[[type]]
|
||
name = "TIME"
|
||
base = "int64"
|
||
tag = 2
|
||
|
||
# ---- 指令(全属性必填;class: plain/instance;format: RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE)
|
||
|
||
[[op]]
|
||
name = "MOVE"
|
||
opcode = 0
|
||
class = "plain"
|
||
format = "RR"
|
||
params = ["rd", "rs"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "LOADK"
|
||
opcode = 1
|
||
class = "plain"
|
||
format = "IMM"
|
||
params = ["rd", "const_id"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "NOT"
|
||
opcode = 2
|
||
class = "plain"
|
||
format = "RR"
|
||
params = ["rd", "rs"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "AND"
|
||
opcode = 3
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "OR"
|
||
opcode = 4
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "ADD"
|
||
opcode = 5
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "SUB"
|
||
opcode = 6
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "MUL"
|
||
opcode = 7
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "DIV"
|
||
opcode = 8
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_EQ"
|
||
opcode = 9
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_NE"
|
||
opcode = 10
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_LT"
|
||
opcode = 11
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_LE"
|
||
opcode = 12
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_GT"
|
||
opcode = 13
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CMP_GE"
|
||
opcode = 14
|
||
class = "plain"
|
||
format = "RRR"
|
||
params = ["rd", "ra", "rb"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "JMP"
|
||
opcode = 15
|
||
class = "plain"
|
||
format = "JMP"
|
||
params = ["off"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "JT"
|
||
opcode = 16
|
||
class = "plain"
|
||
format = "JC"
|
||
params = ["r", "off"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "JF"
|
||
opcode = 17
|
||
class = "plain"
|
||
format = "JC"
|
||
params = ["r", "off"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "LOAD_I"
|
||
opcode = 18
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rd", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "STORE_Q"
|
||
opcode = 19
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rs", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "LOAD_M"
|
||
opcode = 20
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rd", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "STORE_M"
|
||
opcode = 21
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rs", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "LOAD_GLOBAL"
|
||
opcode = 22
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rd", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "STORE_GLOBAL"
|
||
opcode = 23
|
||
class = "plain"
|
||
format = "SLOT"
|
||
params = ["rs", "slot"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_TON"
|
||
opcode = 24
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_TOF"
|
||
opcode = 25
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_TP"
|
||
opcode = 26
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_CTU"
|
||
opcode = 27
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_CTD"
|
||
opcode = 28
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_CTUD"
|
||
opcode = 29
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_R_TRIG"
|
||
opcode = 30
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CAL_F_TRIG"
|
||
opcode = 31
|
||
class = "instance"
|
||
format = "CAL"
|
||
params = ["instance"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "CALL"
|
||
opcode = 32
|
||
class = "plain"
|
||
format = "CALL"
|
||
params = ["fn_id"]
|
||
enabled = true
|
||
|
||
[[op]]
|
||
name = "RET"
|
||
opcode = 33
|
||
class = "plain"
|
||
format = "NONE"
|
||
params = []
|
||
enabled = true
|
||
|
||
# ---- 内建 FB(布局登记;opcode 与 op 行强校验一致;字段类型命中 type 表)
|
||
|
||
[[fb]]
|
||
name = "ton"
|
||
opcode = 24
|
||
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
|
||
|
||
[[fb]]
|
||
name = "tof"
|
||
opcode = 25
|
||
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
|
||
|
||
[[fb]]
|
||
name = "tp"
|
||
opcode = 26
|
||
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
|
||
|
||
[[fb]]
|
||
name = "ctu"
|
||
opcode = 27
|
||
fields = [["cu", "BOOL"], ["r", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
|
||
|
||
[[fb]]
|
||
name = "ctd"
|
||
opcode = 28
|
||
fields = [["cd", "BOOL"], ["ld", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
|
||
|
||
[[fb]]
|
||
name = "ctud"
|
||
opcode = 29
|
||
fields = [["cu", "BOOL"], ["cd", "BOOL"], ["r", "BOOL"], ["lu", "BOOL"],
|
||
["pv", "INT"], ["qu", "BOOL"], ["qd", "BOOL"], ["cv", "INT"]]
|
||
|
||
[[fb]]
|
||
name = "r_trig"
|
||
opcode = 30
|
||
fields = [["clk", "BOOL"], ["q", "BOOL"]]
|
||
|
||
[[fb]]
|
||
name = "f_trig"
|
||
opcode = 31
|
||
fields = [["clk", "BOOL"], ["q", "BOOL"]]
|