1、Abstract
大规模集成电路的设计对于设计过程中的变化,噪声非常敏感,因此促进了新型数字电路的设计方法——随机逻辑(Stochastic Logic)。这种方法的区别在于:将传统数字电路在逻辑域上的运算转移到概率域上进行运算,所以它是能够处理概率性的信号,因而能够处理一些错误和不确定性。在这篇文章中,我们将随机逻辑的概念应用到一个可重置的体系结构中并且利用这个体系结构进行运算操作。当然,随机逻辑也存在错误,所以文章的最后我们分析这些的错误的来源:approximation,quantization,random fluctuation。
2、设计随机逻辑
2.1、合成多项式
将多项式转化成伯恩斯坦多项式,然后直接利用SC就可以实现伯恩斯坦多项式。电路如下:
2、合成非多项式函数
那如果我们碰到是非多项式怎么办呢?
数学上已经证明出来,伯恩斯坦多项式多项式是可以合成任意一元函数的:
详细的大家可以查看这个链接:https://zhuanlan.zhihu.com/p/27804355
因此,接下来就是求出伯恩斯坦多项式中的伯恩斯坦系数,利用优化理论求解这个方程 (这其实是一个Least-Square问题):
但是需要注意的是,处理的函数需要是在
x
∈
[
0
,
1
]
x\in [0,1]
x∈[0,1]时,
f
(
x
)
∈
[
0
,
1
]
f(x)\in [0,1]
f(x)∈[0,1]。当然,如果值域不在这个范围内,可以利用
S
c
a
l
i
n
g
Scaling
Scaling,将函数映射到
[
0
,
1
]
[0,1]
[0,1]的范围内。
3、随机体系结构
这个体系结构包含三个部分:
1、随机数产生单元**(Randomizer Unit):利用LFSR(线性反馈移位寄存器)产生伪随机序列,然后再利用比较产生代表需要数值的随机序列;
2、SC处理单元:用来处理这些输入的比特流序列;
3、随机数译码单元(De-Randomizer Unit)**:利用计数器将随机序列译成二进制表示的比特流。
接下来我们主要描述一下随机数产生单元和随机数译码单元。
3.1 Randmizer Unit
在之前的博客:https://blog.csdn.net/qq_34037046/article/details/83822305已经说过,利用LFSR产生伪随机序列,而一个
L
L
L位(
2
L
≤
N
2^{L}\le N
2L≤N,
N
N
N表示输入随机比特流的长度)的LFSR最多能够产生
2
L
−
1
2^{L}-1
2L−1个状态,即
1
,
2
,
.
.
.
,
2
L
−
1
{1,2,...,2^{L}-1}
1,2,...,2L−1,如果比较器的设置的值为
C
C
C,那么输入随机序列
R
R
R为1的概率为
P
(
R
<
C
)
=
∑
k
=
1
C
−
1
P
(
R
=
k
)
=
C
−
1
2
L
−
1
P(R<C)=\sum_{k=1}^{C-1}P(R=k)=\frac{C-1}{2^{L}-1}
P(R<C)=∑k=1C−1P(R=k)=2L−1C−1。为了得到一个任意的概率值
p
p
p,那么我们的
C
C
C应该设置为:
C
=
r
o
u
n
d
(
p
(
2
L
−
1
)
)
+
1
C=round(p(2^{L}-1))+1
C=round(p(2L−1))+1
所以
p
p
p也被量化成:
p
′
=
r
o
u
n
d
(
p
(
2
L
−
1
)
)
2
L
−
1
p'=\frac{round(p(2^{L}-1))}{2^{L}-1}
p′=2L−1round(p(2L−1))
3.3、The De-Randomizer Unit
如果我们的序列长度时
N
=
2
M
N=2^{M}
N=2M,那么计数器的长度为
M
+
1
M+1
M+1(因为序列的长度为
N
N
N,那么它的状态总共有
N
+
1
N+1
N+1种)。下面我们计算一下De-Randomizer译出来的值
d
d
d的均值:
所以译码器翻译出来的值的期望就是代表的随机序列每一位为1的概率。
4、误差分析
4.1、The error due to the Bernstein approximation
这个误差
e
1
a
v
g
e_{1avg}
e1avg仅仅取决于原来的
g
(
x
)
g(x)
g(x)以及伯恩斯坦的多项式的度数,当伯恩斯坦多项式的
n
n
n越大,误差也会越小。
4.2、The quantization error
首先对于任意概率值
p
p
p的量化误差是:
∣
p
−
p
′
∣
≤
1
2
(
2
L
−
1
)
|p-p'|\le \frac{1}{2(2^{L}-1)}
∣p−p′∣≤2(2L−1)1
然后由于
p
p
p的误差最终肯定会引起函数值的误差即:
省略的证明如下:
4.3、The error due to random fluctuations
个人理解:整个误差分析的三个部分,就是从将函数近似成伯恩斯坦多项式开始产生了误差;然后到由随机数产生单元产生随机数确定多项式变量的值,引起了误差;到最后,译码单元将随机比特流转换成二进制表示的比特流,产生了误差,这部分是由于随机抖动引起的 (Random Fluctuation),即虽然我们前面在De-randomizer单元证明了最后输出的
y
y
y的均值就是随机序列每一位为1的概率
p
′
p'
p′(之所以是
p
′
p'
p′,是因为由于随机数产生单元引起的误差,这并不是本来的输出
Y
Y
Y每一位为1 的概率),但是这只是 均值,也会由于概率性,而产生波动,这就可以看成是一次
N
N
N重的伯努利实验,因此它的误差即均方差就是
p
′
(
1
−
p
′
)
N
\sqrt\frac{p'(1-p')}{N}
Np′(1−p′)。
(注:这和前面的由随机数产生单元产生概率值得过程基本一致,但是会有差别,前面是由LFSR产生伪随机数,这部分产生的是伪随机数,所以它所有的状态以及状态产生得顺序都是可以知道的,也因此它得每一位的概率值能准确地由一串序列中的1的个数反应,但是后面这块儿是不一样的,它是由处理单元进行计算得到了输出端的概率值 p ′ p' p′,然后利用这串比特流中的1的个数表示这个概率,这个过程只能说是依概率收敛到 p ′ p' p′,所以它会有波动,也就产生了误差)