Files

887 lines
13 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 机器定义:指令集与类型的唯一事实来源(V2,STATOR2)
# schema 见 Doc/isa/指令配置.md;全属性必填,与代码强校验一致。
# V2 变更:op 用 prefix+op(分区内编号);func 类别表达数据语义;
# 类型 19 条(base 基元 + kind 语义 + func 映射);FB 14 条(fb_id 0..14)。
[meta]
name = "STATOR" # 型号名(参与 .stb 型号标识[32])
version = 2 # 格式版本(型号标识 = "STATOR2"V1 = 1
# ---- 类型:19 种 IEC 类型(V2
# base = 编译器内建基元(bit/int8/int16/int32/int64/uint8/uint16/uint32/uint64/float32/float64
# kind = 语言语义(bool/bit/int/uint/float/time/date)——同 func 不同 kind 区分
# func = type 位段值(0..9),与 base 的 (width, signed) 互锁强校验
[[type]]
name = "BOOL"
base = "uint8"
kind = "bool"
func = 0
[[type]]
name = "BYTE"
base = "uint8"
kind = "bit"
func = 0
[[type]]
name = "WORD"
base = "uint16"
kind = "bit"
func = 2
[[type]]
name = "DWORD"
base = "uint32"
kind = "bit"
func = 4
[[type]]
name = "LWORD"
base = "uint64"
kind = "bit"
func = 6
[[type]]
name = "SINT"
base = "int8"
kind = "int"
func = 1
[[type]]
name = "INT"
base = "int16"
kind = "int"
func = 3
[[type]]
name = "DINT"
base = "int32"
kind = "int"
func = 5
[[type]]
name = "LINT"
base = "int64"
kind = "int"
func = 7
[[type]]
name = "USINT"
base = "uint8"
kind = "uint"
func = 0
[[type]]
name = "UINT"
base = "uint16"
kind = "uint"
func = 2
[[type]]
name = "UDINT"
base = "uint32"
kind = "uint"
func = 4
[[type]]
name = "ULINT"
base = "uint64"
kind = "uint"
func = 6
[[type]]
name = "TIME"
base = "int64"
kind = "time"
func = 7
[[type]]
name = "REAL"
base = "float32"
kind = "float"
func = 8
[[type]]
name = "LREAL"
base = "float64"
kind = "float"
func = 9
[[type]]
name = "DATE"
base = "uint32"
kind = "date"
func = 4
[[type]]
name = "TOD"
base = "uint32"
kind = "date"
func = 4
[[type]]
name = "DT"
base = "uint64"
kind = "date"
func = 6
# ---- 指令(V2prefix + op + fmt + func 类别,全属性必填)
# prefix:形态前缀(11/10/011/010000..010101/0010/0011/0001
# op:分区内编号(0 起);fmt:操作数形态;func:数据语义类别
# none=无类型 / width=宽度 0..3 / uint=无符号宽度 0/2/4/6 /
# full=全矩阵 0..9 / float=浮点 8/9 / dst=目标类型 0..9
# params:参数名(与 fmt 互锁,见指令配置.md 强校验)
# ---- 4B RR(前缀 11op 6 位)
[[op]]
name = "MOVE"
prefix = "11"
op = 0
fmt = "RR"
func = "width"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "NOT"
prefix = "11"
op = 1
fmt = "RR"
func = "uint"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "NEG"
prefix = "11"
op = 2
fmt = "RR"
func = "full"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "ABS"
prefix = "11"
op = 3
fmt = "RR"
func = "full"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "INC"
prefix = "11"
op = 4
fmt = "RR"
func = "full"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "DEC"
prefix = "11"
op = 5
fmt = "RR"
func = "full"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "SQRT"
prefix = "11"
op = 6
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "SIN"
prefix = "11"
op = 7
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "COS"
prefix = "11"
op = 8
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "TAN"
prefix = "11"
op = 9
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "ASIN"
prefix = "11"
op = 10
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "ACOS"
prefix = "11"
op = 11
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "ATAN"
prefix = "11"
op = 12
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "LN"
prefix = "11"
op = 13
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "LOG"
prefix = "11"
op = 14
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "EXP"
prefix = "11"
op = 15
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "ROUND"
prefix = "11"
op = 16
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "TRUNC"
prefix = "11"
op = 17
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "FLOOR"
prefix = "11"
op = 18
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "CEIL"
prefix = "11"
op = 19
fmt = "RR"
func = "float"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "CONV"
prefix = "11"
op = 20
fmt = "RR"
func = "dst"
params = ["rd", "rs"]
enabled = true
# ---- 4B NONE(前缀 10op 6 位)
[[op]]
name = "NOP"
prefix = "10"
op = 0
fmt = "NONE"
func = "none"
params = []
enabled = true
[[op]]
name = "RET"
prefix = "10"
op = 1
fmt = "NONE"
func = "none"
params = []
enabled = true
# ---- 8B RRR(前缀 011op 5 位)
[[op]]
name = "ADD"
prefix = "011"
op = 0
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "SUB"
prefix = "011"
op = 1
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "MUL"
prefix = "011"
op = 2
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "DIV"
prefix = "011"
op = 3
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "MOD"
prefix = "011"
op = 4
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "EXPT"
prefix = "011"
op = 5
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "AND"
prefix = "011"
op = 6
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "OR"
prefix = "011"
op = 7
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "XOR"
prefix = "011"
op = 8
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "NAND"
prefix = "011"
op = 9
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "NOR"
prefix = "011"
op = 10
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "XNOR"
prefix = "011"
op = 11
fmt = "RRR"
func = "uint"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "SHL"
prefix = "011"
op = 12
fmt = "RRR"
func = "uint"
params = ["rd", "rs", "n"]
enabled = true
[[op]]
name = "SHR"
prefix = "011"
op = 13
fmt = "RRR"
func = "full"
params = ["rd", "rs", "n"]
enabled = true
[[op]]
name = "ROL"
prefix = "011"
op = 14
fmt = "RRR"
func = "uint"
params = ["rd", "rs", "n"]
enabled = true
[[op]]
name = "ROR"
prefix = "011"
op = 15
fmt = "RRR"
func = "uint"
params = ["rd", "rs", "n"]
enabled = true
[[op]]
name = "CMP_EQ"
prefix = "011"
op = 16
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_NE"
prefix = "011"
op = 17
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_LT"
prefix = "011"
op = 18
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_LE"
prefix = "011"
op = 19
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_GT"
prefix = "011"
op = 20
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_GE"
prefix = "011"
op = 21
fmt = "RRR"
func = "full"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "GETBIT"
prefix = "011"
op = 22
fmt = "RRR"
func = "none"
params = ["rd", "rs", "bit"]
enabled = true
[[op]]
name = "SETBIT"
prefix = "011"
op = 23
fmt = "RRR"
func = "none"
params = ["rd", "rs", "bit"]
enabled = true
[[op]]
name = "CLRBIT"
prefix = "011"
op = 24
fmt = "RRR"
func = "none"
params = ["rd", "rs", "bit"]
enabled = true
[[op]]
name = "TOGBIT"
prefix = "011"
op = 25
fmt = "RRR"
func = "none"
params = ["rd", "rs", "bit"]
enabled = true
# ---- 8B 010 区(形态位 3 位 + 子 op 2 位)
[[op]]
name = "LOADK"
prefix = "010000"
op = 0
fmt = "IMM"
func = "full"
params = ["rd", "const_id"]
enabled = true
[[op]]
name = "LOAD"
prefix = "010001"
op = 0
fmt = "SLOT"
func = "full"
params = ["rd", "slot"]
enabled = true
[[op]]
name = "STORE"
prefix = "010001"
op = 1
fmt = "SLOT"
func = "full"
params = ["slot", "rs"]
enabled = true
[[op]]
name = "JMP"
prefix = "010010"
op = 0
fmt = "JMP"
func = "none"
params = ["off"]
enabled = true
[[op]]
name = "JT"
prefix = "010011"
op = 0
fmt = "JC"
func = "none"
params = ["rd", "off"]
enabled = true
[[op]]
name = "JF"
prefix = "010011"
op = 1
fmt = "JC"
func = "none"
params = ["rd", "off"]
enabled = true
[[op]]
name = "CALL"
prefix = "010100"
op = 0
fmt = "CALL"
func = "none"
params = ["fn_id"]
enabled = true
[[op]]
name = "CAL"
prefix = "010101"
op = 0
fmt = "CAL"
func = "none"
params = ["fb_id", "slot"]
enabled = true
# ---- 16B SLOT+off(前缀 0010op 4 位)
[[op]]
name = "LOAD_OFF"
prefix = "0010"
op = 0
fmt = "SLOT+off"
func = "full"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STORE_OFF"
prefix = "0010"
op = 1
fmt = "SLOT+off"
func = "full"
params = ["slot", "off", "rs"]
enabled = true
[[op]]
name = "LOAD_PTR"
prefix = "0010"
op = 8
fmt = "RS+off"
func = "full"
params = ["rd", "rs", "off"]
enabled = true
[[op]]
name = "STORE_PTR"
prefix = "0010"
op = 9
fmt = "RS+off"
func = "full"
params = ["rd", "rs", "off"]
enabled = true
[[op]]
name = "STR_LEN"
prefix = "0010"
op = 2
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STR_CMP"
prefix = "0010"
op = 3
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STR_EQ"
prefix = "0010"
op = 4
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STR_MID"
prefix = "0010"
op = 5
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STR_LEFT"
prefix = "0010"
op = 6
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
[[op]]
name = "STR_RIGHT"
prefix = "0010"
op = 7
fmt = "SLOT+off"
func = "none"
params = ["rd", "slot", "off"]
enabled = true
# ---- 16B IMM64(前缀 0011op 4 位;预留不发射)
[[op]]
name = "LOADK64"
prefix = "0011"
op = 0
fmt = "IMM64"
func = "full"
params = ["rd", "imm64"]
enabled = true
# ---- 32B 预留(前缀 0001,op 4 位;形态待定,预留不发射)
[[op]]
name = "JTBL"
prefix = "0001"
op = 0
fmt = "预留"
func = "none"
params = []
enabled = true
[[op]]
name = "STR_CONCAT"
prefix = "0001"
op = 1
fmt = "预留"
func = "none"
params = []
enabled = true
[[op]]
name = "STR_FIND"
prefix = "0001"
op = 2
fmt = "预留"
func = "none"
params = []
enabled = true
[[op]]
name = "STR_REPLACE"
prefix = "0001"
op = 3
fmt = "预留"
func = "none"
params = []
enabled = true
[[op]]
name = "ARR_LOAD"
prefix = "0001"
op = 4
fmt = "预留"
func = "none"
params = []
enabled = true
[[op]]
name = "ARR_STORE"
prefix = "0001"
op = 5
fmt = "预留"
func = "none"
params = []
enabled = true
# ---- 内建 FB14 条;fb_id 唯一 0..14;字段类型命中 type 表;
# 布局偏移编译期按 1/2/4/8 对齐计算,见指令集清单 §8.1)
[[fb]]
name = "TON"
fb_id = 0
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "TOF"
fb_id = 1
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "TP"
fb_id = 2
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "CTU"
fb_id = 3
fields = [["cu", "BOOL"], ["r", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "DCTU"
fb_id = 4
fields = [["cu", "BOOL"], ["r", "BOOL"], ["pv", "DINT"], ["q", "BOOL"], ["cv", "DINT"]]
[[fb]]
name = "CTD"
fb_id = 5
fields = [["cd", "BOOL"], ["ld", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "DCTD"
fb_id = 6
fields = [["cd", "BOOL"], ["ld", "BOOL"], ["pv", "DINT"], ["q", "BOOL"], ["cv", "DINT"]]
[[fb]]
name = "CTUD"
fb_id = 7
fields = [["cu", "BOOL"], ["cd", "BOOL"], ["r", "BOOL"], ["lu", "BOOL"],
["pv", "INT"], ["qu", "BOOL"], ["qd", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "DCTUD"
fb_id = 8
fields = [["cu", "BOOL"], ["cd", "BOOL"], ["r", "BOOL"], ["lu", "BOOL"],
["pv", "DINT"], ["qu", "BOOL"], ["qd", "BOOL"], ["cv", "DINT"]]
[[fb]]
name = "R_TRIG"
fb_id = 9
fields = [["clk", "BOOL"], ["q", "BOOL"]]
[[fb]]
name = "F_TRIG"
fb_id = 10
fields = [["clk", "BOOL"], ["q", "BOOL"]]
[[fb]]
name = "SR"
fb_id = 11
fields = [["S1", "BOOL"], ["R", "BOOL"], ["Q1", "BOOL"]]
[[fb]]
name = "RS"
fb_id = 12
fields = [["SET", "BOOL"], ["RESET1", "BOOL"], ["Q1", "BOOL"]]
[[fb]]
name = "PWM"
fb_id = 13
fields = [["in", "BOOL"], ["pt", "TIME"], ["duty", "REAL"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "RTC"
fb_id = 14
fields = [["enable", "BOOL"], ["date", "DATE"], ["tod", "TOD"]]