jchdl - RTL实例 - And】的更多相关文章

https://mp.weixin.qq.com/s/nMxYVC2djk7DdAforerZPA   使用jchdl RTL实现MOS6502 CPU的ALU.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Mos6502/Alu.java   1.创建Alu.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成…
https://mp.weixin.qq.com/s/xtvMj5f-Uvx3vesVnH0P_A   计数器.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Counter4.java   1.创建Counter4.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是input port还是…
https://mp.weixin.qq.com/s/9S29BCTcJfbpR62ALjSidA   加法器.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Adder4.java   1.创建Adder4.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是input port还是outp…
https://mp.weixin.qq.com/s/OmQRQU2mU2I5d-qtV4PAwg   二选一输出.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Mux.java   1.创建Mux.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是input port还是output p…
https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A   输入两组线相与,结果输出到寄存器.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/AndReg.java   1.创建AndReg.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是inp…
https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA   AndAnd是三输入与门模块,输出为相与的结果.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/AndAnd.java   1.创建AndAnd.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注…
https://mp.weixin.qq.com/s/86d_sFN0xVqk1xRaRyoAkg   使用rtl语法,实现简单的与门.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/And.java   1.创建And.java, 并生成构造方法和logic()方法 ​​ And类继承自Module类.And类的构造方法第一个参数为父模块,用以创建模块Hierarchy.log…
https://mp.weixin.qq.com/s/H2UBmZa9fpM6_FM2_MucTQ   实现一个SoC作为顶层模块,包含Cpu.Mem两个子模块,并驱动运行.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Mos6502/Soc.java   1.创建Soc.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输…
https://mp.weixin.qq.com/s/OguQKMU64GGdinCJjgyeKw   实现MOS6502 CPU,主要是实现状态机.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Mos6502/Cpu.java   1.创建Cpu.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用…
https://mp.weixin.qq.com/s/ST8q-VWOT47kcYg10-4AQw   实现一个简单的内存模块,匹配MOS6502 CPU使用.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Mos6502/Mem.java   1.创建Mem.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员…
https://mp.weixin.qq.com/s/PQIPkDymvcGc_re8ux50vA   结构体可以嵌套使用.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/And2/And2And.java   1.创建And2And.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是inp…
https://mp.weixin.qq.com/s/qTgeBF9N0mx5UK3xWDb3jg   jchdl对Verilog做了增强,增加了用户自定义结构体类型.使用自定义结构体,可以对输入和输出接口进行分类,并简化模块输入输出接口的定义.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/And2/And2.java   1.创建And2.java, 并生成构造方法和logi…
https://mp.weixin.qq.com/s/j4zLmjKgau2vRXVNfm0SIA   带进位的加法.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/rtl/example/Adder4Carry.java   1.创建Adder4Carry.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理,添加输入输出接口 ​​ 输入输出线作为类成员存在.使用注解标明是inp…
https://mp.weixin.qq.com/s/jLUz757FQZjMEYzYb2AIww   MOS6502是简单,但是曾经相当流行的一款CPU.网上有很多模拟程序可供学习使用.这里使用一个较为精简的Verilog项目,介绍MOS6502这款CPU的运行机制,然后使用jchdl进行模拟.   参考项目:https://github.com/Arlet/verilog-6502 该项目只包含两个文件:alu.v, cpu.v.这里首先介绍alu.v.     1. 注释部分简介了ALU的…
https://mp.weixin.qq.com/s/2_0yQYdHlSQzPw7vX7NuHA     ​​ 因为建模方式的不同,RTL值的传播不同于GSL值的传播.   jchdl GSL模型的信息较多,知道Port的upstream Port和downstream Ports,也就是知道值的变化从哪里传过来,又要传到哪里去.所以GSL模型,使用推式传播(Push),即如果portA的值发生变化,则把变化事件推给portA的所有downstream ports.   jchdl RTL为了…
https://mp.weixin.qq.com/s/Sr4ffU4TPPoUJpdInwWd6w ​​ jchdl Module类在概念上对应Verilog的module,作为所有用户自定义模块的父类. 所有用户创建的节点,必须继承Module类.Module为用户创建模块提供了很多支持方法,但把logic()方法留给子类自行定义.   如同Verilog一样,Module的logic()中,只包含Assign和Always这两种块的构建.   一. 类结构   ​​   主要属性 paren…
https://mp.weixin.qq.com/s/gNN2eiJnr9N02xdZVQceDQ   ​​   相较于GSL层对物理连接的建模,RTL层提高了一个抽象层次: 把物理的触发器提取为抽象的寄存器数据类型,简化了从触发器中存取值的操作. 把物理的门和开关原语的逻辑,提取为操作符号& | ~等,甚至常见的逻辑也提取为操作符号,如移位,相等判断等:把相关物理模块之间的逻辑联系,转换为寄存器之间值的运算和操作关系:   程序 = 数据 + 算法 使用数据类型(寄存器)描述数据,使用各种操作…
https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ   使用FullAdder级联实现加法器   参考链接: https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/operator/arithmetic/Add.java     1.创建Add.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理图,添加输入输出线 ​​     3. 在构造方法中…
https://mp.weixin.qq.com/s/P9uoJwIYdM-mbiR9WCtJCg   hardware modeling基于事件驱动模型,RTL中定义了多种事件. jchdl 参考了Verilog中的事件类型.   ​​   一. PosEdgeEvent   上升沿事件.对应Verilog中的posedge关键字. 使用方式为:PosEdgeEvent.of(regA),意为:观察regA的值是否从0变为1,即发生上升沿事件.   二. NegEdgeEvent   下降沿事…
https://mp.weixin.qq.com/s/7N3avTxTd2ZUnAcKg4w3Ig   D触发器对边沿敏感,只有当相应的边沿出现时,才会触发D的值传播到输出Q.   ​​ 引自:https://www.cnblogs.com/IClearner/p/6443539.html   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/sequential/ff/DFlipFlop.java  …
因为对除法研究不深,这里略去不表.   有兴趣可以参考链接: https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/operator/arithmetic/Div.java  …
  这里的实现,先把符号位取出来,使用两个正数相乘,然后在把符号加到乘积上.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/operator/arithmetic/MulC2.java     1.创建MulC2.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理图,添加输入输出线 ​​   3. 在构造方法中搜集输入输出线并调用construct()方法 ​​   4.…
  这里实现最原始的阵列乘法,逐位相乘然后加到一起.   参考链接 https://github.com/wjcdx/jchdl/blob/edcc3e098d4f1cb21677e86e87a1147db31ed2a9/src/org/jchdl/model/gsl/operator/arithmetic/Mul.java     1.创建Mul.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理图,添加输入输出线 ​​   3. 在构造方法中搜集输入输出线并调用con…
https://mp.weixin.qq.com/s/WNm4bLWzZ0oWHWa7HQ6Y6w   逻辑左移,继承自Shifter类.只需要实现shift方法即可.   参考链接 https://github.com/wjcdx/jchdl/blob/edcc3e098d4f1cb21677e86e87a1147db31ed2a9/src/org/jchdl/model/gsl/operator/shift/LogicalLeft.java     1.创建LogicalLeft.java,…
https://mp.weixin.qq.com/s/ngQji-xi4FCCbL_2ihUi_A   Shifter是移位节点的父类,定义了输入输出线,但是没有定义具体的移位方式,这个留给子类去实现.   参考链接 https://github.com/wjcdx/jchdl/blob/edcc3e098d4f1cb21677e86e87a1147db31ed2a9/src/org/jchdl/model/gsl/operator/shift/Shifter.java     1.创建Shif…
https://mp.weixin.qq.com/s/oJY6Xj9_oM1gSmvH_dHkJg   Concat节点把多根输入线线组合成一排线输出.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/operator/concat/Concat.java     1.创建Concat.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原理图,添加输入输出线 ​​   3. 在…
https://mp.weixin.qq.com/s/MtHR3iolPd5VQq6AUE-JPg   Assign是一个节点,把输入线直接赋值给输出线.在转换成Verilog时,这种类型的节点会直接单独处理.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/assign/Assign.java     1.创建Assign.java, 并生成构造方法和logic()方法 略   2. 根据逻辑原…
https://mp.weixin.qq.com/s/10fgjqPt2pRvIJzjDGYgBg   概念辨析   <IC-二进制, 自然数, 有符号数>:https://mp.weixin.qq.com/s/9rGs9yN-OvLvEclnDZr87Q   两个结论: 1. 如果不把符号位编码编进二进制数里面,那么符号位就要单独考虑.保证被减数一定要大于减数,不然减出来的差(负数)无法表示.比如:在小学一二年级的时候,做减法必须保证被减数大于减数,如果反过来不够减,学生就不知道该怎么表示了…
https://mp.weixin.qq.com/s/Gh2xJJvfg1SlyuayK4LRyQ   二的补码指对二进制数的所有位数整体求补.二进制运算下0,1互为补数,n位二进制数a的补数为2^n - a   The two's complement of an N-bit number is defined as its complement with respect to 2N. For instance, for the three-bit number 010, the two's…
https://mp.weixin.qq.com/s/zZTnDdbCUCRGGpgpfAZsYQ   一的补码指对二进制数的每一位分别求补(二进制运算下0,1互为补数),实际运算即为对每一位取反.最高位为符号位.n位二进制数a的一的补数为2^n - 1 - a.   The ones' complement of a binary number is defined as the value obtained by inverting all the bits in the binary re…