当前位置: 首页 > article >正文

SpinalHDL之结构(八)

本文作为SpinalHDL学习笔记第六十八篇,介绍SpinalHDL的参数化(Parametrization)。

目录:

1.简介(Introduction)

2.细化阶段的参数(Elaboration time parameters)

3.可选择的硬件⽣成(Optional hardware)

⼀、简介(Introduction)

SpinalHDL的参数化概念涉及多个⽅⾯:
◆给设计提供细化阶段(elaboration time)的参数
◆可选择的硬件⽣成

⼆、细化阶段的参数(Elaboration time parameters)

你可以⽤整个Scala语⾔来提供细化时间时的参数。

下⾯是类参数的例⼦:

case class MyBus(width: Int) extends Bundle {
val mySignal = UInt(width bits)
}
case class MyComponent(width: Int) extends Component {
val bus = MyBus(width)
}

你也可以在scala对象中定义全局变量, 但是需要注意最近增加的ScopeProperty特点能提供更好的解决办法。

三、可选择的硬件⽣成(Optional hardware)

对于可选择的信号:

case class MyComponent(flag: Boolean) extends Component {
val mySignal = flag generate (Bool()) //等价于"if(flag) in Bool() else null"
}

你也可以在Bundle中做相同的事情。

如果你想⽆效⼀块硬件的⽣成:

case class MyComponent(flag: Boolean) extends Component {
val myHardware = flag generate new Area {
//可选择的电路
}
}

你也可以⽤scala循环:

case class MyComponent(amount: Int) extends Component {
val myHardware = for(i <- 0 until amount) yield new Area {
//可选择的电路
}
}

所以, 在细化期间你想怎么运⽤Scala就怎么运⽤, 包括始终整个Scala集合(List, Set, Map, ...)来搭建数据模型并把他们以程序的⽅式转化成硬件(例如对列表元素迭代)。
 


http://www.kler.cn/news/326308.html

相关文章:

  • 记一次pycharm在使用git提交时需要输入ssh key的密码的问题
  • 第十一届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(大学组)
  • HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘
  • 资产管理之源代码防泄密的挑战
  • Redis 简单的消息队列
  • 并发、并行和异步设计
  • Linux 信号保存
  • 【菜菜的sklearn机器学习】(4)随机森林
  • 六,MyBatis-Plus 扩展功能(逻辑删除,通用枚举,字段类型处理,自动填充功能,防全表更新与删除插件,MybatisX快速开发插件)
  • 探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿
  • 【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析
  • C语言中的日志机制:打造全面强大的日志系统
  • 翻译:Recent Event Camera Innovations: A Survey
  • 30秒内交易股票,程序化交易的定义与特点
  • 【Windows】自定义显示器的分辨率
  • @Transactional的实现原理
  • openKylin--安装 .net6.0
  • 【linux】gdb
  • 鸿蒙HarmonyOS之封装Http请求工具类
  • Spring Boot 进阶-第一个程序HelloWorld
  • C语言 | Leetcode C语言题解之第447题回旋镖的数量
  • knowLedge-Vue I18n 是 Vue.js 的国际化插件
  • SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
  • 关于开发板与虚拟机网络不通问题排查
  • 在线点餐新体验:Spring Boot 点餐系统
  • excel不经过后台实现解析和预览(vue)
  • YOLOv8 Flask整合问题
  • Git 使用方法
  • c++泛型编程
  • 【hot100-java】【二叉树的层序遍历】