编 者 按
在之前写Verilog时,位拼接符是一个很常见的东西,今天来看下在SpinalHDL中常见的位拼接符的使用。
建议SpinalHDL 版本不低于1.7.1(1.7.1版本Bug较多,再往上~)
》{a,b,c}=c 将一个信号的不同bit赋值给不同的信号,这种拼接方式可以在SpinalHDL中按照如下的形式进行书写:
case class demo() extends Component{ val dataIn=in Bits(8 bits) val dataOut0,dataOut1= out Bits(4 bits) (dataOut0,dataOut1):=dataIn }》d={a,b,c}
对于这种形式的拼接赋值,在SpinalHDL中可以采用如下形式:
case class demo() extends Component{ val a,b,c=in Bits(2 bits) val d= out Bits(6 bits) d:=Cat(a,b,c) }》{d,e}={a,b,c}
对于这种形式的拼接赋值,是上面两种形式的组合体,那么可以这么来写:
case class demo() extends Component{ val a,b,c=in Bits(2 bits) val d,e= out Bits(3 bits) (d,e):=Cat(a,b,c) }
针对这种形式,当然也可以更简化一些:
case class demo() extends Component{ val a,b,c=in Bits(2 bits) val d,e= out Bits(3 bits) (d,e):=(a,b,c) }》b={n{a}}
这种类型的赋值在SpinalHDL中提供了两个API:
case class demo() extends Component{ val a=in Bits(2 bits) val b= out Bits(6 bits) b:=B(a,3) //不是B(a,3 bits),别搞混 }
case class demo() extends Component{ val a=in Bits(2 bits) val b= out Bits(6 bits) b:=Repeat(a,3) }
这两种实现方式最终生成的Verilog代码略不优雅,只是将a机械的重复了n次:
`timescale 1ns/1ps module demo ( input [1:0] a, output [5:0] b ); assign b = {a,{a,a}}; endmodule
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Verilog
+关注
关注
28文章
1343浏览量
109913 -
HDL
+关注
关注
8文章
326浏览量
47301
原文标题:SpinalHDL中不可不知的位拼接符
文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
写好LabVIEW程序不可不知的利器——汇总篇
1、写好LabVIEW程序不可不知的利器(一):模块化功能 VI2、写好LabVIEW程序不可不知的利器(二):State Machine3、写好LabVIEW程序不可不知的利器(三):进阶应用4、写好LabVIEW程序
发表于 11-20 15:38
电脑木马识别的三个小命令(不可不知)
电脑木马识别的三个小命令(不可不知)
一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出。
发表于 02-23 14:17
•1163次阅读
微软Azure大放异彩 Azure术语不可不知
微软Azure大数据服务魅力凸显 Azure术语不可不知 大数据正上增工,不仅是规模,知名度也在上升。
发表于 11-10 11:02
•1101次阅读
MOSFET基础电路不可不知
MOSFET电路不可不知MOSFET已成为最常用的三端器件,给电子电路界带来了一场革命。没有MOSFET,现在集成电路的设计似乎是不可能的。它们非常小,制造过程非常简单。由于MOSFET的特性,模拟
评论