|
|
专门处理 AND OR XOR BYTE 这些按位运算的指令的子电路。在此电路内,位数长的整数被拆成字节,以字节为单位进行逻辑运算。
|
|
|
专门处理 AND OR BYTE 这些按位运算的指令的子电路。在此电路内,位数长的整数被拆成字节,以字节为单位进行逻辑运算。
|
|
|
|
|
|
## 设计
|
|
|
|
... | ... | @@ -8,7 +8,7 @@ |
|
|
|
|
|
```rust
|
|
|
pub struct Row {
|
|
|
/// The operation tag, one of AND, OR, XOR
|
|
|
/// The operation tag, one of AND, OR
|
|
|
pub tag: Tag,
|
|
|
/// The byte value of operand 0
|
|
|
pub byte_0: U256,
|
... | ... | @@ -33,7 +33,6 @@ pub enum Tag { |
|
|
Nil,
|
|
|
And,
|
|
|
Or,
|
|
|
Xor,
|
|
|
}
|
|
|
```
|
|
|
|
... | ... | @@ -67,7 +66,7 @@ pub struct BitwiseCircuitConfig<F: Field> { |
|
|
|
|
|
### 列的含义
|
|
|
|
|
|
`BitwiseCircuit`主要用于对两个长度最长的整数进行AND、OR、XOR运算,每一个整数都会被拆成一个一个字节,实际运算时分别对相应位置的byte进行运算。
|
|
|
`BitwiseCircuit`主要用于对两个长度最长的整数进行AND、OR运算,每一个整数都会被拆成一个一个字节,实际运算时分别对相应位置的byte进行运算。
|
|
|
|
|
|
`byte_0`和`byte_1`分别是两个数值的某一个位置上的byte,`byte_2`为`byte_0`和`byte_1`的运算结果,`acc_0`、`acc_1`、`acc_2`分别是`byte_0`、`byte_1`、`byte_2`的累加值,即`acc=byte+acc_pre*256`,`sum_2`为`byte_2`的累加和,即`sum=byte+sum_pre`。
|
|
|
|
... | ... | @@ -91,7 +90,7 @@ pub struct BitwiseCircuitConfig<F: Field> { |
|
|
|
|
|
### LookUp约束
|
|
|
|
|
|
使用lookup对`<tag、byte_0、byte1、byte_2>`进行证明,来源:bitwise,去向:fixed (fxed子电路中有对256位的数值的and、or、xor的计算的枚举)
|
|
|
使用lookup对`<tag、byte_0、byte1、byte_2>`进行证明,来源:bitwise,去向:fixed (fxed子电路中有对256位的数值的and、or 的计算的枚举)
|
|
|
|
|
|
注:只对Tag不为Nil的行进行LookUp
|
|
|
|
... | ... | |