您的位置:首页 > 理论基础

计算机系统要素中的1位寄存器实现的数学原理

2018-01-26 21:42 281 查看
最近在学习《计算机系统系统要素-从零构建现代计算机》,在实现第3章第一个组件也就是Bit.hdl时,遇到了一些疑难,这里把解决办法和思路总结一下.

Bit组件要求实现

If load[t] == 1 then out[t+1] = in[t]

                else out does not change (out[t+1] = out[t])

那么思路是用一个Mux和一个DFF实现,并且Mux的输出端要连到DFF的in端,关键点是以谁的out作为最后的输出.

我开始写的代码为

Mux(a=d,b=in,sel=load,out=c     //Mux的输出连到DFF的in端

,out=out);    //Mux.out作为整个输出

DFF(in=c,out=d); 

测试不过。

然后看了网上的答案为

Mux(a=d,b=in,sel=load,out=c); 

    DFF(in=c,out=d,out=out); 

经过研究,终于搞懂了两个做法的差异,总结如下

第一个电路的数学模型为

Mux.a=Dff.out(t)

Mux.b=Bit.in(t)

Mux.sel(t)=load(t)

Mux.out(t)=Mux.sel(t)?Mux.b(t):Mux.a(t)

Dff.in(t)=Mux.out(t)

Dff.out(t)=Dff.in(t-1)

Bit.out(t)=Mux.out(t)

此时有

Bit.out(t)=Mux.out(t)=Mux.sel(t)?Mux.b(t):Mux.a(t)

=load(t)?in(t):Dff.out(t)

=load(t)?in(t):Dff.in(t-1)

=load(t)?in(t):Mux.out(t-1)

=load(t)?in(t):Bit.out(t-1)

显然和要求不符

第二个电路的数学模型为

Mux.a(t)=Dff.out(t)

Mux.b(t)=Bit.in(t)

Mux.sel(t)=load(t)

Mux.out(t)=Mux.sel(t)?Mux.b(t):Mux.a(t)

Dff.in(t)=Mux.out(t)

Dff.out(t)=Dff.in(t-1)

Bit.out(t)=Dff.out(t)

于是有

Bit.out(t+1)=Dff.out(t+1)=Dff.in(t)=Mux.out(t)

=Mux.sel(t)?Mux.b(t):Mux.a(t)

=load(t)?Bit.in(t):Dff.out(t)

=load(t)?Bit.in(t):Bit.out(t)

符合要求

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息