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

 
​​
 
相较于GSL层对物理连接的建模,RTL层提高了一个抽象层次:
  1. 把物理的触发器提取为抽象的寄存器数据类型,简化了从触发器中存取值的操作。
  1. 把物理的门和开关原语的逻辑,提取为操作符号& | ~等,甚至常见的逻辑也提取为操作符号,如移位,相等判断等;把相关物理模块之间的逻辑联系,转换为寄存器之间值的运算和操作关系;
 
程序 = 数据 + 算法
使用数据类型(寄存器)描述数据,使用各种操作符把数据关联成表达式(expression),再使用赋值把表达式关连成语句(statement),这就组成了程序的全部要件。
 
从另外一个角度,每一个模块即是一个 输入、处理、输出的完整系统,输入和输出的数据类型为寄存器,处理使用操作符和赋值来描述。这样也构成了描述模块的全部要件。
 
所以,相较于GSL,RTL不仅提高了抽象层次,提升了表达能力和表达效率,而且构成了一个描述逻辑的完备系统。
 
事实上(使用Verilog的语汇),最简的情况下,只使用reg和module即可完成建模的任务,无论是assign还是always都可以转换为所属module的子module。
 
但是这样建立的模型略显复杂,且表达效率低,比如module虽然可以表达对输入的依赖,但是却不能像always那样,明确的表达对posedge/negedge的依赖。
 
所以,jchdl对RTL层的建模,参考了Verilog和SystemVerilog:
  1. 支持的数据类型有bit/bits/reg;
  1. 支持Verilog提供的一部分操作符;
  1. 支持Verilog的posedge/negedge和changing事件;
  1. 支持Verilog的assign/always代码块;
 
一. Bit
 
Bit可以理解为线。但使用二值逻辑,只支持0, 1两个值。
 
二. Bits
 
Bits为一组线,由多个Bit组成;
Bit和Bits支持assign操作,不支持set;
 
三. Reg
 
寄存器数据类型,有多个Bit组成;
只支持set操作,不支持assign;
 
四. Event
 
RTL建模使用事件驱动模型,支持三种事件:posedge/negedge/changing;
 
比如assign代码块:assign a = b & c; 其中a依赖于b和c的变化事件(Changing Event),如果b和c的值发生变化,则会经由处理逻辑(相与),反映到a的变化上。
 
always代码块则会明确描述所依赖的事件,即敏感表。
 
五. Block
 
参考Verilog,目前支持两种最基本的代码块,即assign和block;
 
六. Module
 
概念上对应Verilog中的module。模块描述了一个输入经过处理逻辑转换为输出的基本单元。
模块可以有子模块和父模块,组成模型结构(hierarchy)。
 
 

jchdl - RTL的更多相关文章

  1. jchdl - RTL Value Propagation

    https://mp.weixin.qq.com/s/2_0yQYdHlSQzPw7vX7NuHA     ​​ 因为建模方式的不同,RTL值的传播不同于GSL值的传播.   jchdl GSL模型的 ...

  2. jchdl - RTL实例 - MOS6502 ALU

    https://mp.weixin.qq.com/s/nMxYVC2djk7DdAforerZPA   使用jchdl RTL实现MOS6502 CPU的ALU.   参考链接 https://git ...

  3. jchdl - RTL Module

    https://mp.weixin.qq.com/s/Sr4ffU4TPPoUJpdInwWd6w ​​ jchdl Module类在概念上对应Verilog的module,作为所有用户自定义模块的父 ...

  4. jchdl - RTL Event

    https://mp.weixin.qq.com/s/P9uoJwIYdM-mbiR9WCtJCg   hardware modeling基于事件驱动模型,RTL中定义了多种事件. jchdl 参考了 ...

  5. jchdl - RTL实例 - Counter4

    https://mp.weixin.qq.com/s/xtvMj5f-Uvx3vesVnH0P_A   计数器.   参考链接 https://github.com/wjcdx/jchdl/blob/ ...

  6. jchdl - RTL实例 - Adder

    https://mp.weixin.qq.com/s/9S29BCTcJfbpR62ALjSidA   加法器.   参考链接 https://github.com/wjcdx/jchdl/blob/ ...

  7. jchdl - RTL实例 - Mux

    https://mp.weixin.qq.com/s/OmQRQU2mU2I5d-qtV4PAwg   二选一输出.   参考链接 https://github.com/wjcdx/jchdl/blo ...

  8. jchdl - RTL实例 - AndReg

    https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A   输入两组线相与,结果输出到寄存器.   参考链接 https://github.com/wjcd ...

  9. jchdl - RTL实例 - AndAnd

    https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA   AndAnd是三输入与门模块,输出为相与的结果.   参考链接 https://github.c ...

随机推荐

  1. SpringCloudStream学习(三)RabbitMQ中的惰性队列

    ​ 从RabbitMQ 3.6.0之后,有了 Lazy Queues 的概念-一个会尽早的将队列中的内容移动到磁盘的队列,并且只有当消费者需要的时候,才会将它们加载到内存中 ​ 惰性队列设计的一个主要 ...

  2. Coursera课程笔记----C程序设计进阶----Week 5

    指针(二) (Week 5) 字符串与指针 指向数组的指针 int a[10]; int *p; p = a; 指向字符串的指针 指向字符串的指针变量 char a[10]; char *p; p = ...

  3. 性能测试之数据库监控分析工具PMM

    PMM(Percona Monitoring and Management) 是一个用于管理和监控数据库性能的开源平台. . 它能提供全面的基于时间和各类监控指标.计数器的分析. 性能测试中,是做数据 ...

  4. 字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一篇 Helloworld 中,我们初步尝试使用了 Javassist字节编程的 ...

  5. 设计模式之GOF23状态模式

    状态模式state 场景:当具有许多状态并且需要频繁改变时,用这种模式 -电梯的运行:维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态 -红绿灯:红灯,黄灯,绿灯 -企业或政府系统:公文的 ...

  6. [BC冠军赛(online)]小结

    A Movie 题意:给你n个区间,判断能否选出3个不相交的区间. 思路:令f(i)表示能否选出两个不相交区间并且以区间i为右区间的值,g(i)表示能否选出两个不相交区间并且以区间i为左区间的值,如果 ...

  7. Jmeter-Throughput Controller 吞吐量控制器

    比如在压测是时候,我设置了100个线程组,循环2次,那么我想根据吞吐量进行并发请求,这时候可以用到这个吞吐量控制器 PercentExecutions:按执行次数的百分比来计算执行次数,Through ...

  8. 透过面试题掌握HashMap【持续更新中】

    本文主要是自己阅读了HashMap和ConcurrentHashMap源码及一些Java容器类相关的博客后,找了一些很多面经中涉及到的Java容器相关的面试题,自己全部手写的解答,也花了一些流程图,之 ...

  9. Linux基本命令(文件基操)

    1. 查询目录内容:ls [选项]  [文件或者目录] -a 显示所有文件,包括隐藏文件 -l 显示详细信息 -d 查看目录属性 -h 人性化显示文件大小 -i 显示节点ID,inode ls -ld ...

  10. 横向滚动div

    <div id="shelf"> <div class="books"><div> <div class=" ...