聊一聊在SpinalHDL里时钟域中时钟的定制与命名。
相较于Verilog,在SpinalHDL里,其对时钟域有着更细致的描述,从而也能够更精细的控制和描述。而对于时钟域,我们往往关系的是:
时钟频率
复位电平:是高电平还是低电平
复位方式,是同步复位还是异步复位。
对于带有时序电路的逻辑而言,最常用的生成Verilog代码方式如下:
时钟域默认为异步高电平复位:
倘若要“定制”时钟域,那么往往采用下面的方式生成RTL代码:
这里在SpinalConfig里常用的用于“定制”时钟的有两个参数:
defaultConfigForClockDomains
defaultClockDomainFrequency
defaultConfigForClockDomains参数可指定时钟域的配置,ClockDomainConfig中可指定的参数包含:
clockEdge:指定有效时钟沿(RISING、FALLING)
resetKind: 指定复位类型(ASYNC、SYNC)
resetActiveLevel: 指定复位类型(HIGH,LOW)
softResetActiveLevel:指定softReset类型(HIGH,LOW)
clockEnableActiveLevel: 指定时钟使能信号电平(HIGH,LOW)
上述代码最终生成的RTL为:
可以看到,复位信号变成了同步高电平复位形式。通过这种时钟域配置的方式,可以做到一键修改适配,从而避免一遍又一遍的posedge、negedge啰嗦~,同时又避免自己在繁杂的Verilog代码里手误(真实遇到过别人代码里复位一会儿posedge、一会儿negedge、估计是写懵了)。
而defaultClockDomainFrequency则用于指定时钟频率,当你的代码里若调用类似这样的lib函数那么指定时钟频率就尤为重要了:
val timeout = Timeout(10 ms) //Timeout who tick after 10 mswhen(timeout){ //Check if the timeout has tick timeout.clear() //Ask the timeout to clear its flag}》》时钟重命名
在当前的开发模式下,很难做到每个人都使用SpinalHDL,而当牵涉到多人合作时,时钟与复位信号的命名往往需达成一致,通过下面的方式可以修改默认时钟域的信号命名:
对应的RTL:
更通用一些,也可以根据复位信号的特征来指定名称:
原文标题:时钟域“定制”
文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
-
FPGA
+关注
关注
1665文章
22612浏览量
642066 -
时钟
+关注
关注
11文章
2008浏览量
135508
原文标题:时钟域“定制”
文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
时钟元件:扬声器系统的“时序心脏”
时钟元件:解码耳机里的“隐形心跳”
1338实时时钟芯片:特性、设计与应用全解析
园区智慧导览系统定制方案(一),可直接落地技术方案(定制化需求拆解与技术架构设计)
Maxim产品命名规则详解
深入了解Maxim产品命名规则
TI CDCDLP223:DLP™ 系统的高性能时钟合成器
云里物里推出全新4G版本MSR01毫米波雷达传感器
风华电阻器命名规范解析
SpinalHDL里时钟域中的定制与命名
评论