jchdl-GSL-实例 - 使用Intellij IDEA创建Mux

Posted 故事v历史

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jchdl-GSL-实例 - 使用Intellij IDEA创建Mux相关的知识,希望对你有一定的参考价值。


https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/operator/conditional/Mux.java



Mux根据选择位的值,从两位数据中选择一位输出。

下面基于Intellj IDEA创建Mux选择器,验证基本功能,并生成Verilog。


1. 创建Mux.java类。


jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


2. 添加代码使Mux继承Node类


jchdl-GSL-实例 - 使用Intellij IDEA创建Mux

利用Intellj IDEA强大的提示功能,直接从选项中选择即可:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux



3. 生成logic()方法


红色波浪线为出错的地方。可以点提示符号看提示:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


也可以使用快捷键Alt+Enter:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


我们选择实现方法,会询问要实现的父类中的抽象方法:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


这里只有一个,直接点OK,可以看到生成了一个logic()方法:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux



4. 生成构造方法


把构造方法放在logic()方法的上面,添加几个空行,右击选择Generate:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


选择Constructor:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


即生成构造方法:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


5. 为构造方法添加输入和输出


从原理图可以看出,Mux有两个数据输入和一个选择输入,一个输出。

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


搜集一下输入线和输出线:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


调用construct()方法构建节点:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


6. 声明节点内部的线


节点内部需要从input/output port引出线连接到内部的子节点上,可以作为Mux类的属性声明;

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


7. 实现logic()方法:


logic()方法需要从input port引出线连接到子节点,并把子节点的输出线连接到Mux节点的output port上。


从input port 0,1,2分别引出线in0,in1,sel, 创建线out连接到output port 0.

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


创建子节点并连接:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


这样所有的线就连接完成了。


8. 创建inst静态方法返回Mux节点实例,方便使用:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


9. 创建main函数执行并验证结果。


jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


点击三角符号运行查看结果:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


结果为x,这是因为in0, in1, sel的初值并没有向后传播,所以打印的为out的初值。


使用PropagateManager传播一下值,

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux

运行结果为:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux

可以看到与真值表中的第3行相同,out的值为in0的值,即0.


改变sel的值,选择输出in1,

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux

因为只有sel的值发生改变,所以只需要传播sel的值即可。运行结果如下:


jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


可以看到与真值表倒数第2行一致,选择了in1的值,即1.


10. 生成Verilog


直接添加一行,调用mux.toVerilog()即可。

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


运行输出如下:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux


可以直接拷贝出来使用。


因为节点内部使用的线,没有声明为节点属性。并且暂时没有支持logic()内部局部变量解析,所以使用了普通的命名。


修改一下,作为节点类的属性声明:


运行生成的Verilog如下:


以上是关于jchdl-GSL-实例 - 使用Intellij IDEA创建Mux的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ插件开发冻结目标IntelliJ实例

Spring Boot 使用IntelliJ IDEA创建一个web开发实例

Spring Boot 使用IntelliJ IDEA创建一个web开发实例

Spring Boot 使用IntelliJ IDEA创建一个web开发实例

如何在IntelliJ Idea中同时启动不同端口的两个实例

IntelliJ IDEA 使用