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代码,仿真靠边站~

效率就是这么提升的~


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

    关注

    30

    文章

    5028

    浏览量

    117721
  • 驱动
    +关注

    关注

    11

    文章

    1717

    浏览量

    84343
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767

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

文章出处:【微信号: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

    求解这个晶振输出波形对不对

    `电源直接焊在有源晶振的管脚上,示波器探针直接夹在信号输出端,别的什么都没接,波形如图。都说有源晶振的波形是正弦波或者方波,但这个波形像三角波啊,波形到底对不对?示波器是300M带宽的。`
    发表于 10-20 16:51

    请问怎么评估软件识别自己的板子?

    大家好,我自己也做了一款频率合成器,核心芯片用的是ADF4158,而且控制部分也用的是CY7C68013A,想用评估软件去调试,该怎么处理?下载什么驱动程序?程序需要修改吗,还是直接用?第一步怎么?第二步怎么?就是特想知道怎
    发表于 01-21 10:13

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

    我比着网上找的原理图画了一个,稍微自己改动了一点点,,,请问各位大神这样画对不对呀?
    发表于 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

    本田宣布明年展示一款基于人工智能自动驾驶汽车

    特斯拉,可以靠边站了!本田今日宣布,明年将展示一款基于人工智能(AI)的自动驾驶电动汽车,它甚至还拥有自己的情感。
    发表于 12-07 09:52 507次阅读

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

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

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

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

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

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