SpinalHDL之结构(七)

server/2024/10/19 5:30:18/

本文作为SpinalHDL学习笔记第六十七篇,介绍SpinalHDL的保留名称(Preserving names)

目录:

1.简介(Introduction)

2.可命名的基础类(Nameable base class)

3.从Scala中提取名字(Name extraction from Scala)

4.模块中的区域(Area in a Component)

5.函数中的区域(Area in a function)

6.在函数中组合(Composite in a function)

7.组合链(Composite chains)

8.Bundle函数中的组合(Composite in a Bundle's function)

9.处理未命名信号(Unamed signal handling)

⼀、简介(Introduction)

本文会介绍SpinalHDL如何把名字从scala代码传递到产⽣的硬件中。知道这些能帮助你更好地了解如何保留名字, 以尽可能增加⽣成的⽹表的可读性。

⼆、可命名的基础类(Nameable base class)

在SpinalHDL中所有可以被命名的东⻄都扩展了可命名的基类。
所以实际上, 以下的类拓展了可命名特点:
◆模块(Component)
◆区域(Area)
◆数据(UInt, SInt, Bundle, ...)

这⾥有⼀些可命名的API的例⼦:

class MyComponent extends Component {
val a, b, c, d = Bool()
b.setName("rawrr") //强制命名
c.setName("rawrr", weak = true) //提出⼀个弱名字, 如果有更强的名字已经被使⽤则不会更改名
字
d.setCompositeName(b, postfix = "wuff") //强制命名成b.getname()+"_wuff"
}

上述代码会⽣成:

module Mycomponent ();
wire a;
wire rawrr;
wire c;
wire rawrr_wuff;
endmodule

Note:⼀般来说, 除非你出于debug或精细化的⽬的, 你不必⼀定要⽤这个API来修改名字。

三、从Scala中提取名字(Name extraction from Scala)

⾸先, ⾃从v.1.4.0, 在类的建立期间, 当每次新的val被定义的时候, SpinalHDL⽤的Scala编译器插件可以提供⼀个返回值。
以下这个例⼦或多或少地展⽰了SpinalHDL是如何实现的:

//spinal.idslplugin.ValCallback是Scala编译器插件的特征, ⽤来产⽣callback
class Component extends spinal.idslplugin.ValCallback {override def valCallback[T](ref: T, name: String) : T = {
println(s"Got $ref named $name") //这⾥我们把我们得到的打印出来作为demo
ref
}
}
class UInt
class Bits
class MyComponent extends Component {
val two = 2
val wuff = "miaou"
val toto = new UInt
val rawrr = new Bits
}
object Debug3 extends App {
new MyComponent()
//这会打印出:
// Got 2 named two
// Got miaou named wuff
// Got spinal.tester

http://www.ppmy.cn/server/124420.html

相关文章

【韩顺平Java笔记】第2章:Java概述

按视频的标号来对应小标题,自用学习笔记 文章目录 5. 内容梳理6. 程序举例6.1 什么是程序 7. Java故事7.1 Java诞生小故事7.2 Java技术体系平台 8. Java特性8.1 Java重要特点 9. sublime10. jdk介绍10.1 Java运行机制及运行过程10.1.1 Java虚拟机(JVM&a…

Qt实现远程开关机

实现远程控制电脑开关机 1、远程开机 了解一下远程控制开机的原理 在局域网内实现远程开机的原理主要依赖于Wake-on-LAN (WOL) 技术,Wake-on-LAN 是一种网络标准,用于通过网络唤醒计算机。需要确保目标计算机的 BIOS 和网络适配器支持 WoL&#xff0c…

【tbNick专享】虚拟机域控、成员服务器、降级等管理

在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器,并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation: 打开 VMware Workstation,点击 “创建新的虚拟…

继承实现单例模式的探索(二)

前言 本篇文章继续探索通过继承实现单例模式的可行方案&#xff0c;这次的方案将采用反射机制隐式创建派生类实例&#xff0c;示例代码为C#。 代码 v1.0 using System.Reflection;/// <summary> /// 单例模式基类 /// </summary> /// <typeparam name"T&…

小白投资理财 - 证券开户

小白投资理财 - 证券开户 前言股票交易费用计算示例名词解释&#xff1a;佣金&#xff0c;印花税&#xff0c;过户费佣金印花税过户费 开户开户前准备开户流程开户完成后注意事项 前言 开通证券账户是投资者进入金融市场、进行各种投资活动的前提条件。作为小白&#xff0c;先…

高通平台修改Android 10源码获取root权限

一、修改文件:/build/make/core/main.mk user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT)) enable_target_debugging := true tags_to_install := ifneq (,$(user_variant))# Target is secure in user builds.ADDITIONAL_DEFAULT_PROPERTIES += ro.secure…

element-plus中el-table固定列fixed失效问题

问题描述 场景:表格在子组件中&#xff0c;同时该子组件在父组件中引用。 表格具有合并表头的操作&#xff0c;同时对第一列“姓名列”进行了"fixed“固定列的操作&#xff0c;不起效。最初怀疑是合并表头行操作的影响&#xff0c;但经排查&#xff0c;发现是父组件中一句…

大数据新视界 --大数据大厂之大数据实战指南:Apache Flume 数据采集的配置与优化秘籍

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…