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. P2765 魔术球问题 网络流二十四题重温

    P2765 魔术球问题 知识点::最小点覆盖 这个题目要拆点,这个不是因为每一个球只能用一次,而是因为我们要求最小点覆盖,所以要拆点来写. 思路: 首先拆点,然后就是开始建边,因为建边的条件是要求他们 ...

  2. git&&SourceTree使用总结

    git&&sourceTree操作学习 基本操作 commit 提交 pull 更新代码 push 推送代码 fetch 抓取代码 Branch 新建分支 merge 合并代码 Sta ...

  3. springboot整合mybatis,利用mybatis-genetor自动生成文件

    springboot整合mybatis,利用mybatis-genetor自动生成文件 项目结构: xx 实现思路: 1.添加依赖 <?xml version="1.0" e ...

  4. 关于form表单的reset

    今天写代码想重置一个表单,一出手就是$("#formid").reset().结果表单纹丝不动数据都还在一点效果都没有. 后来找时间百度了下jquery的api,确实没有reset ...

  5. python 基础知识3-列表元祖

    1.列表增. # append 追加,给列表的最后面追加一个元素 li = ['alex','wufa','太白','大白'] li.append('教师') li.append(1) print(l ...

  6. js中的栈,堆。

    一.栈和堆 栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间. 基本类型:String,Number,Boolean,Null,Undefined 堆 ...

  7. Springboot 上传CSV文件并将数据存入数据库

    .xml文件依赖配置 <!--csv依赖 --> <dependency> <groupId>org.apache.commons</groupId> ...

  8. PAT 1009 Product of Polynomials (25分) 指数做数组下标,系数做值

    题目 This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: E ...

  9. mysql 审计server_audit 模块

    server_audit模块是一个 mariadb  还是skysql 开发的一个mysql 的插件.可以做一些审计上面的工作. 众所周知,mysql 是里面是很难记录用户的操作命令的.用这个就可以. ...

  10. DPDK开发环境搭建(学会了步骤适合各版本)

    一.版本的选择 首先要说明的是,对于生产来说DPDK版本不是越高越好,如何选择合适的版本? 1.要选择长期支持的版本LTS(Long Term Support) 2.根据当前开发的系统环境选择 可以在 ...