三分钟教你快速处理没有使用的端口信号

描述

 编 者 按   

    用DataAnalyzer快速处理没有使用到的端口信号

避不开的场景     如果熟悉SpinalHDL设计,那么都应该清楚在SpinalHDL设计里,如果输出端口没有给明确赋值的话,那么在生成RTL代码时会报错提示我们没有为端口赋值。想想如果你在设计一个AXI4的测试逻辑,但你并不需要使用里面的全部信号(要知道AXI4总线配置里面的哪个信号使用哪个不使用可使一大堆参数),如果想要做的模块在任何场景下都能直接连接使用的话,最早对于我没有使用的信号我是这么来处理的:

if(axi4Port.useRegion) axi4Port.clearAll()
if(axi4Port.useLock) axi4Port.lock.clear()
……
    是不是写起来很啰嗦?~     还有一个场景就是在FPGA里面在制作PR版本时对于动态区和静态区之间的接口信号为了方便后续Impl版本的时序收敛,对于没有使用到的信号以及赋常值的信号都建议添加约束:

 

  对于输入没有使用到的信号,内部定义一个寄存器来锁存信号,并把这个寄存器的属性设置为nopurne

对于暑促好信号,则建议将输出信号必须为reg类型,并将该输出信号配置为preserve属性。

    对于这种使用不到的信号,一个个的follow这些原则不免有点儿太过于“体力活”~       而在SpinalHDL里,我们可以通过DataAnalyzer来快速地实现这些没有使用到的端口信号。    》DataAnalyzer

    考虑下面这个简单的模块:

信号

    在这个模块里,对于输入的data1接口我们并没有用,而对于输出out2端口,我们也并没有输出赋值。

    现在,如果我们想要实现针对PR那种场景的需求,我们可以通过DataAnalyzer来写一个通用的处理代码:

信号

    这里我们为模块添加一个PrePopTask。对于io里面的每个信号,都例化一个DataAnalyzer,对于接口为输入信号(port.isInput),并且其没有任何扇出信号(analysier.getFanOut.isEmpty),则将其赋值给一个寄存器,并对该寄存器添加“nopurne”属性。而如果接口信号为输出信号(port.isOutput),并且没有任何的信号给他赋值(analysier.getFanIn.isEmpty),则将其设置为寄存器,赋值为0并添加“preserve”属性。最终生成的代码:

信号

    完全符合我们的需求~ 

结语

    能省功夫就省功夫,在Boss的许可下,选择尽可能高效的工具,这周工作里修改一个Verilog代码,在SpinalHDL里面五分钟能实现的需求Verilog里改了小半天,极大打击工作热情~

 

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

全部0条评论

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

×
20
完善资料,
赚取积分