jchdl - GSL实例 - Mux4(使用WireVec简化输入线声明)
https://mp.weixin.qq.com/s/yJx_dV6ScUStJtPWVuD38w
原理图
参考链接
https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/example/Mux4.java
1.创建Mux4.java, 并生成构造方法和logic()方法
2. 根据逻辑原理图,添加输入输出线
需要注意的是,这里使用了WireVec,而不是Wire来声明输入线,以便统一处理一排线。
3. 在构造方法中搜集输入输出线并调用construct()方法
这里一次性的把dat, sel中的所有线都加到输入线中。
4. 在logic()方法中创建子节点并连线
创建WireVec时可以直接与input/output相连;使用时从WireVec中取出某一条线使用即可。
这里更通用的做法,是记录输入WireVec dat的位数,这样在logic()取的时候,就不需要把数字写死了:
5. 创建inst静态方法方便后续使用
6. 创建main方法执行验证
运行结果为:
四种组合逐个选择i0~i3中的值。
7. 生成Verilog
执行结果如下:
package vec;
import org.jchdl.model.gsl.core.datatype.helper.WireVec;
import org.jchdl.model.gsl.core.datatype.net.Wire;
import org.jchdl.model.gsl.core.meta.Node;
import org.jchdl.model.gsl.core.meta.PropagateManager;
import org.jchdl.model.gsl.core.value.Value;
import org.jchdl.model.gsl.operator.conditional.Mux;
public class Mux4 extends Node {
private int nDatBits = 0;
private WireVec dat;
private WireVec sel;
private Wire out;
private Wire o0 = new Wire();
private Wire o1 = new Wire();
public Mux4(Wire out, WireVec dat, WireVec sel) {
nDatBits = dat.nBits();
in(dat.wires());
in(sel.wires());
out(out);
construct();
}
@Override
public void logic() {
dat = new WireVec(inputs(0, nDatBits));
sel = new WireVec(inputs(nDatBits));
out = new Wire(out(0));
Mux.inst(o0, dat.wire(0), dat.wire(1), sel.wire(0));
Mux.inst(o1, dat.wire(2), dat.wire(3), sel.wire(0));
Mux.inst(out, o0, o1, sel.wire(1));
}
public static Mux4 inst(Wire out, WireVec dat, WireVec sel) {
return new Mux4(out, dat, sel);
}
public static void main(String[] args) {
WireVec dat = new WireVec(4);
WireVec sel = new WireVec(2);
Wire out = new Wire();
Mux4 mux4 = Mux4.inst(out, dat, sel);
dat.assign(new Value[]{Value.V0, Value.V1, Value.V0, Value.V1});
sel.assign(new Value[]{Value.V0, Value.V0});
PropagateManager.propagateParallel(dat, sel);
System.out.println("out: " + out.getValue().toString());
sel.assign(new Value[]{Value.V1, Value.V0});
PropagateManager.propagateParallel(sel);
System.out.println("out: " + out.getValue().toString());
sel.assign(new Value[]{Value.V0, Value.V1});
PropagateManager.propagateParallel(sel);
System.out.println("out: " + out.getValue().toString());
sel.assign(new Value[]{Value.V1, Value.V1});
PropagateManager.propagateParallel(sel);
System.out.println("out: " + out.getValue().toString());
mux4.toVerilog();
}
}
jchdl - GSL实例 - Mux4(使用WireVec简化输入线声明)的更多相关文章
- jchdl - GSL实例 - Mux4
https://mp.weixin.qq.com/s/hh0eExVFC6cxzpvNI1cA9A 使用门实现四选一选择器. 原理图 参考链接 https://github.com/wjcdx/ ...
- jchdl - GSL实例 - Mux4(使用Mux)
https://mp.weixin.qq.com/s/GrYJ4KXEFRoLLmLnAGoMSA 原理图 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...
- jchdl - GSL实例 - Concat
https://mp.weixin.qq.com/s/oJY6Xj9_oM1gSmvH_dHkJg Concat节点把多根输入线线组合成一排线输出. 参考链接 https://github.c ...
- jchdl - GSL实例 - Add
https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ 使用FullAdder级联实现加法器 参考链接: https://github.com/wj ...
- jchdl - GSL实例 - Assign
https://mp.weixin.qq.com/s/MtHR3iolPd5VQq6AUE-JPg Assign是一个节点,把输入线直接赋值给输出线.在转换成Verilog时,这种类型的节点会直接 ...
- jchdl - GSL实例 - LogicalLeft
https://mp.weixin.qq.com/s/WNm4bLWzZ0oWHWa7HQ6Y6w 逻辑左移,继承自Shifter类.只需要实现shift方法即可. 参考链接 https:// ...
- jchdl - GSL实例 - Shifter
https://mp.weixin.qq.com/s/ngQji-xi4FCCbL_2ihUi_A Shifter是移位节点的父类,定义了输入输出线,但是没有定义具体的移位方式,这个留给子类去实现 ...
- jchdl - GSL实例 - Sub(二的补码实现)
https://mp.weixin.qq.com/s/10fgjqPt2pRvIJzjDGYgBg 概念辨析 <IC-二进制, 自然数, 有符号数>:https://mp.weix ...
- jchdl - GSL实例:HalfAdder
https://mp.weixin.qq.com/s/Y97bIro7UlPPFCoPlzgmOQ 半加器电路是指对两个输入相加,输出一个结果位和,没有进位输入的电路. 是实现两个一位二进制数的加法运 ...
随机推荐
- 不需要爬虫也能轻松获取 unsplash 上的图片
我经常会使用 unsplash, 这里面的图片非常清爽,我的大多数文章的图片都是在这个网上找的,虽然也有同类型网站,但是用过一段时间以后基本都放弃了,图片质量参差不齐,筛选过程太费劲. 但是 unsp ...
- Spring官网阅读 | 总结篇
接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大 ...
- 你离高薪 offer 只差一个Redis入门,我是认真的
说起来,可能有些小伙伴会不相信,我是第一次用 Redis,真的.因为公司小,业务量小,Redis 根本派不上用场.不过,最近打算把系统升级一下,顺带把当下时髦的技术入个门,"与时俱进&quo ...
- Android下拉刷新SwipeRefreshLayout简单用法
之前一直都想用下拉刷新,感觉上是庞大的工程,所以搁置了.现在学习了一下其实真的超级简单. 看了<第一行代码>以及 https://www.jianshu.com/p/3c402a9e4b7 ...
- 某科学的PID算法学习笔记
最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中 ...
- java接口学习体会
一.接口引进的意义 为了解决java的单继承不足,即java的类可以实现多个接口. 二.抽象类.接口的区别 三.如何创建接口? 声明接口的关键字是interface,声明类的关键字为class. im ...
- iOS中的几种锁的总结,三种开启多线程的方式(GCD、NSOperation、NSThread)
学习内容 欢迎关注我的iOS学习总结--每天学一点iOS:https://github.com/practiceqian/one-day-one-iOS-summary OC中的几种锁 为什么要引入锁 ...
- 如何得知某期刊是否被EI收錄?
转载:http://tul.blog.ntu.edu.tw/archives/4627 若因投稿或評鑑需要,欲得知某期刊是否被 EI 收錄,其實就是確認該期刊是否包含在 EV 平台中的 COMPEND ...
- [codeforces 200 E Tractor College]枚举,扩展欧几里得,三分
题目出自 Codeforces Round #126 (Div. 2) 的E. 题意大致如下:给定a,b,c,s,求三个非负整数x,y,z,满足0<=x<=y<=z,ax+by+cz ...
- Mysql 常用函数(8)- concat 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html concat 的作用 连接多个字符串 concat ...