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

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

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

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

1. 创建Mux.java类。

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

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

3. 生成logic()方法

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

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

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

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

4. 生成构造方法

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

选择Constructor:

即生成构造方法:

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

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

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

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

5. 声明节点内部的线

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

6. 实现logic()方法:

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

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

创建子节点并连接:

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

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

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

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

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

使用PropagateManager传播一下值,

运行结果为:

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

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

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

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

9. 生成Verilog

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

运行输出如下:

可以直接拷贝出来使用。

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

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

运行生成的Verilog如下:

jchdl-GSL-实例 - 使用Intellij IDEA创建Mux的更多相关文章

  1. jchdl - GSL实例 - Mux4(使用Mux)

    https://mp.weixin.qq.com/s/GrYJ4KXEFRoLLmLnAGoMSA 原理图 ​​ 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...

  2. jchdl - GSL实例 - Mux4(使用WireVec简化输入线声明)

    https://mp.weixin.qq.com/s/yJx_dV6ScUStJtPWVuD38w 原理图 ​​ 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...

  3. jchdl - GSL实例 - Assign

    https://mp.weixin.qq.com/s/MtHR3iolPd5VQq6AUE-JPg   Assign是一个节点,把输入线直接赋值给输出线.在转换成Verilog时,这种类型的节点会直接 ...

  4. jchdl - GSL实例 - Mux4

    https://mp.weixin.qq.com/s/hh0eExVFC6cxzpvNI1cA9A 使用门实现四选一选择器. 原理图 ​​ 参考链接 https://github.com/wjcdx/ ...

  5. jchdl - GSL实例 - Counter

    https://mp.weixin.qq.com/s/BjQtQE8DfaKP1XwcTiCwVg   ​​ 摘自康华光<电子技术基础 · 数字部分>(第五版)   参考链接 https: ...

  6. jchdl - GSL实例 - Register

    https://mp.weixin.qq.com/s/uD5JVlAjTHQus2pnzPrdLg   多个D触发器可以组成一组寄存器. ​​ 摘自康华光<电子技术基础 · 数字部分>(第 ...

  7. jchdl - GSL实例 - Add

    https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ   使用FullAdder级联实现加法器   参考链接: https://github.com/wj ...

  8. jchdl - GSL实例 - DFlipFlop(D触发器)

    https://mp.weixin.qq.com/s/7N3avTxTd2ZUnAcKg4w3Ig   D触发器对边沿敏感,只有当相应的边沿出现时,才会触发D的值传播到输出Q.   ​​ 引自:htt ...

  9. jchdl - GSL实例 - MulC2(有符号数的乘法)

      这里的实现,先把符号位取出来,使用两个正数相乘,然后在把符号加到乘积上.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jch ...

随机推荐

  1. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

  2. M - 昂贵的聘礼 最短路 dij

    http://poj.org/problem?id=1062 这个题目有一点点特别,因为数据很小也可以用Floyd跑,但是个人比较钟爱dij. 这个dij是怎么走的呢,首先就是普通的建图,然后就是带上 ...

  3. HTTPS GET | POST | DELETE 请求

    依赖: <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp& ...

  4. leetcode240——搜索二维矩阵(medium)

    一.题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...

  5. 单片机之静态局部变量static

    HL-1慧静电子 上程序: main.c #include <reg52.h>#include "Timer.h" /********P1口低有效*********** ...

  6. 小心了!Kubernetes自动化操作工具将让你失去工作

    运行Kubernetes的人已经花费太多时间在操作上,企业正在考虑为Kubernetes编写自动化工具. 尽管IT部门的大部分职位都会增加,但职业顾问说,计算机操作员预计会减少.这个角色涉及运行She ...

  7. 08JAVA基础关键字(final、static)以及抽象类和接口

    一.关键字 1.final 修饰类 修饰变量 修饰成员方法 该类为最终类,不能被继承 该变量为常量 该成员方法不能被重写 2.static (1).生命周期 随着类的加载而加载 (2).特点 被本类所 ...

  8. luoguP3121解题报告

    p3121 本题首先利用一个手写栈,使元素可以快速出栈,再利用栈快速查询上一个元素在trie中的位置.

  9. 一文带你学会国产加密算法SM4的java实现方案

    前言 今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密. 画重点!是SM4哦,不 ...

  10. ClickHouse基本操作(二)

    一.先来说一下,ClickHouse为啥快 MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快: ClickHouse不支持事务,不存在 ...