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. 修改MySQL表中的字段属性

    登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...

  2. 我参与 Seata 开源项目的一些感悟

    丁老师在他的知识星球邀请我回答以下一个问题: 我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟. 感谢丁老师的邀请问答: 在这里我就简单说下,我这段时间参与 Se ...

  3. CentOS 7.1 图形化安装

    1.在命令行下输入下面的命令来安装 Gnome 包 sudo  yum groupinstall "GNOME Desktop" "Graphical Administr ...

  4. 解决yum 问题

    Dependencies Resolved Traceback (most recent call last): File "/usr/bin/yum", line 29, in ...

  5. 关于react的一些总结

    之前为了学习redux买了一本<深入浅出react和redux>,只看了redux部分.最近重新一遍,还是很有收获,这里结合阅读文档时的一些理解,记下一些初学者可能不太注意的东西. 原则: ...

  6. Django模板之自定义过滤器/标签/组件

    自定义步骤: 1.     在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.     在app应用中创建templatet ...

  7. pipeline的使用示例

    搭建就不说了,直接示例如何使用pipeline. 一.以下输入参数:版本号为字符参数,按文档更新的是文本参数. 二.脚本对更新内容的处理如下: file_update_list="/home ...

  8. 10.02经典类的bug

    #以下在python 3.6版本里已没有这个问题了1class A: def _init__(self): print ("this is A") def save(self): ...

  9. Hive-拉链表

    一.问答介绍 1.什么是拉链表? 维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户 ...

  10. STM32 Keil 软件仿真设置

    设置 Dialog.DLL 分别为:DARMSTM.DLL和TARMSTM.DLL, Parameter 均为:-pSTM32F103RC,用于设置支持芯片的软硬件仿真