https://mp.weixin.qq.com/s/Y26N5P4XOr5e3uyi5XQY-w

 
不同于Verilog,Chisel中Wire和Reg并不是数据类型,而是数据容器,作为数据的一个特征而存在。
 
Wire和Reg作为数据容器,只是标识了变量是否可以存值这一个特征。但这不是数据类型的主要特征,更多的时候,我们关注的是数据的组织形式(是否包含符号位、是否包含小数点、位宽及编码方式等),以及数据如何参与运算。
 
在Verilog中,直接把变量声明为wire类型和reg类型,也可以加上signed标识。但数据还是作为一堆比特位来处理的。Chisel中做了更高层次的抽象、更具体的划分(UInt/SInt/Bool等),提取出了各种类型的组织形式和运算方法。
 
本文只做简单介绍,不做具体展开。
 
1.Wire
 
可以看到,Wire和WireInit都是定义了apply方法的Object,相当于函数调用。接收一个Data子类型的参数,在内部记录一些信息,再返回出来一个同样的变量。
def apply[T <: Data](t: T)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): T
 
使用方法如下:
val carry = Wire(Vec(n+1, UInt(1.W)))
val sum = Wire(Vec(n, Bool()))
val abc = Wire(Bool())
 
2. Reg
 
Reg跟Wire一样,只是记录Data子类型变量的信息,然后返回:
def apply[T <: Data](t: T)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): T
 
其中:
a. Reg(arg) 返回一个存放于寄存器中的变量;
b. RegNext(arg) 返回一个存放在寄存器中的变量,输入信号的值经过一个时钟之后,传递给这个变量;
c. RegInit(arg) 返回一个存放在寄存器中的变量,这个变量在复位时会被赋予一个初始值;
 
使用方法如下:
val r0 = Reg(UInt())
val r1 = Reg(UInt()) val r0 = RegNext(io.in)
val r1 = RegNext(r0)
val r2 = RegNext(r1)
val r3 = RegNext(r2)
io.out := r3 val r0 = RegInit(0.U(4.W))
val r1 = RegInit(0.U(4.W))

Chisel3 - Wire & Reg的更多相关文章

  1. Chisel3 - bind - Wire, Reg, MemPort

    https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A   模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出 ...

  2. Chisel3 - model - DefWire, Reg, Memory, Prim

    https://mp.weixin.qq.com/s/KkkqvekWHG6yrqwHUECRIw   介绍如何定义Wire/Reg/Memory/Prim.   1. DefWire   Wire( ...

  3. reg 和wire 区别

    reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型.这两种类型的变量在定义时要设置位宽,缺省为1位.变量的每一位可以是0,1,X,Z.其中x代表一个未被预 ...

  4. verilog中wire与reg类型的区别

    每次写verilog代码时都会考虑把一个变量是设置为wire类型还是reg类型,因此把网上找到的一些关于这方面的资料整理了一下,方便以后查找. wire表示直通,即只要输入有变化,输出马上无条件地反映 ...

  5. fpga中wire和reg的区别

    wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入.wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入. ...

  6. Chisel3 - Chisel vs. Scala

    https://mp.weixin.qq.com/s/mTmXXBzSizgiigFYVQXKpw     介绍Chisel与Scala的不同与关联.   ​​   一. 层次高低   Chisel是 ...

  7. Chisel3 - model - Hardware Model

    https://mp.weixin.qq.com/s/x6j7LZg7i7i_KcNEA8YCQw   Chisel作为领域专用语言(DSL),用于构建硬件模型.待硬件模型建立后,再基于模型进行仿真. ...

  8. Chisel3 - bind - Op, ReadOnly, 左值

    https://mp.weixin.qq.com/s/F_08jKFMoX9Gf_J_YpsDpg   两个数据变量进行某个操作(op),产生一个输出,这个输出存在一个匿名变量中.这个匿名变量就是以O ...

  9. Verilog缺少一个复合数据类型,如C语言中的结构体

    https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, r ...

随机推荐

  1. oracle常用字符函数

    字符函数: concat:(字符连接函数) --字符连接 select concat('con','cat') from dual; select 'co'||'nc'||'at' from dual ...

  2. 【Hadoop离线基础总结】MapReduce增强(上)

    MapReduce增强 MapReduce的分区与reduceTask的数量 概述 MapReduce当中的分区:物以类聚,人以群分.相同key的数据,去往同一个reduce. ReduceTask的 ...

  3. flink流处理从0到1

    一.DataStream API之Data Sources(消费者之数据源) 介绍: source是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource ...

  4. Mysql常用sql语句(22)- insert 插入数据

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 终于讲完基础的查询语句了...这篇讲的就是插入数 ...

  5. printf小结

    下午健身前和lxt兄弟讨论了一个关于 printf 输出的问题,恰巧以前见过类似的,回来写一个收获总结. 首先看一个这样一个例子 #include<cstdio> int i; int m ...

  6. 一站式Kafka平台解决方案——KafkaCenter

    KafkaCenter是什么 KafkaCenter是一个针对Kafka的一站式,解决方案.用于Kafka集群的维护与管理,生产者和消费者的监控,以及Kafka部分生态组件的使用. 对于Kafka的平 ...

  7. apache httpd 不记录head 的请求。

    比如说用了阿里云的slb ,然后他会检测服务器是否正常运行,通常会发大量的HEAD 请求过来. 这样有规则的请求是可以屏蔽的.步骤如下: 在 <Directory />中添加 SetEnv ...

  8. Spring Boot集成H2数据库

    需求 平时学习的时候,涉及到一些连接数据库相关的操作,经常需要初始化本地数据库,比如装个MySQL,初始化一些脚本,比较麻烦,H2是内存数据库,Spring Boot可以在应用启动的时候对H2数据库初 ...

  9. 4.3 Go for

    4.3 Go for Go的for循环是一个循环控制结构,可以执行循环次数. 语法 package main import "fmt" func main() { //创建方式一, ...

  10. php连接数据库 需要下载adodb

    <?include('adodb/ADOdb.inc.php'); # 加载ADODB$conn = &ADONewConnection('odbc_mssql'); # 建立一个连结$ ...