十二 · 2021年11月11日

被忽略的两个Tips

受马車指点,在SpianlHDL里一直被我忽略的两个实用功能

oneFilePerComponent

在生成RTL代码时,默认情况下,SpinalHDL会将生成的Verilog代码全部放在一个文件里。而当我们需要将代码按照模块每个模块生成一个文件时,那么可以利用SpinalConfig中的oneFilePerComponent参数:

import spinal.core._
import spinal.lib._
//方式一
class add(dataWidth:Int) extends Component{
  val validIn=in Bool()
  val data1=in UInt(dataWidth bits)
  val data2=in UInt(dataWidth bits)
  val sum=out UInt(dataWidth bits)
  val sumValid=out Bool()
  sum:=RegNextWhen(data1+data2,validIn)
  sumValid:=RegNext(validIn,False)
}
class addInst(dataWidth:Int) extends Component {
  val io=new Bundle{
    val validIn_0=in Bool()
    val data1_0=in UInt(dataWidth bits)
    val data2_0=in UInt(dataWidth bits)
    val sum_0=out UInt(dataWidth bits)
    val sumValid_0=out Bool()

    val validIn_1=in Bool()
    val data1_1=in UInt(dataWidth bits)
    val data2_1=in UInt(dataWidth bits)
    val sum_1=out UInt(dataWidth bits)
    val sumValid_1=out Bool()
  }
  val add0=new add(dataWidth)
  val add1=new add(dataWidth)
  add0.validIn<>io.validIn_0
  add0.data1<>io.data1_0
  add0.data2<>io.data2_0
  add0.sum<>io.sum_0
  add0.sumValid<>io.sumValid_0

  add1.validIn<>io.validIn_1
  add1.data1<>io.data1_1
  add1.data2<>io.data2_1
  add1.sum<>io.sum_1
  add1.sumValid<>io.sumValid_1
}
object addInstApp extends App{
  SpinalConfig(
    oneFilePerComponent = true
  ).generateSystemVerilog(new addInst(8))
}

最终,在生成Verilog代码时,会为每个模块单独生成一个文件:

9bcb32843c6e85daa88cdad41dba41fa.png

globalPrefix

《换个名字混江湖》中曾提到,当下我们可能仍不可避免与Verilog打交道。当我们多人在使用SpinalHDL开发而最终提交生成的Verilog代码时对于我们自己写的模块命名我们尚可控制,而调用SpinalHDL的库时那大概率会有模块名称冲突的情况。针对这种场景,SpinalConfig中的globalPrefix可以一用:

object addInstApp extends App{
  SpinalConfig(
    oneFilePerComponent = true,
    globalPrefix = "demo"
  ).generateSystemVerilog(new addInst(8))
}

如此,生成的Verilog代码每个模块均会有一个前缀:“demo”。

34580d3af67f39637ba82f7d53819f0b.png

写在最后

文档确实少,且用且摸索吧~

☆ END ☆

作者:玉骐
原文链接:https://mp.weixin.qq.com/s/JKJZia\_agdo5Mjyw5dSHYw
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注Spinal FPGA专栏。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息