jchdl - RTL实例 - And

https://mp.weixin.qq.com/s/86d_sFN0xVqk1xRaRyoAkg

 
使用rtl语法,实现简单的与门。
 
参考链接
 
1.创建And.java, 并生成构造方法和logic()方法
And类继承自Module类。And类的构造方法第一个参数为父模块,用以创建模块Hierarchy。logic()方法中描述模块包含的assign和always代码块。
 
2. 根据逻辑原理,添加输入输出接口
输入输出线作为类成员存在。使用注解标明是input port还是output port。
 
 
3. 在构造方法中搜集输入输出线并调用construct()方法
首先调用父类即Module类的构造方法,以构建模块hierarchy。
然后逐个把输入输出参数与input/output port对应上。
然后调用construct()方法构造模块(调用一次logic()方法,搜集模块的assign/always代码块)。
 
4. 在logic()方法中创建assign/always代码块,以及子模块
这里只包含一个assign代码块:使用a, b对r进行复制,用assignR()方法。当a, b的值发生变化时,会调用assignR()方法更新r的值。
 
这里this::assignR是lambda表达式的一种写法,也可以不另外创建单独的方法,如:
亦或者:
这种带大括号的写法,支持多条语句。
 
提倡使用创建独立类方法的方式,这样可以清楚的表明:And类是一个模块,有输入输出接口作为属性成员,有assign/always代码块作为方法成员。
 
5. 创建inst静态方法方便后续使用
 
6. 创建main方法执行验证
 
运行结果为:
 
7. 生成Verilog
生成定制化模块名:
 
调用toVerilog()方法生成Verilog实现。
 
执行结果如下:
 
posted @ 2018-11-01 21:38  wjcdx  阅读(275)  评论(0编辑  收藏  举报