SpinalHDL之结构(四)

news/2024/9/24 11:37:53/

本文作为SpinalHDL学习笔记第六十四篇,介绍SpinalHDL的时钟域(Clock domains)上篇

目录:

1.简介(Introduction)

2.例化(Instantiation)

⼀、简介(Introduction)

在SpinalHDL中, 时钟和复位信号能结合起来构成时钟域(clock domain)。时钟域可以应⽤于设计的某些区域中, 例化在这些区域中的所有同步单元都会隐式地使⽤这些时钟域。

时钟域的应⽤的⼯作模式类似于堆栈, 这意味着你在⼀个给定的时钟域中仍然可以在本地施加另⼀个时钟域。

需要注意的是, ⼀个寄存器在它被创建的时候捕捉时钟域, ⽽非它被赋值的时候。所以请确保在你所希望的ClockingArea中创建寄存器。

⼆、例化(Instantiation)

定义时钟域的语句如下所⽰(使⽤EBNF语句):

ClockDomain(
clock: Bool
[, reset: Bool]
[, softReset: Bool]
[, clockEnable: Bool]
[, frequency: IClockDomainFrequency]
[, config: ClockDomainConfig]
)

在这个定义中包含五个参数:

以下例⼦给出在设计中定义特定时钟域的实例:

val coreClock = Bool()
val coreReset = Bool()
//定义新的时钟域
val coreClockDomain = ClockDomain(coreClock, coreReset)
//在设计的某个区域内应⽤该时钟域
val coreArea = new ClockingArea(coreClockDomain) {
val coreClockedRegister = Reg(UInt(4 bits))
}

Verilog:

wire coreClock;
wire coreReset;
reg [3:0] coreArea_coreClockedRegister;
reg [7:0] counter;
always @(posedge coreClock or posedge coreReset) begin
if(coreReset) begin
coreArea_coreClockedRegister <= 4'b0000;
end else begin
if(io_cond1) begin
coreArea_coreClockedRegister <= 4'b0010;
end
end
end

当⼀个Area不需要时钟时(⻔控), 也可以直接应⽤时钟域:

class Counters extends Component {
val io = new Bundle {
val enable = in Bool()
val freeCount, gatedCount = out UInt (4 bits)
}
val freeCounter = CounterFreeRun(16)
io.freeCount := freeCounter.value
val gatedClk = ClockDomain.current.readClockWir

http://www.ppmy.cn/news/1529800.html

相关文章

【C++掌中宝】深入理解函数重载:概念、规则与应用

文章目录 引言1. 什么是函数重载&#xff1f;2. 为什么需要函数重载&#xff1f;3. 编译器如何解决命名冲突&#xff1f;4. 为什么返回类型不参与重载&#xff1f;5. 重载函数的调用匹配规则6. 编译器如何解析重载函数的调用&#xff1f;7. 重载的限制与注意事项8. 总结结语 引…

learn C++ NO.19——二叉搜索树

简单介绍一下二叉搜索树 二叉搜索树也称为二叉排序树。它是一种具有特殊性质的二叉树。它有如下性质。 1、当前节点的左子树的值一定小于当前节点&#xff0c;当前节点的右子树的值一锭大于当前节点。这也就意味着&#xff0c;在接近完全二叉树的情况下&#xff08;高度较为合…

MySQL安装文档-Windows

文章目录 MySQL安装1. 安装2. 配置 MySQL安装 1. 安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装 安装MySQL的相关组件&#xff0c;这个过程可能需要耗时几分钟&#xff0c;耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 2. 配置 安装好MySQL之后…

【LeetCode周赛】第 416 场

3295. 举报垃圾信息 给你一个字符串数组 message 和一个字符串数组 bannedWords。 如果数组中 至少 存在两个单词与 bannedWords 中的任一单词 完全相同&#xff0c;则该数组被视为 垃圾信息。 如果数组 message 是垃圾信息&#xff0c;则返回 true&#xff1b;否则返回 false…

Python: networkx绘图

Python networkx库 1.有向图 # 1.创建一个空的有向图G nx.DiGraph()nodes [A,B,C,D]# 2.添加节点for node in nodes:G.add_node(node)# 3.添加边edges [(A,B),(B,C),(C,D)]for edge in edges:G.add_edge(edge[0],edge[1])# 4.使用spring布局Cpos nx.spring_layout(G)# 5.绘…

全栈开发(三):springBoot3中使用mybatis-plus

MyBatis-Plus &#x1f680; 为简化开发而生 (baomidou.com) 1.配置pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency&g…

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…

文件上传js代码

大家好&#xff0c;很久没更新了&#xff0c;今天空了&#xff0c;记录一下文件上传js代码。(自己搭建的网站&#xff0c;演示学习一下这种漏洞&#xff0c;不要做违法的事情&#xff01;&#xff01;&#xff01;) 一般文件上传的话都是奔着getshell去的&#xff0c;但是一般…