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

 
实现一个SoC作为顶层模块,包含Cpu、Mem两个子模块,并驱动运行。
 
参考链接
 
1.创建Soc.java, 并生成构造方法和logic()方法
 
2. 根据逻辑原理,添加输入输出接口
输入输出线作为类成员存在。使用注解标明是input port还是output port。
 
内部模块和信号:
 
3. 在构造方法中搜集输入输出线并调用construct()方法
首先调用父类即Module类的构造方法,以构建模块hierarchy。
然后逐个把输入输出参数与input/output port对应上。
然后调用construct()方法构造模块(调用一次logic()方法,搜集模块的assign/always代码块、子模块)。
 
 
4. 在logic()方法中创建assign/always代码块,以及子模块
 
 
5. 创建inst静态方法方便后续使用
 
6. 创建main方法执行验证
SoC只需要复位后不停地驱动时钟跳动,CPU的状态机即可运行,从Mem中取得指令,并按照指令执行。
 
运行结果为:
 
这是定义在Mem中的一段代码运行时,CPU状态机的变化,以及部分内存值的变化。
 
代码如下(可以参考Mem模块):
这段代码跳到一个子程序$0010(JSR $0010),执行几个指令,然后返回(RTS)。返回之后执行跳转指令(JMP $0002),再一次跳到子程序$0010,如此循环下去。
 
 
7. 生成Verilog
生成定制化模块名:
 
调用toVerilog()方法生成Verilog实现。
 
执行结果如下:

jchdl - RTL实例 - MOS6502 SoC的更多相关文章

  1. jchdl - RTL实例 - MOS6502 ALU

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

  2. jchdl - RTL实例 - MOS6502 CPU

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

  3. jchdl - RTL实例 - MOS6502 Mem

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

  4. jchdl - RTL实例 - MOS6502 ALU (Verilog)

    https://mp.weixin.qq.com/s/jLUz757FQZjMEYzYb2AIww   MOS6502是简单,但是曾经相当流行的一款CPU.网上有很多模拟程序可供学习使用.这里使用一个 ...

  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. 环境篇:Atlas2.0.0兼容CDH6.2.0部署

    环境篇:Atlas2.0.0兼容CDH6.2.0部署 Atlas 是什么? Atlas是一组可扩展和可扩展的核心基础治理服务,使企业能够有效地满足Hadoop中的合规性要求,并允许与整个企业数据生态系 ...

  2. leetCode刷题 | 两数之和

    两数之和: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  3. java使用window builder图形界面开发简易计算器

    界面效果: /** * */ package calculator; import java.awt.BorderLayout; import java.awt.EventQueue; import ...

  4. SAP登录消息提醒

      1功能说明 在相应用户登录时,给其提示相关信息. 2功能实现 2.1函数实现 在函数NAVIGATION_SET_START_TCODE中注册要监听的用户和程序的事务代码,当用户登录时,将自动运行 ...

  5. Codeforces Round #635C Linova and Kingdom 思维

    Linova and Kingdom 题意 现在有一颗n个节点的树,每个节点是一个城市,现在要选出k个城市作为工业城市,其他城市作为旅游城市,现在每个工业城市要派出一名特使前往根节点,每个特使的幸福度 ...

  6. Android将库导入到build.gradle

    如图

  7. JDBC04 PreparedStatement

    PreparedStatement类 存在预编译,用占位符去填参数(参数索引从1开始算),可以防止SQL注入 try { Class.forName("com.mysql.cj.jdbc.D ...

  8. ERROR 1552 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : 问题的解决

    找到SpringbootApplication类, 在注释@SpringBootApplication后加上(exclude = {DataSourceAutoConfiguration.class} ...

  9. java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized的报错问题

    url的问题 这个是根据使用的数据库版本不同而出现的错误,mysql8.0以上版本在使用URL时如果使用的语句是 url=jdbc:mysql://localhost:3306/book 是会报错的, ...

  10. C++内存管理学习笔记(3)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...