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

最近在学习《计算机系统系统要素-从零构建现代计算机》,在实现第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)

符合要求




    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值