本文是笔者拜读《计算机系统要素》第1章(布尔逻辑)的实践项目,本文的HDL遵循的是书中的语法,并在配套的硬件仿真器中测试成功。

目录

  • 非门
  • 与门
  • 或门
  • 异或门
  • 多路复用
  • 多路分解
  • 多位非门
  • 多位与门
  • 多位或门
  • 多位多路复用
  • 多通道或门
  • 多通道多位多路复用
    • 四通道
    • 八通道
  • 多通道多路分解
    • 四通道
    • 八通道

Nand门(与非门)是最原始的门,其它门都是由该门构建的。

非门


out=Nand(in,true)

CHIP Not {IN in;OUT out;PARTS:// Put your code here:Nand(a = in, b = true, out = out);
}

HDL中的=表示连接,而不是“赋值”。

与门


out = Not(Nand(a,b))

CHIP And {IN a, b;OUT out;PARTS:// Put your code here:Nand(a = a, b = b, out = c);Not(in = c, out = out);
}

或门


out=Nand(Not(a),Not(b))out=Nand(Nand(a,a),Nand(b,b))
Nand(a,a)相当于Not(a)

CHIP Or {IN a, b;OUT out;PARTS:// Put your code here:Not(in = a, out = na);Not(in = b, out = nb);Nand(a = na, b = nb, out = out);
}

异或门


out = Or(And(a,Not(b)), And(Not(a), b))

CHIP Xor {IN a, b;OUT out;PARTS:// Put your code here:Not(in = a, out = na);Not(in = b, out = nb);And(a = a, b = nb, out = out1);And(a = na, b = b, out = out2);Or(a = out1, b = out2, out = out);
}

多路复用

二选一选择器

out = Or(And(Not(sel),a),And(sel,b))

CHIP Mux {IN a, b, sel;OUT out;PARTS:// Put your code here:Not(in = sel, out = nsel);And(a = a, b = nsel, out = out1);And(a = b, b = sel, out = out2);Or(a = out1, b = out2, out = out);
}

多路分解


a=And(in, Not(sel))
b=And(in,sel)

CHIP DMux {IN in, sel;OUT a, b;PARTS:// Put your code here:Not(in = sel, out = nsel);And(a = in, b = nsel, out = a);And(a = in, b = sel, out = b);
}

多位非门

CHIP Not16 {IN in[16];OUT out[16];PARTS:// Put your code here:Not(in = in[0], out = out[0]);Not(in = in[1], out = out[1]);Not(in = in[2], out = out[2]);Not(in = in[3], out = out[3]);Not(in = in[4], out = out[4]);Not(in = in[5], out = out[5]);Not(in = in[6], out = out[6]);Not(in = in[7], out = out[7]);Not(in = in[8], out = out[8]);Not(in = in[9], out = out[9]);Not(in = in[10], out = out[10]);Not(in = in[11], out = out[11]);Not(in = in[12], out = out[12]);Not(in = in[13], out = out[13]);Not(in = in[14], out = out[14]);Not(in = in[15], out = out[15]);
}

多位与门

CHIP And16 {IN a[16], b[16];OUT out[16];PARTS:// Put your code here:And(a = a[0], b = b[0], out = out[0]);And(a = a[1], b = b[1], out = out[1]);And(a = a[2], b = b[2], out = out[2]);And(a = a[3], b = b[3], out = out[3]);And(a = a[4], b = b[4], out = out[4]);And(a = a[5], b = b[5], out = out[5]);And(a = a[6], b = b[6], out = out[6]);And(a = a[7], b = b[7], out = out[7]);And(a = a[8], b = b[8], out = out[8]);And(a = a[9], b = b[9], out = out[9]);And(a = a[10], b = b[10], out = out[10]);And(a = a[11], b = b[11], out = out[11]);And(a = a[12], b = b[12], out = out[12]);And(a = a[13], b = b[13], out = out[13]);And(a = a[14], b = b[14], out = out[14]);And(a = a[15], b = b[15], out = out[15]);
}

多位或门

CHIP Or16 {IN a[16], b[16];OUT out[16];PARTS:// Put your code here:Or(a = a[0], b = b[0], out = out[0]);Or(a = a[1], b = b[1], out = out[1]);Or(a = a[2], b = b[2], out = out[2]);Or(a = a[3], b = b[3], out = out[3]);Or(a = a[4], b = b[4], out = out[4]);Or(a = a[5], b = b[5], out = out[5]);Or(a = a[6], b = b[6], out = out[6]);Or(a = a[7], b = b[7], out = out[7]);Or(a = a[8], b = b[8], out = out[8]);Or(a = a[9], b = b[9], out = out[9]);Or(a = a[10], b = b[10], out = out[10]);Or(a = a[11], b = b[11], out = out[11]);Or(a = a[12], b = b[12], out = out[12]);Or(a = a[13], b = b[13], out = out[13]);Or(a = a[14], b = b[14], out = out[14]);Or(a = a[15], b = b[15], out = out[15]);
}

多位多路复用

CHIP Mux16 {IN a[16], b[16], sel;OUT out[16];PARTS:// Put your code here:Mux(a = a[0], b = b[0], sel = sel, out = out[0]);Mux(a = a[1], b = b[1], sel = sel, out = out[1]);Mux(a = a[2], b = b[2], sel = sel, out = out[2]);Mux(a = a[3], b = b[3], sel = sel, out = out[3]);Mux(a = a[4], b = b[4], sel = sel, out = out[4]);Mux(a = a[5], b = b[5], sel = sel, out = out[5]);Mux(a = a[6], b = b[6], sel = sel, out = out[6]);Mux(a = a[7], b = b[7], sel = sel, out = out[7]);Mux(a = a[8], b = b[8], sel = sel, out = out[8]);Mux(a = a[9], b = b[9], sel = sel, out = out[9]);Mux(a = a[10], b = b[10], sel = sel, out = out[10]);Mux(a = a[11], b = b[11], sel = sel, out = out[11]);Mux(a = a[12], b = b[12], sel = sel, out = out[12]);Mux(a = a[13], b = b[13], sel = sel, out = out[13]);Mux(a = a[14], b = b[14], sel = sel, out = out[14]);Mux(a = a[15], b = b[15], sel = sel, out = out[15]);
}

多通道或门

CHIP Or8Way {IN in[8];OUT out;PARTS:// Put your code here:Or(a = in[0], b = in[1], out = out1);Or(a = in[2], b = in[3], out = out2);Or(a = in[4], b = in[5], out = out3);Or(a = in[6], b = in[7], out = out4);Or(a = out1, b = out2, out = out5);Or(a = out3, b = out4, out = out6);Or(a = out5, b = out6, out = out);
}

多通道多位多路复用

四通道

/*** 4-way 16-bit multiplexor:* out = a if sel == 00*       b if sel == 01*       c if sel == 10*       d if sel == 11*/CHIP Mux4Way16 {IN a[16], b[16], c[16], d[16], sel[2];OUT out[16];PARTS:// Put your code here:Mux16(a = a, b = b, sel = sel[0], out = out1);Mux16(a = c, b = d, sel = sel[0], out = out2);Mux16(a = out1, b = out2, sel = sel[1], out = out);
}

八通道

/*** 8-way 16-bit multiplexor:* out = a if sel == 000*       b if sel == 001*       etc.*       h if sel == 111*/CHIP Mux8Way16 {IN a[16], b[16], c[16], d[16],e[16], f[16], g[16], h[16],sel[3];OUT out[16];PARTS:// Put your code here:Mux4Way16(a = a, b = b, c = c, d = d, sel = sel[0..1], out = out1);Mux4Way16(a = e, b = f, c = g, d = h, sel = sel[0..1], out = out2);Mux16(a = out1, b = out2, sel = sel[2], out = out);
}

多通道多路分解

四通道

/*** 4-way demultiplexor:* {a, b, c, d} = {in, 0, 0, 0} if sel == 00*                {0, in, 0, 0} if sel == 01*                {0, 0, in, 0} if sel == 10*                {0, 0, 0, in} if sel == 11*/CHIP DMux4Way {IN in, sel[2];OUT a, b, c, d;PARTS:// Put your code here:DMux(in = in, sel = sel[0], a = outa, b = outb);DMux(in = outa, sel = sel[1], a = a, b = c);DMux(in = outb, sel = sel[1], a = b, b = d);
}

八通道

/*** 8-way demultiplexor:* {a, b, c, d, e, f, g, h} = {in, 0, 0, 0, 0, 0, 0, 0} if sel == 000*                            {0, in, 0, 0, 0, 0, 0, 0} if sel == 001*                            etc.*                            {0, 0, 0, 0, 0, 0, 0, in} if sel == 111*/CHIP DMux8Way {IN in, sel[3];OUT a, b, c, d, e, f, g, h;PARTS:// Put your code here:DMux(in = in, sel = sel[2], a = outa, b = outb);DMux4Way(in = outa, sel = sel[0..1], a = a, b = b, c = c, d = d);DMux4Way(in = outb, sel = sel[0..1], a = e, b = f, c = g, d = h);
}

【计算机系统要素】使用Nand实现各种基本逻辑门相关推荐

  1. 计算机系统要素 - 布尔逻辑/布尔运算构建ALU

    1. 布尔门 布尔门是对布尔函数的物理实现,简单的布尔门相互连接可以实现复杂芯片的功能 1.1 布尔代数/布尔函数 布尔代数处理布尔型(二进制型)数值 布尔函数是指输入输出数值均为布尔型数值的函数 计 ...

  2. 计算机系统要素:硬件描述语言HDL简介

    这个系列是我近期学习The Elements of Computing Systems(中文配套书为<计算机系统要素>)的学习笔记,这是一个网络公开课程,旨在教授任何人从零开始实现计算机构 ...

  3. 计算机系统要素-从零开始构建现代计算机 项目代码

    <计算机系统要素-从零开始构建现代计算机>是一本好书,这阵子花业余时间学习,并跟着做了章节后面的项目,收获很大.已经完成了前面9章的项目内容,目前正在进行第10章,编译器的编写. 前面9章 ...

  4. 计算机系统要素-从零开始构建现代计算机--第一章,01-用与非门实现与戓非

    第一章,01-用与非门实现与戓非 简介 实现的逻辑门 Nand原理 Nand真值表 符号约定 用Nand实现And 真值表 转换为Nand表示 电路连接 用Nand实现Or 真值表 转换为Nand表示 ...

  5. 《计算机系统要素》配套软件和资料下载

    <计算机系统要素>配套软件和资料下载(博文视点链接) TECS Software Suite 2.5 软件和资料打包下载(约32MB): (包括配套软件.配套软件源代码.实践项目源文件.软 ...

  6. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)

    过年期间一直在啃一本书,学习计算机组成原理. 这是一本很棒的书,是一个基于项目的学习过程.可以让人理解的很深刻. coursera上有这本书前半部分的教程,是由书的作者团队们开的课,个人认为很棒,可惜 ...

  7. 计算机系统要素高清pdf,计算机系统要素:从零开始构建现代计算机[PDF][43.21MB]...

    内容简介 本书通过展现简单但功能强大的计算机系统之构建过程,为读者呈现了一幅完整.严格的计算机应用科学大图景.本书作者认为,理解计算机工作原理的最好方法就是亲自动手,从零开始构建计算机系统. 通过12 ...

  8. 计算机系统要素-从零开始构建现代计算机-答案

    答案 github 地址 这本书主要讲解了计算机原理(1-5章).编译原理(6-11章).操作系统相关知识(12章).不要看内容这么多,其实这本书的内容非常通俗易懂,翻译也很给力.每一章背后都有对应的 ...

  9. 计算机系统要素-Project1实操笔记

    目录 1 软件安装(环境搭建) 2 Project 1实操记录 2.1 Project 1目标: 2.2 实现方法一:用两个[Nand]实现一个[And] 2.3 实现方法二:先实现一个[非门],再用 ...

最新文章

  1. 【CVPR2020】目标检测方向论文更新
  2. 如何通过日期属性对数组进行排序
  3. UVa11039 Building designing(贪心算法)
  4. robomaster裁判系统服务器,2018裁判系统调试组网完全攻略
  5. spring cloud 总结
  6. 新闻 | 聚焦技术领域现状与发展阿里巴巴知识图谱专场亮相云栖大会 阿里知识图谱亮相云栖大会产学深度交流推进业务创新
  7. lnmp环境配置laravel项目白屏问题
  8. 输入3个双精度实数,分别求出它们的和,平均值,平方和以及平方和的开方
  9. Kotlin实战【三】表示与选择
  10. 编译原理完整学习笔记(七):优化代码
  11. Android Socket 编程(WIFI 和 ADB)
  12. 如何在Pidgin中为您的域帐户设置Google Talk
  13. 分布式块存储Longhorn简介
  14. 考研英语阅读理解技巧总结
  15. 2、ehcache与springBoot整合
  16. touch.pageX/touch.screenX/touch.clientX的区别
  17. Ubuntu 22.04.1 配置 LXR 阅读Linux kernel源码
  18. 方法重写的两同两小一大原则
  19. Linux如何检测到僵尸进城,如何在linux下查看僵尸进程
  20. android KK上,前摄,对于normal、zsd、facebeauty拍照,实现mirror

热门文章

  1. ddl语句(数据库ddl语句)
  2. OpenCV+Zbar二维码及条形码识别
  3. 【半导体先进工艺制程技术系列】HKMG工艺技术(下)
  4. android 自动修改ip,Android实现编程修改手机静态IP的方法
  5. 2021-2027全球与中国台式X射线衍射仪市场现状及未来发展趋势
  6. erlang的Emakefile和批处理启动
  7. J-Flash的Hex/Bin文件的烧录
  8. org.springframework.context.annotation.AnnotationConfigApplicationContext has been closed already
  9. 我的第一个Android应用——计算器总结
  10. c语言驾照考试管理系统,c1驾照模拟考试软件