在SpinalHDL中的对应关系及声明形式

针对spinalhdl中的两大类型reg、wire,来梳理下在spinalhdl中的对应关系及声明形式。
wire
    在编写verilog时,reg、wire是我们经常用到的变量声明类型。wire类型变量常用于描述组合逻辑。而reg则用于描述时序逻辑。在spinalhdl中,其定义了bool、bits、uint、sint、vec等数据类型。当我们声明一个数据类型变量时其默认均为线网类型:
在上面的代码中,我们声明了端口datain、dataout、其默认均对应着rtl中的wire类型:
reg
    reg类型变量常用于时序逻辑,在spinalhdl中,将数据类型声明为reg类型的方式有:
spinalhdl提供了四种类型声明寄存器的方式,根据不同的场景需求,我们可以四选一选择最合适的(都是基于reg一步步封装的)。     除此之外,由于spinalhdl中默认为wire类型,而spinalhdl为其都提供了setasreg()方法来标注为寄存器类型,同时提供init(resetvalue)方法来做初始化。因此想上面的那个例子我们想寄存器打一拍我们可以这么来写:
case class regdemo() extends component{ val io=new bundle{ val datain=in uint(8 bits) val dataout=out uint(8 bits) } val regtemp=reg(uint(8 bits)) init(0) regtemp:=io.datain io.dataout:=regtemp}    也可以这么来写:
case class regdemo() extends component{ val io=new bundle{ val datain=in uint(8 bits) val dataout=out uint(8 bits) } val regtemp=reginit(u(0,8 bits)) regtemp:=io.datain io.dataout:=regtemp}    还可以这么写:
case class regdemo() extends component{ val io=new bundle{ val datain=in uint(8 bits) val dataout=out uint(8 bits) } io.dataout:=regnext(io.datain).init(0)}    甚至可以这么写:
case class regdemo() extends component{ val io=new bundle{ val datain=in uint(8 bits) val dataout=out uint(8 bits) setasreg() init(0) } io.dataout:=io.datain}     
时序调整很容易
    在我们编写rtl代码时,当时序存在问题时需要我们调整时序时是很痛苦的,因为无论是verilog还是systemverilog代码,在较长组合逻辑之间添加一级寄存器往往需要改动较多的点,还需要仔细的评估。稍不注意就是时序没调整好,功能先出问题了(主要在于代码太长,更改需慎之又慎)。     而在spinalhdl里,时序调整可以做到简洁而优雅。     在我们之前用spinalhdl做sobel图像处理算法时有这么一段代码:
在卷积核计算处理时这里存在较多的组合逻辑延迟,会成为系统时序瓶颈点。当我们想向更高的频率去跑时这里便需要插入寄存器。想想看这里如果是用verilog来写时我们插入寄存器不仅要计算清楚中间寄存器的位宽,同时也需要改多行代码,还要小心翼翼的改写。     而在spinalhdl里,我们这里插入寄存器调整时序很容易!我们可以通过调用regnext很容易地插入一级寄存器:
如此我们便可以轻松地优化时序,谁还说时序调整是个体力活儿呢???     而针对带握手信号的时序打拍优化,spinalhdl也有相关的lib供调用可以快捷地优化处理。
原文标题:spinalhdl—reg&wire
文章出处:【微信公众号:fpga之家】欢迎添加关注!文章转载请注明出处。


锂电池寿命衰减的原因有哪些
摩托罗拉全新旗舰edge s正式亮相:首发骁龙870 前后6摄 支持自拍15秒心率自测
博方嘉芯氮化镓射频及功率器件产业化项目落户嘉兴科技城 总投资25亿元
自动驾驶领域风波不断_技术的阴暗面究竟会如何影响自动驾驶的发展?
医疗产业与新技术逐渐融合 物联网助力智慧医院蓬勃发展
在SpinalHDL中的对应关系及声明形式
VR传染病防治系统助力生命健康知识的科普
【视频】TI 数字隔离器评估套件ISOW7741DFMEVM评测
合肥将打造全市首个量子计算创新创业平台
三星将在CES2020上展出最新LED TV和人工智能产品
5G频段和信道带宽分布图
什么是铜包覆层压板
用于5G毫米波无线电的射频技术
中芯国际7nm技术已完成开发?
三星电子进行业务重整 或追赶索尼CMOS图像传感器业务
如何通过模板模式重构代码
苹果7美国价格是多少,iPhone7美国售价比大陆便宜1066元
单片机中运算放大器同相放大器配置
九联科技发布通过OpenHarmony兼容性测评的NB-IoT模组UMN202-B6
STM32H7时钟I/O响应频率和定时器最高频率的测试方法