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. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  2. GoF23:工厂模式(Factory)

    目录 GoF23:工厂模式(Factory) 工厂模式三种模式 简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂模式 举例说明 代码实现 GoF23:工厂模式(Factory) 核心本质: 实例化 ...

  3. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  4. Oracle条件判断

    一. if/else 语法:if 条件表达式 then语句块:if 条件表达式 then 语句块end if;elsif 条件表达式 then语句块:...else语句块:end if;举例:输入一个 ...

  5. Python3中正则的贪婪匹配模式

    什么是贪婪模式 正则在进行匹配时,从开始位置查找最远的结束位置,这种模式称之为贪婪模式. 在进行HTML标签类似内容获取时,贪婪模式会导致整个内容的返回,需要使用非贪婪模式. 固定的书写规则 : .* ...

  6. Elasticsearch系列---Term Vector工具探查数据

    概要 本篇主要介绍一个Term Vector的概念和基本使用方法. term vector是什么? 每次有document数据插入时,elasticsearch除了对document进行正排.倒排索引 ...

  7. LeetCode--LinkedList--141.Linked List Cycle(Easy)

    141. Linked List Cycle(Easy)2019.7.10 题目地址https://leetcode.com/problems/linked-list-cycle/ Given a l ...

  8. Linux系统上LNMP服务器的搭建

    一.确保登录用户权限为root 如果没有root权限: su  root 切换到root用户,但不切换环境变量: 或者 su - root 完整地切换到root用户环境. 二.开始下载并安装LNMP( ...

  9. 一些常见的pro文件配置

    UI_DIR = ./ui #ui文件目录 TARGET = Test #最终生成目标名 DESTDIR = $$PWD/../test #目标生成目录,$$PWD表示当前目录下 DLLDESTDIR ...

  10. 【MySQL基础总结】索引的使用

    索引的使用 概述 1.索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度 2.索引的优点是可以提高检索数据的速度 3.缺点是创建和维护索引需要耗费时间 4.所以索引可以提高查询速度,减 ...