計算機系統要素中的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)

符合要求




    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章