当前位置: 首页> 文旅> 酒店 > 今日娱乐新闻最新消息_收购域名_代写文章价格表_大庆黄页查询电话

今日娱乐新闻最新消息_收购域名_代写文章价格表_大庆黄页查询电话

时间:2025/8/27 4:52:21来源:https://blog.csdn.net/m0_59092412/article/details/142381053 浏览次数:0次
今日娱乐新闻最新消息_收购域名_代写文章价格表_大庆黄页查询电话

本文作为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.readClockWire 
关键字:今日娱乐新闻最新消息_收购域名_代写文章价格表_大庆黄页查询电话

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: