计算机系统要素中的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)
符合要求
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)
符合要求
相关文章推荐
- 转-计算机系统要素CPU的硬件实现
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- c++内存模型------计算机系统核心概念及软硬件实现
- Android Sip学习(二)Android VoIP系统实现原理
- Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理)
- ARM linux系统调用的实现原理
- 四位计算机的原理及其实现
- 剖析Asp.Net路由系统实现原理
- linux 系统调用中断劫持实现—原理和代码
- 操作系统原理(一)——系统调用的原理及实现
- linux中mmap系统调用原理分析与实现
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- 1.计算机原理实验及实现
- 原理与实现:计算机和操作系统
- 从计算机系统角度去理解语言类型转换原理
- 四位计算机的原理及其实现
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能
- Android Sip学习(二)Android VoIP系统实现原理
- 计算机组成原理之系统总线
- Linux VFS中write系统调用实现原理