SpinalHDL里时钟域中的定制与命名

描述

聊一聊在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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分