简单计算机的内部结构以及构成各组件的hdl代码

Computer.hdl

CHIP Computer {IN reset;PARTS:ROM32K(address=Pcout, out=ROMins);CPU(inM=Memoryout, instruction=ROMins, reset=reset, outM=Memoryin, writeM=Memoryload, pc=Pcout, addressM=Memoryaddress);Memory(in=Memoryin, load=Memoryload, address=Memoryaddress, out=Memoryout);}

CPU.hdl

CHIP CPU {IN  inM[16],         instruction[16], reset;           OUT outM[16],        writeM,          addressM[15],    pc[15];          PARTS://Select A instruction or C instruction,Mux16(a=instruction, b=ResultALU, sel=instruction[15], out=ARegisterin);Nand(a=instruction[15],b=instruction[15],out=outa);//out=1,A instruction;out=0,C instructionOr(a=instruction[5], b=outa, out=ARegisterload); ARegister(in=ARegisterin, load=ARegisterload, out=ARegisterout, out[0..14]=addressM); //DRegister loadAnd(a=instruction[4], b=instruction[15], out=DRegisterload);DRegister(in=ResultALU, load=DRegisterload, out=DRegisterout);//Select A or MMux16(a=ARegisterout, b=inM, sel=instruction[12], out=yinALU);//ALU ALU(x=DRegisterout, y=yinALU, zx=instruction[11], nx=instruction[10], zy=instruction[9], ny=instruction[8], f=instruction[7], no=instruction[6], out=ResultALU, zr=Zr, ng=Ng, out=outM);//Glue logic for JUMP Nand(a=Ng,b=Ng,out=Ngnot);Nand(a=Zr,b=Zr,out=Zrnot);And(a=Zrnot, b=Ngnot, out=PositiveControl); And(a=instruction[2], b=Ng, out=NegativeJump);And(a=instruction[1], b=Zr, out=ZeroJump);And(a=instruction[0], b=PositiveControl, out=PositiveJump);//Any value of NegativeJump,ZeroJump,PositiveJump equals 1, Jump will happenOr(a=NegativeJump, b=PositiveJump, out=Jumpa);Or(a=ZeroJump, b=Jumpa, out=JumpResult); //Only C instruction could jumpAnd(a=JumpResult, b=instruction[15], out=Loadin); //PC,input is from A registerPC(in=ARegisterout, load=Loadin, inc=true, reset=reset, out[0..14]=pc);And(a=instruction[15], b=instruction[3], out=writeM);
}

Memory.hdl

CHIP Memory {IN in[16], load, address[15];OUT out[16];PARTS:DMux4Way(in=load, sel=address[13..14], a=RAMa, b=RAMb, c=Screenin, d=Keyboardin);Or(a=RAMa, b=RAMb, out=RAMin);RAM16K(in=in, load=RAMin, address=address[0..13], out=RAMout);Keyboard(out=Keyboardout); Screen(in=in, load=Screenin, address=address[0..12], out=Screenout);Mux4Way16(a=RAMout, b=RAMout, c=Screenout, d=Keyboardout, sel=address[13..14], out=out);
}

PC.hdl

CHIP PC {IN in[16],load,inc,reset;OUT out[16];PARTS:Inc16(in=Ina, out=Incout);Mux8Way16(a=Ina, b=in, c=Incout, d=in, e=false, f=false, g=false, h=false, sel[0]=load, sel[1]=inc, sel[2]=reset, out=Mux8out);Register(in=Mux8out, load=true, out=out, out=in1);
}

Nand2Tetris 计算机结构相关推荐

  1. 计算机结构优化,计算机结构与程序优化.ppt

    <计算机结构与程序优化.ppt>由会员分享,可在线阅读,更多相关<计算机结构与程序优化.ppt(116页珍藏版)>请在人人文库网上搜索. 1.计算机结构与程序优化,Introd ...

  2. 计算机的网络与结构,计算机结构与组成29-网络.ppt

    计算机结构与组成29-网络 CS61C L221 Performance ? UC Regents I/O Review I/O gives computers their 5 senses I/O ...

  3. 电子科技大学 高级计算机结构,电子科技大学计算机系统结构作业答案

    电子科技大学计算机系统结构作业答案 (26页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 1.90 积分 查看考卷--作业提交1 当前得分:5 分(总分: ...

  4. 计算机组成与体系结构——计算机结构——2020.11.19

    (一)计算机结构在这里插入图片描述 (二)运算器: 算术逻辑单元ALU:数据的算术运算和逻辑运算 累加寄存器AC:通用寄存器,为ALU提供一个工作区,用在暂存数据 数据缓存寄存器DR:写内存中,暂存指 ...

  5. 在计算机结构的简化模型中,2.4 计算机结构的简化模型

    计算机组成 2 计算机基本结构 2.4 计算机结构的简化模型 为了掌握计算机的内部结构,我们要先来构建一个计算机的简化模型.这个模型能够体现计算机内部的关键之处,又足够的简单,便于理解. 这个冯诺依曼 ...

  6. Nand2Tetris Project1

    Nand2Tetris 从与非门到俄罗斯方块Project 1 Nand2Tetris 是以色列希伯来大学两位教授在Coursera上的发布的课程,主要讲述了从与非门到构建一个完整的虚拟计算机,再到用 ...

  7. 【Nand2tetris】Project01

    [Nand2tetris]Project01 用nand门来实现15个simple chips a Nand b = Not(a And b) Nand Truth Table: a b a Nand ...

  8. nand2tetris 第二章 布尔运算

    简介 nand2tetris 主页 coursera 课程主页:提交作业,视频加载不出来 B站视频搬运:和 coursera 上视频分章节一直 仓库地址 gitee github 第二章 布尔运算 第 ...

  9. nand2tetris 布尔函数和和门逻辑路线图

    简介 nand2tetris 主页 coursera 课程主页:提交作业,视频加载不出来 B站视频搬运:和 coursera 上视频分章节一直 仓库地址 gitee github 第一章 布尔函数和和 ...

最新文章

  1. 【分享】博客美化(6)为你的博文自动添加目录
  2. Android--应用开发3(Android layout XML属性)
  3. 小学计算机笔记,小学信息技术教师读书笔记
  4. 每日一皮:年轻时的你,是不是也各种重构欲望?
  5. openssl之EVP系列之1---算法封装
  6. 黑马程序员.bobo.DAY.2
  7. python数字处理技巧(1): 精度舍入、精确运算、格式化、进制数、大数打包解包、复数、NaN、分数
  8. Spring Boot 中使用 @Transactional 注解配置事务管理
  9. android 自定义相机,Camera,相机遮罩层
  10. linux major头文件_Linux的字符设备
  11. python定位元素方法_Python+webdriver定位元素的几种方法
  12. linux设备连接磁带机,Linux磁带机设备绑定
  13. 博弈论之:威胁与承诺
  14. 微信小程序开发上线注意事项
  15. 运放失调电压和开环增益,PSRR,CMRR的关系
  16. origin2018 柱状图_学术干货 | 科研人请收藏—Origin画出双Y轴柱状图
  17. 栈区的使用规则、压栈和出栈、栈区先进后出,后进先出
  18. linux 下部署tomcat问题
  19. Proof of Stake-股权证明 系列3
  20. 公司接口裸奔10年了,有必要用API接口签名验证吗?

热门文章

  1. 我读《写给大家看的设计书》
  2. php画拼图滑动验证,滑动拼图验证
  3. 通过opencv标记图片以及写入Excel小方法
  4. 【Threejs效果:挖空几何体】ThreeBSP实现墙体挖洞
  5. vs2013编译ffmpeg之四十二 zvbi
  6. ArcEngine编辑模块——批量删除要素
  7. SELECT数据查询例题4——分组查询
  8. 2014网易游戏实习生面试体验
  9. 腾讯课堂课程汇总 CourseList(1000000-1001000)
  10. 【STM32】标准库-SDIO-SDHC