RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

連線對不對,仿真靠邊站,讓代碼自己做

Spinal FPGA ? 來源:Spinal FPGA ? 2023-08-26 15:55 ? 次閱讀
?編 者 按

最近做些RTL代碼連線正確性檢查的一些事情,在對于Verilog代碼進行連接性檢查,只能依賴仿真的形式,過程深感不便。且在一個大型工程里,比如檢測一個fifo的overflow是否都連接到了debug接口上通過仿真就是一個很耗時的事情。作為SpinalHDL的堅定支持者,這種類型的工作交給代碼自己做,在SpinalHDL里so easy。

》連接性檢查所謂的連接性檢查,無非就是A、B兩個信號,判斷下兩者之間有沒有驅(qū)動關(guān)系。比如說我們認為A應(yīng)該驅(qū)動B,在仿真里Force A為一個值,然后delay一段時間看B是否有變更為對應(yīng)的值。如果針對某一類連線規(guī)則,在Verilog里通過這種仿真的形式一根根進行檢查是一個很耗時的事情。然而在SpinalHDL里,采用LatencyAnalysis,搞什么仿真,輕輕松幾行代碼定義下規(guī)則就可以搞定了。如上面的判斷A是否有驅(qū)動B,僅需通過下面的一行代碼即可:
LatencyAnalysis(A,B)

其會自動分析A到B之間的路徑并返回其寄存器級數(shù)。即使跨時鐘域也能輕松搞定。

》Example

通過在代碼里制定連接性檢查規(guī)則,根本不需要仿真,生成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通過或的形式驅(qū)動io.data0。

假定我們在設(shè)計里定義如下規(guī)則:

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

這里我們定義了一個fifoPortCheck函數(shù)用于做這件事,它會遍歷指定component下面的所有StreamFifo,通過LatencyAnalysis判斷其pop.valid是否與指定port之間是否存在連接關(guān)系。

如此,在生成代碼時便會有下面的檢查信息顯示:

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

這不比仿真來的快的多么,也無需發(fā)現(xiàn)錯誤自己挨個去找各模塊的負責人,只需統(tǒng)一制定好規(guī)則,每個人自己就能檢查,喝口水的功夫~。

現(xiàn)在我們把test1里面的test2Inst的data0拿掉不讓他驅(qū)動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并沒有驅(qū)動test1中的io.data0,規(guī)則不過,根本不讓你生成Verilog代碼,仿真靠邊站~

效率就是這么提升的~


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1838

    瀏覽量

    85262
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521

原文標題:連線對不對,仿真靠邊站,讓代碼自己做

文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    各位大俠看看我對開關(guān)的程序理解對不對

    想用開關(guān)來控制燈的亮滅,但是對開關(guān)不是很明白,電路連接方法是:四角按鍵開關(guān)一端接51的引腳p1.0,另一端接地,led燈是一端接51引腳p1.7,一端接vcc。按鍵沒按下時,p1.0=0,當開關(guān)按下p1.0=1然后p1。7=0對不對
    發(fā)表于 08-09 18:37

    用protel 畫了LM2596封裝 不知道自己畫的對不對

    用protel 畫了LM2596封裝 不知道自己畫的對不對希望大家給予幫助 謝謝?。?!
    發(fā)表于 04-06 18:42

    想模擬正弦波輸入,測試程序對不對,用什么軟件仿真

    如何仿真stm32,就像用protues仿真51那樣,我想模擬個正弦波輸入,測試下我程序對不對,用什么軟件可以仿真,或者用keil可以仿真
    發(fā)表于 07-15 20:53

    男性程序員都是好男人,說的對不對?

    ` 本帖最后由 海同iotek 于 2014-11-26 15:08 編輯 大家娛樂一下,后面再探討專業(yè)知識吧。論壇氣氛太沉重了也不好,是不是?男性程序員都是好男人,看看說的對不對?`
    發(fā)表于 11-26 14:50

    溫度傳感器這樣畫對不對呀?

    我比著網(wǎng)上找的原理圖畫了一個,稍微自己改動了一點點,,,請問各位大神這樣畫對不對呀?
    發(fā)表于 05-19 22:48

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

    [attach]***[/attach]個人理解是:Q12沒導(dǎo)通時,VFP電壓為(2.5/R97)*(R98+R97),選擇合適R106,使其工作在電流范圍內(nèi);當Q12導(dǎo)通時,感覺只要TL431工作電流不超范圍,不會對VFP有影響?不知道理解對不對,求助
    發(fā)表于 07-16 18:09

    請問老師們怎么能夠不用每回都燒程序,就可以看看自己改的對不對?

    大家好,初學(xué)。請問老師們怎么能夠不用每回都燒程序,就可以看看自己改的對不對。害怕燒得太頻給燒壞了。謝謝。
    發(fā)表于 06-19 03:13

    怎么知道產(chǎn)生的PWM波形對不對

    前言在做嵌入式開發(fā)的過程中,不可避免的會用到PWM的功能,但是我們怎么知道產(chǎn)生的PWM波形對不對呢,這個時候可能就需要一臺示波器來測量一下了,但是這始終有點麻煩。于是我嘗試著使用STM32的定時器
    發(fā)表于 08-16 09:06

    代碼生成HEX文件全部下到FLASH中不知道這樣對不對?

    移植中碰到的問題! 把《ARM 微控制器基礎(chǔ)與實戰(zhàn)》上的范例 1 移植到 ARM 上,但任務(wù)沒有跑起來,請做過移植的朋友幫幫我吧!我是把代碼生成 HEX 文件全部下到 FLASH 中,不知道這樣對不對啊 軟件需要怎么設(shè)置呢
    發(fā)表于 02-27 11:00

    小米MIX靠邊站!LG G6確定為全面屏手機!屏占比超90%

    離MWC2017大會開幕越來越近,各大廠商都會拿出自家的旗艦手機,被曝光的也差不多了!其中LG G6最期待的手機之一,同時也會在MWC2017大會2月26日當天12點(北京時間晚上19點)舉行新品發(fā)布會,其LG G6的真機諜照也隨之曝光,不得不說這屏占比真的很令人驚訝,這回小米MIX可以靠邊站了。
    發(fā)表于 02-13 08:52 ?2387次閱讀

    氣球的無人機 特點就是無敵變態(tài)

    繼航拍無人機大熱之后,現(xiàn)在最流行的就是便于收納的可折疊無人機了,可折疊的機臂和輕量化的設(shè)計無人機能夠輕松放進普通雙肩背包,方便玩家攜帶。大疆、GoPro、小米都先后推出過這種設(shè)計的小型無人機,但是要說真正的輕量化,他們就都要靠邊站了。
    發(fā)表于 05-08 14:55 ?2517次閱讀

    小米MIX自覺靠邊,5.24號“創(chuàng)·無界”的媒體溝通會,夏普無邊框手機又要來了?

    如果你開始了解到無邊框是ID無邊框,請靠邊站。瞧得上小米MIX三面無邊框的,自覺排隊圍觀。
    發(fā)表于 05-14 09:53 ?1541次閱讀

    比亞迪王朝系列來襲,論顏值博越都得靠邊站!

    今天就來聊聊新車比亞迪王朝,有的人說論顏值博越都得靠邊站,那么我們就來看看這臺車,比亞迪在新能源領(lǐng)域確實做得非常好!而且在自主品牌中也算是頂尖的,旗下的那款唐百公里加速只需5秒。而且連續(xù)2015、2016兩年里在全球新能源車系中銷量冠軍就是比亞迪。
    發(fā)表于 07-17 14:34 ?1988次閱讀

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

    在我們做工作仿真時候常常只關(guān)注到仿真動作的完成,常常忽略了背景與LOGO其實會你的仿真的更
    的頭像 發(fā)表于 07-17 10:44 ?7155次閱讀

    新手跨境電商獨立?輕量云服務(wù)器你不迷茫

    新手想做跨境電商,是跨境電商平臺好還是跨境獨立站好? 這是一個很多人跨境商家頭疼的問題,手跨境電商平臺和新手跨境獨立
    的頭像 發(fā)表于 10-18 09:34 ?704次閱讀
    RM新时代网站-首页