0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

连线对不对,仿真靠边站,让代码自己做

Spinal FPGA 来源:Spinal FPGA 2023-08-26 15:55 次阅读
✎编 者 按

最近做些RTL代码连线正确性检查的一些事情,在对于Verilog代码进行连接性检查,只能依赖仿真的形式,过程深感不便。且在一个大型工程里,比如检测一个fifo的overflow是否都连接到了debug接口上通过仿真就是一个很耗时的事情。作为SpinalHDL的坚定支持者,这种类型的工作交给代码自己做,在SpinalHDL里so easy。

》连接性检查所谓的连接性检查,无非就是A、B两个信号,判断下两者之间有没有驱动关系。比如说我们认为A应该驱动B,在仿真里Force A为一个值,然后delay一段时间看B是否有变更为对应的值。如果针对某一类连线规则,在Verilog里通过这种仿真的形式一根根进行检查是一个很耗时的事情。然而在SpinalHDL里,采用LatencyAnalysis,搞什么仿真,轻轻松几行代码定义下规则就可以搞定了。如上面的判断A是否有驱动B,仅需通过下面的一行代码即可:
LatencyAnalysis(A,B)

其会自动分析A到B之间的路径并返回其寄存器级数。即使跨时钟域也能轻松搞定。

》Example

通过在代码里制定连接性检查规则,根本不需要仿真,生成RTL代码的时候就可以直接顺便把这件事给做了。以下面的例子为例:

importspinal.core._
importspinal.lib._

object connectCheck{
def fifoPortCheck(componecnt:Component,portBoolean={
for(elem <- componecnt.children) {
      elem match {
        casefifo: StreamFifo[BaseType]=> {
println(s"Start Check ${componecnt.getName()} ${fifo.getName()} ${fifo.io.pop.valid.getName} to ${port.getName()} connection")
LatencyAnalysis(fifo.io.pop.valid,port)>=0
}
case_=>true
}
fifoPortCheck(elem,port)
}
true
}
}

caseclasstest1() extendsComponent{
val io=newBundle{
val data0=out Bool()
}
noIoPrefix()
val fifoInst=Array.fill(10)(StreamFifo(UInt(8bits),16))
fifoInst.foreach(fifo=>{
fifo.io.push.valid.clear()
fifo.io.push.payload.clearAll()
fifo.io.pop.ready.clear()
})
val test2Inst=test2()
io.data0:=fifoInst.map(_.io.pop.valid).reduce(_|_)|test2Inst.io.data0

connectCheck.fifoPortCheck(this,io.data0)
}

caseclasstest2() extendsComponent{
val io=newBundle{
val data0=out Bool()
}
noIoPrefix()
val fifoInst=Array.fill(10)(StreamFifo(UInt(8bits),16))
fifoInst.foreach(fifo=>{
fifo.io.push.valid.clear()
fifo.io.push.payload.clearAll()
fifo.io.pop.ready.clear()
})
io.data0:=fifoInst.map(_.io.pop.valid).reduce(_|_)
}

这里test2里面定义了10个StreamFifo,所有fifo的pop.valid通过或的形式连接到io.data0上。然后在test1里例化了test2和10个StreamFifo,将10个StreamFifo的pop.valid和test2的data0通过或的形式驱动io.data0。

假定我们在设计里定义如下规则:

  • test1下面的所有模块的Stream Fifo的pop.valid都需要连接到test1的输出端口io.data0上。

这里我们定义了一个fifoPortCheck函数用于做这件事,它会遍历指定component下面的所有StreamFifo,通过LatencyAnalysis判断其pop.valid是否与指定port之间是否存在连接关系。

如此,在生成代码时便会有下面的检查信息显示:

a7383bea-43bc-11ee-a2ef-92fbcf53809c.png

这不比仿真来的快的多么,也无需发现错误自己挨个去找各模块的负责人,只需统一制定好规则,每个人自己就能检查,喝口水的功夫~。

现在我们把test1里面的test2Inst的data0拿掉不让他驱动test1的io.data0:

caseclasstest1() extendsComponent{
val io=newBundle{
val data0=out Bool()
}
noIoPrefix()
val fifoInst=Array.fill(10)(StreamFifo(UInt(8bits),16))
fifoInst.foreach(fifo=>{
fifo.io.push.valid.clear()
fifo.io.push.payload.clearAll()
fifo.io.pop.ready.clear()
})
val test2Inst=test2()
io.data0:=fifoInst.map(_.io.pop.valid).reduce(_|_)

connectCheck.fifoPortCheck(this,io.data0)
}

生成RTL代码时就会报错:

a75e5136-43bc-11ee-a2ef-92fbcf53809c.png

告知test2Inst中的StreamFifo并没有驱动test1中的io.data0,规则不过,根本不让你生成Verilog代码,仿真靠边站~

效率就是这么提升的~


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

    关注

    31

    文章

    5328

    浏览量

    120116
  • 驱动
    +关注

    关注

    12

    文章

    1829

    浏览量

    85213
  • 代码
    +关注

    关注

    30

    文章

    4762

    浏览量

    68408

原文标题:连线对不对,仿真靠边站,让代码自己做

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    各位大侠看看我对开关的程序理解对不对

    想用开关来控制灯的亮灭,但是对开关不是很明白,电路连接方法是:四角按键开关一端接51的引脚p1.0,另一端接地,led灯是一端接51引脚p1.7,一端接vcc。按键没按下时,p1.0=0,当开关按下p1.0=1然后p1。7=0对不对
    发表于 08-09 18:37

    用protel 画了LM2596封装 不知道自己画的对不对

    用protel 画了LM2596封装 不知道自己画的对不对希望大家给予帮助 谢谢!!!
    发表于 04-06 18:42

    想模拟正弦波输入,测试程序对不对,用什么软件仿真

    如何仿真stm32,就像用protues仿真51那样,我想模拟个正弦波输入,测试下我程序对不对,用什么软件可以仿真,或者用keil可以仿真
    发表于 07-15 20:53

    男性程序员都是好男人,说的对不对

    ` 本帖最后由 海同iotek 于 2014-11-26 15:08 编辑 大家娱乐一下,后面再探讨专业知识吧。论坛气氛太沉重了也不好,是不是?男性程序员都是好男人,看看说的对不对?`
    发表于 11-26 14:50

    温度传感器这样画对不对呀?

    我比着网上找的原理图画了一个,稍微自己改动了一点点,,,请问各位大神这样画对不对呀?
    发表于 05-19 22:48

    求助,不知道自己理解对不对

    [attach]***[/attach]个人理解是:Q12没导通时,VFP电压为(2.5/R97)*(R98+R97),选择合适R106,使其工作在电流范围内;当Q12导通时,感觉只要TL431工作电流不超范围,不会对VFP有影响?不知道理解对不对,求助
    发表于 07-16 18:09

    请问老师们怎么能够不用每回都烧程序,就可以看看自己改的对不对?

    大家好,初学。请问老师们怎么能够不用每回都烧程序,就可以看看自己改的对不对。害怕烧得太频给烧坏了。谢谢。
    发表于 06-19 03:13

    怎么知道产生的PWM波形对不对

    前言在做嵌入式开发的过程中,不可避免的会用到PWM的功能,但是我们怎么知道产生的PWM波形对不对呢,这个时候可能就需要一台示波器来测量一下了,但是这始终有点麻烦。于是我尝试着使用STM32的定时器
    发表于 08-16 09:06

    代码生成HEX文件全部下到FLASH中不知道这样对不对

    移植中碰到的问题! 把《ARM 微控制器基础与实战》上的范例 1 移植到 ARM 上,但任务没有跑起来,请做过移植的朋友帮帮我吧!我是把代码生成 HEX 文件全部下到 FLASH 中,不知道这样对不对啊 软件需要怎么设置呢
    发表于 02-27 11:00

    小米MIX靠边站!LG G6确定为全面屏手机!屏占比超90%

    离MWC2017大会开幕越来越近,各大厂商都会拿出自家的旗舰手机,被曝光的也差不多了!其中LG G6最期待的手机之一,同时也会在MWC2017大会2月26日当天12点(北京时间晚上19点)举行新品发布会,其LG G6的真机谍照也随之曝光,不得不说这屏占比真的很令人惊讶,这回小米MIX可以靠边站了。
    发表于 02-13 08:52 2383次阅读

    气球的无人机 特点就是无敌变态

    继航拍无人机大热之后,现在最流行的就是便于收纳的可折叠无人机了,可折叠的机臂和轻量化的设计无人机能够轻松放进普通双肩背包,方便玩家携带。大疆、GoPro、小米都先后推出过这种设计的小型无人机,但是要说真正的轻量化,他们就都要靠边站了。
    发表于 05-08 14:55 2514次阅读

    小米MIX自觉靠边,5.24号“创·无界”的媒体沟通会,夏普无边框手机又要来了?

    如果你开始了解到无边框是ID无边框,请靠边站。瞧得上小米MIX三面无边框的,自觉排队围观。
    发表于 05-14 09:53 1537次阅读

    比亚迪王朝系列来袭,论颜值博越都得靠边站

    今天就来聊聊新车比亚迪王朝,有的人说论颜值博越都得靠边站,那么我们就来看看这台车,比亚迪在新能源领域确实做得非常好!而且在自主品牌中也算是顶尖的,旗下的那款唐百公里加速只需5秒。而且连续2015、2016两年里在全球新能源车系中销量冠军就是比亚迪。
    发表于 07-17 14:34 1984次阅读

    如何增加仿真工作背景的?如何仿真工作更有趣?

    在我们做工作仿真时候常常只关注到仿真动作的完成,常常忽略了背景与LOGO其实会你的仿真的更
    的头像 发表于 07-17 10:44 7066次阅读

    新手跨境电商独立?轻量云服务器你不迷茫

    新手想做跨境电商,是跨境电商平台好还是跨境独立站好? 这是一个很多人跨境商家头疼的问题,手跨境电商平台和新手跨境独立
    的头像 发表于 10-18 09:34 688次阅读