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

https://mp.weixin.qq.com/s/Y26N5P4XOr5e3uyi5XQY-w   不同于Verilog,Chisel中Wire和Reg并不是数据类型,而是数据容器,作为数据的一个特征而存在.   Wire和Reg作为数据容器,只是标识了变量是否可以存值这一个特征.但这不是数据类型的主要特征,更多的时候,我们关注的是数据的组织形式(是否包含符号位.是否包含小数点.位宽及编码方式等),以及数据如何参与运算.   在Verilog中,直接把变量声明为wire类型和reg类型,也可…
https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A   模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出端口(output ports)输出.   在Chisel3中,模块的输入输出端口,通过IO(new Bundle{...})的形式定义,其中定义了各种类型的数据变量.在实现模块内部转换逻辑的时候,也需要使用到各种类型的数据变量.这些变量如何加入到hardware graph中呢?就是通过WireB…
https://mp.weixin.qq.com/s/KkkqvekWHG6yrqwHUECRIw   介绍如何定义Wire/Reg/Memory/Prim.   1. DefWire   Wire()表明内括的Data的容器为线,用法为: ​​   Wire()定义如下: ​​ a. 获取一个t的克隆x: b. 定义一个Definition, 即为DefWire:DefWire(sourceInfo, x) c. DefWire同时也是一个Command,将其存下:pushCommand(De…
reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型.这两种类型的变量在定义时要设置位宽,缺省为1位.变量的每一位可以是0,1,X,Z.其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量.z代表高阻状态或浮空量. 线型数据包括wire,wand,wor等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法. 两者的区别是:即存器型数据保持最后一次的赋值,而线型数据需要持…
每次写verilog代码时都会考虑把一个变量是设置为wire类型还是reg类型,因此把网上找到的一些关于这方面的资料整理了一下,方便以后查找. wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入. 不指定就默认为1位wire类型.专门指定出wire类型,可能是多位或为使程序易读.wire只能被assign连续赋值,reg只能在initial和always中赋值.wire使用在连续赋值语句中,而reg使用在过程赋值语句中. 在连续赋值语句中,表达式右…
wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入.wire表示直通,即只要输入有变化,输出马上无条件地反映:reg表示一定要有触发,输出才会反映输入. 不指定就默认为1位wire类型.专门指定出wire类型,可能是多位或为使程序易读.wire只能被assign连续赋值,reg只能在initial和always中赋值.wire使用在连续赋值语句中,而reg使用在过程赋值语句中.        不指定就默认为1位wire类型.专门指定出wire类型,…
https://mp.weixin.qq.com/s/mTmXXBzSizgiigFYVQXKpw     介绍Chisel与Scala的不同与关联.   ​​   一. 层次高低   Chisel是使用Scala语言编写的具体代码.从抽象层次上看,Scala更高.   1. 语言与代码   Chisel是使用Scala语言编写的代码.   2. 语言与代码库   Chisel是使用Scala语言编写的代码库.     二. 范围大小   3. 通用语言与领域专用语言   Scala是一门通用语…
https://mp.weixin.qq.com/s/x6j7LZg7i7i_KcNEA8YCQw   Chisel作为领域专用语言(DSL),用于构建硬件模型.待硬件模型建立后,再基于模型进行仿真.验证,以及转换.硬件模型可以转换为firrtl,也可以转换为verilog.   接下来介绍Chisel如何构建硬件模型.   ​​   1. Command   Command定义用于构建硬件模型的命令.   命令可以分为两类:用于定义数据类型的命令,用于定义逻辑的命令.   用于定义数据的命令,…
https://mp.weixin.qq.com/s/F_08jKFMoX9Gf_J_YpsDpg   两个数据变量进行某个操作(op),产生一个输出,这个输出存在一个匿名变量中.这个匿名变量就是以OpBinding的形式绑定到hardware graph中的.   0. 这里先简单对 "=" 和 ":="做一个讨论.   假设 a & b 的结果输出到一个匿名变量,记为anonymousVariable.   a & b的用法有两种:   1) c…
https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, reg组合到一起成为一个新的类型. 如C语言里面的结构体(struct),SystemVerilog已经添加了支持. struct { reg [:] opcode; reg [:] addr; } IR; union { int I; shortreal f; } N; 如Chisel中的Bundl…
1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线.信号可以作为设计实 体中并行语句模块间的信息交流通道.      信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的表达方式).这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向.信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式是:   SIGNAL 信号名: 数据类型 := 初始值 :      同样,信号初始值的设置也不是必需的,而且初始值仅在 VHDL 的行为…
前言 手动例化又慢又容易出错,孩子老犯错怎么办? 当然是脚本一劳永逸. 流程 (1)在vscode中安装如下插件. (2)在电脑中安装python3以上的环境. 下载地址:https://www.python.org/downloads/release/python-373/ 安装记得一定要勾选添加路径,记得管理员安装.重启你的电脑. 在cmd窗口输入python即可验证是否安装成功! (3)安装chardet.为确保插件可用,这个需要安装. 参考链接:https://blog.csdn.net…
作者:桂. 时间:2017-06-24  11:07:40 链接:http://www.cnblogs.com/xingshansi/p/7039237.html 前言 Verilog是硬件描述语言,不算FPGA的核心部分,以前没有接触过,找了本书翻看一下(<Verilog数字系统设计教程第三版>),顺便记录一些基础知识,从第三章开始. 第三章:模块结构.基本数据类型.基本运算符 A-模块的结构 0.模块基本定义 一个基本的模块就是: module name(in1,in2,...out1,o…
Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路.下面是第一个需要学习的Verilog例子: )( :] a, :] b, input cin, output cout, ] sum ); assign{cout,sum)=a+b+cin; endmodule 1.该例子描述了一个4位加法器,从例子可以看出整个模块是以module开始,endmodule结束.每一个module都是一个完整的电路描述,其余都只能认为是电路片段.…
语法子集很小,易用. 模块:module…endmodule 端口:input,output,inout(双向特殊) inout比较难用,有一张真值表,需要大家观察后书写,基本原则就是输入时一定是高阻态(z),与问号冒号运算符搭配使用. 信号:wire,reg,tri(测试用)… reg与wire常用 运算符:与其他语言类似,逻辑运算与算数运算以及关系运算. 分支:if…else, case…default…endcase. if…else其实在逻辑上与case差别不是很大,但是if…else天…
人气腹语术师天愿在现场披露了被人偶搭档夺取灵魂的腹语术师将妻子杀害的表演节目.天愿真的陷入了多重人格,命令自己杀害妻子和子的人偶的人格出现了.为了不(让自己)杀害和弟子登川有外遇的妻子,天愿提出委托想要监视,然而第二天早上,和子真的被杀害的事件发生了.天愿坦白很可能是在自己的意识失去的时候杀害的……”(----“真相只有一个”<名侦探柯南>一向是老衲喜欢的动画片)这个是第806回<腹语師的错觉>的介绍. 人有双重人格,或者叫人格分裂,那么语言呢?Verilog语言还真的是人格分裂的…
一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个,手动编写代码伤不起.实现verilog模块例化模板的自动生成也算是我自砸饭碗的第一步了O(∩_∩)O! 二.代码设计 要自动生成模块例化模板总共分三步:1 打开设计文件,读取内容 2 正则匹配 3 打开指定上层文件,写入例化模板.涉及到的知识点主要有文件读写和正则匹配.该脚本分别用两个表达式匹配模块…
在Quartus SignalTap 工具中加入信号,发现加入的信号变成红色,如图所示的data_slave[7..0]: 这样的信号是没有办法观测的,不会根据SignalTap 的Clock和Trigger进行更新,原因是Synthesis过程将它省略, 添加综合选项(Synthesis Attribute)可以让综合器保留这些对顶层模块输入输出没有帮助的信号,常用的有: wire[:] cnt/*synthesis keep*/; // Keep the Entity of Wirereg…
https://mp.weixin.qq.com/s/Nj_d3hwgNX4kWVtKsqMSWg   ​​   硬件模型编程,即Hardware Model Programming.在RTL抽象级别,硬件模型使用RTL代码描述.所谓编程指的是编写RTL代码.   程序 = 数据 + 算法   所以可以从两个方面来看硬件模型编程的局限性. (以Verilog的RTL编程为例)   一. 数据能力   1. 数据表达能力   Verilog的RTL编码,数据只能使用一个个的wire和reg变量表达…
https://mp.weixin.qq.com/s/n_4RKlOddr_p2S_wODvFbw     介绍硬件建模的各个层次,以及基于RTL进一步提高层次的方法.   1. 物理版图   直接画出各个物理器件的物理连接图,这个应该是最低的硬件建模层次了.   MOS6502据说就是这么开发的:http://www.visual6502.org/JSSim/expert.html   ​​   2. 门和开关层(GSL)   门也是由开关组成的.   GSL把门和开关抽象成为关键字,连线抽象…
Verilog小总结 基础 assign assign作为一个组合逻辑常用的语句,可认为是将电线连接起来,当然它能做的不仅仅是将一个输入直接输出,它能把输入信号进行逻辑运算后再输出.当assign左右两边位宽不相等时,将自动进行零扩展或截断以匹配左边的位宽. eg: module top_module ( input a, input b, input c, input d, output out, output out_n ); wire w1, w2; // Declare two wire…
作为引子,首先来看一段描述,该段介绍了SystemVerilog对比Verilog在RTL设计和建模时的新特性之一(logic数据类型),然后下文我再展开对比介绍Verilog和SystemVerilog中的基本数据类型.(该段内容引用自 @Dr. Pong P. Chu 的书籍列表之<FPGA Prototyping by SystemVerilog Examples: Xilinx MicroBlaze MCS SoC>的书籍说明部分) <SystemVerilog vs Veril…
Reg 比喻为“相机” Reg型,是always中被赋值的信号,往往代表触发器,但不一定是触发器 Wire 比喻为“镜子” Wrie型,assign指定的组合逻辑的信号 好好想想 ,还是能有个大致的概念的~带着这个概念实战继续深入理解...…
本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------------------------------------------------------------ 1.简单来说硬件描述语言有两种用途:1.仿真,2.综合. 对于wire和reg,也要从这两个角度来考虑. 1.1从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思…
Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time』問題可能才一一浮現,這時得靠SignalTap II來幫忙debug. Introduction使用環境:Quartus II 8.0 + DE2-70 (Cyclone II EP2C70F896C6N) 實際使用SignalTap II時,會發現有些reg與wire可以觀察,有些又無法觀察,在…
0. 简介 在FPGA程序调试时,我们除了仿真还经常的会用到SignalTap进行板级调试,其可以真实有效的反应某些变量的变化,方便我们理解内在跳转,方便Debug的运行.SignalTap需要制定时钟,根据需求进行选择,其采样遵循奈奎斯特因采样定律. 我们在Debug中有时会经常遇到这样的情况,在SignalTap中并不能观察到所有的变量值.有些变量添加进入面板后会变红,这就表示SignalTap抓取不到此数值.出现这一现象的原因是,综合器在综合时对一些变量进行了优化,所以就显示不出来了.下文…
问题起因:最初学习数字逻辑设计理论的时候还没有注意到,在实验课上写代码的时候发现了一个问题: 对于源码模块的变量定义,何时定义为reg.何时定义为wire?它们各自又有什么特性和物理意义? 1. wire wire是网络数据类型的关键字. 网络数据类型表示结构实体(例如门)之间的物理连接(线).网络类型的变量不能储存值. 语言特性 wire型数据常用来表示用于 结构化定义 assign为代表的连续赋值描述 也叫数据流描述方式.RTL级描述方式 指定的组合逻辑信号. 程序模块中,输入输出信号类型缺…
开发流程(以二选一选择器为例) 1.设计定义:设计一个可以从两个输入端中选择其中一个并输出的逻辑电路 2.设计输入 2.1.逻辑抽象:三个输入端,一个用来选择,记sel,另两个被选择,记a,b,加上一个输出端y. 2.2.画真值表 2.3卡诺图化简 2.4 逻辑表达式 y=(~sel)*a+sel*a 或者y=if(sel==1)?a:b 2.5在Vivado创建design sources 源文件并写入代码 保存,然后在RTL analysis中查看用逻辑符号表示的示意图 设计输入完毕! 3.…
https://mp.weixin.qq.com/s/2318e6VJ4wFGpWwBOmTikA   Chisel数据类型(Data)与Module的绑定关系,根据Data的使用方式不同,而有多种绑定类型.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/chiselFrontend/src/main/scala/chisel3/core/Binding.scala   1. Binding   类型继承图如下:…
https://mp.weixin.qq.com/s/bSrM-wLRn7O_75xYKeoaEQ   Chisel中的基本数据类型,不是Verilog中的Wire和Reg.Wire和Register只是数据的容器,而非数据本身.所以Chisel中的数据类型抽象层次更高一些,更关注数据的行为和组织形式的异同.   基本数据类型的类图如下: ​​ 其中: 1. 实线箭头为继承父类(extends): 2. 虚线箭头为实现接口(with): 3. 倾斜字体的类为抽象类(abstract): 4. 标…