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实现。
 
执行结果如下:

最新文章

  1. Linux命令学习总结:chage
  2. [转载]Java数组扩容算法及Java对它的应用
  3. What to call your Academic Event
  4. BZOJ 2083 Intelligence test
  5. Expect:100-continue
  6. (续篇3):飞测独家のJmeter秘籍,限量发放
  7. 项目源码--JAVA基于LBS地理位置信息应用的服务端
  8. [BEC][hujiang] Lesson03 Unit1:Working life ---Grammar & Listening & Vocabulary
  9. ssh连接远程linux服务器
  10. ansible批量分发免密钥登陆python脚本
  11. mysql事务隔离级别详解和实战
  12. [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?
  13. 【洛谷P3369】【模板】普通平衡树题解
  14. 项目总结二:人脸识别项目(Face Recognition for the Happy House)
  15. spring 循环依赖问题
  16. hdu5236 Article
  17. DataAnnotations - InverseProperty Attribute:
  18. Sketch网页截屏插件设计开发
  19. IDEA中安装ibatis插件
  20. UI设计教程学习分享:APP布局

热门文章

  1. 【FPGA篇章二】FPGA开发流程:详述每一环节的物理含义和实现目标
  2. 【HBase】HBase和Hue的整合
  3. git使用-忽略文件更新的几种方法
  4. 一文搞懂HMM(隐马尔可夫模型)-转载
  5. SQLserver分库分表
  6. elasticsearch kibana的安装部署与简单使用(一)
  7. Java TCP案例网络聊天室
  8. 在没有RedirectAttributes的环境中如何在重定向环境中报错错误提示信息供页面使用
  9. JUC(3)---CountDownLatch、CyclicBarrier和AQS
  10. Gradle 多环境URL请求设置