https://mp.weixin.qq.com/s/jLUz757FQZjMEYzYb2AIww

 
MOS6502是简单,但是曾经相当流行的一款CPU。网上有很多模拟程序可供学习使用。这里使用一个较为精简的Verilog项目,介绍MOS6502这款CPU的运行机制,然后使用jchdl进行模拟。
 
参考项目:https://github.com/Arlet/verilog-6502
该项目只包含两个文件:alu.v, cpu.v。这里首先介绍alu.v。
 
 
1. 注释部分简介了ALU的主要功能,根据op的不同,对AI/BI进行运算。
 
2. 输入输出接口
 
需要关注的有时钟(clk), 操作类型(op),运算数和进位输入(AI, BI, CI),运算结果和进位输出(OUT, CO),标志位输出(V, Z, N, HC)等
 
3. 内部变量
 
4. 计算逻辑运算的结果
 
op是经过精心设计的,如果op[1:0]等于2'b11,则alu执行AI和BI的加减运算:
此时temp_logic中保存运算数AI,以期参与后续运算。
 
相反的,op[1:0]的另外集中组合,则temp_logic中直接存放逻辑运算结果。这几种情况下,op[3:2]都为2'b11,不存在其他情况。
 
5. 计算算术运算结果
当op[3:2]为2'b11时,temp_logic中已经是逻辑运算结果了,所以无需temp_BI参加运算,故而直接置零。
 
当op[3:2]为其他值时,则temp_BI缓存BI的值。根据op的设计,此种情况下,op[1:0]的值为2'b11, temp_logic中保存的是AI。
  1. A+B: temp_BI直接缓存BI的值,后续参与运算。
  1. A-B:减法运算需要对BI求2的补码,即取反加一,这里先行取反。
  1. A+A:temp_BI缓存temp_logic的值,此时temp_logic中存的是AI的值,所以是A+A。
 
6. 计算运算结果
这里把temp_logic和temp_BI相加,计算最终结果。
 
需要指出的是,当运算为A - B时,需要对BI取反加一以求补码。上面只进行了取反,而没有加一,所以要加的1只能来自于adder_CI。adder_CI来自于输入CI:
 
也没有表明当为减法是,adder_CI或CI为1。查询MOS6502文档之后得知,MOS6502若要执行减法,需要先执行一条把进位置1的指令。
 
7. 更新进位
 
8. BCD的运算
MOS6502可以把AI, BI当成BCD格式(每四位表示一位十进制数)进行运算,并输出BCD格式的数字到OUT中。
BCD运算与二进制运算的区别,主要体现在进位上:
 
temp_l[3:1]大于等于5,即代表temp_l[3:0]大于等于10,在BCD格式下,需要进位。
 
其他部分这里不做解释。
 

jchdl - RTL实例 - MOS6502 ALU (Verilog)的更多相关文章

  1. jchdl - RTL实例 - MOS6502 ALU

    https://mp.weixin.qq.com/s/nMxYVC2djk7DdAforerZPA   使用jchdl RTL实现MOS6502 CPU的ALU.   参考链接 https://git ...

  2. jchdl - RTL实例 - MOS6502 SoC

    https://mp.weixin.qq.com/s/H2UBmZa9fpM6_FM2_MucTQ   实现一个SoC作为顶层模块,包含Cpu.Mem两个子模块,并驱动运行.   参考链接 https ...

  3. jchdl - RTL实例 - MOS6502 CPU

    https://mp.weixin.qq.com/s/OguQKMU64GGdinCJjgyeKw   实现MOS6502 CPU,主要是实现状态机.   参考链接 https://github.co ...

  4. jchdl - RTL实例 - MOS6502 Mem

    https://mp.weixin.qq.com/s/ST8q-VWOT47kcYg10-4AQw   实现一个简单的内存模块,匹配MOS6502 CPU使用.   参考链接 https://gith ...

  5. jchdl - RTL实例 - Counter4

    https://mp.weixin.qq.com/s/xtvMj5f-Uvx3vesVnH0P_A   计数器.   参考链接 https://github.com/wjcdx/jchdl/blob/ ...

  6. jchdl - RTL实例 - Adder

    https://mp.weixin.qq.com/s/9S29BCTcJfbpR62ALjSidA   加法器.   参考链接 https://github.com/wjcdx/jchdl/blob/ ...

  7. jchdl - RTL实例 - Mux

    https://mp.weixin.qq.com/s/OmQRQU2mU2I5d-qtV4PAwg   二选一输出.   参考链接 https://github.com/wjcdx/jchdl/blo ...

  8. jchdl - RTL实例 - AndReg

    https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A   输入两组线相与,结果输出到寄存器.   参考链接 https://github.com/wjcd ...

  9. jchdl - RTL实例 - AndAnd

    https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA   AndAnd是三输入与门模块,输出为相与的结果.   参考链接 https://github.c ...

随机推荐

  1. 前端福利,用 JS 就能实现抖音养号等诸多功能

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  2. Linux目录、文件的管理

    centos目录结构 ls / 查看根目录下有哪些文件或者目录 bin 可执行文件的目录 sbin 存放root用户可执行文件目录 etc 配置文件 boot 引导文件 home 普通用户宿主目录 l ...

  3. Coursera课程笔记----计算导论与C语言基础----Week 6

    理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...

  4. HBuilderX 打包 uniapp 项目 图片路径不显示(不正确)

    打包h5项目本地服务运行正常 部署后页面显示空白 在根目录manifest.json中配置h5下的publicPath即可 "h5" : { "template" ...

  5. [C#] StringFormat详解之文本方向、对齐

    在使用GDI方式处理文本时,往往会用到StringFormat.里面的某些点有点反直觉,不够直观,所以本篇就通过图文的方式去讲解一下. 本篇内容仅涉及到文本方向.对齐的相关内容. 如有错误.不妥之处, ...

  6. JDBC03 Statement接口

    Statement接口 用于执行静态SQL语句并返回它所生成结果的对象 三种Statem类 Statement:由createStatement创建,用于发送简单的SQL语句(不带参数的),会有SQL ...

  7. HDU 2017 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2017 题目大意:给你段字符串,求出字符串中含有数字字符的个数 解题思路: 字符串输入输出的基本应用:h ...

  8. Redis学习笔记(七) 数据库

    Redis 服务器将所有的数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDB: struct redisServer{ //一个数组保存着服务器中的 ...

  9. .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证

    .Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...

  10. 关于键盘事件-查询:有多个input框,任意一个支持enter键查询

    应用场景:同一个界面有多个input框支持任意一个Enter查询. 实现:在input框中添加onkeypress="函数名()". 函数里面编写对应键盘code值,在里面直接调用 ...