99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2023-08-26 15:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?編 者 按

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

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

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

》Example

通過(guò)在代碼里制定連接性檢查規(guī)則,根本不需要仿真,生成RTL代碼的時(shí)候就可以直接順便把這件事給做了。以下面的例子為例:

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個(gè)StreamFifo,所有fifo的pop.valid通過(guò)或的形式連接到io.data0上。然后在test1里例化了test2和10個(gè)StreamFifo,將10個(gè)StreamFifo的pop.valid和test2的data0通過(guò)或的形式驅(qū)動(dòng)io.data0。

假定我們?cè)谠O(shè)計(jì)里定義如下規(guī)則:

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

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

如此,在生成代碼時(shí)便會(huì)有下面的檢查信息顯示:

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

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

現(xiàn)在我們把test1里面的test2Inst的data0拿掉不讓他驅(qū)動(dòng)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代碼時(shí)就會(huì)報(bào)錯(cuò):

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

告知test2Inst中的StreamFifo并沒(méi)有驅(qū)動(dòng)test1中的io.data0,規(guī)則不過(guò),根本不讓你生成Verilog代碼,仿真靠邊站~

效率就是這么提升的~


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

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124514
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1918

    瀏覽量

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

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70751

原文標(biāo)題:連線對(duì)不對(duì),仿真靠邊站,讓代碼自己做

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    用protel 畫(huà)了LM2596封裝 不知道自己畫(huà)的對(duì)不對(duì)

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

    想模擬正弦波輸入,測(cè)試程序對(duì)不對(duì),用什么軟件仿真

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

    男性程序員都是好男人,說(shuō)的對(duì)不對(duì)

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

    溫度傳感器這樣畫(huà)對(duì)不對(duì)呀?

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

    求助,不知道自己理解對(duì)不對(duì)

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

    請(qǐng)問(wèn)老師們?cè)趺茨軌虿挥妹炕囟紵绦?,就可以看?b class='flag-5'>自己改的對(duì)不對(duì)?

    大家好,初學(xué)。請(qǐng)問(wèn)老師們?cè)趺茨軌虿挥妹炕囟紵绦?,就可以看?b class='flag-5'>自己改的對(duì)不對(duì)。害怕燒得太頻給燒壞了。謝謝。
    發(fā)表于 06-19 03:13

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

    前言在做嵌入式開(kāi)發(fā)的過(guò)程中,不可避免的會(huì)用到PWM的功能,但是我們?cè)趺粗喇a(chǎn)生的PWM波形對(duì)不對(duì)呢,這個(gè)時(shí)候可能就需要一臺(tái)示波器來(lái)測(cè)量一下了,但是這始終有點(diǎn)麻煩。于是我嘗試著使用STM32的定時(shí)器
    發(fā)表于 08-16 09:06

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

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

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

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

    氣球的無(wú)人機(jī) 特點(diǎn)就是無(wú)敵變態(tài)

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

    小米MIX自覺(jué)靠邊,5.24號(hào)“創(chuàng)·無(wú)界”的媒體溝通會(huì),夏普無(wú)邊框手機(jī)又要來(lái)了?

    如果你開(kāi)始了解到無(wú)邊框是ID無(wú)邊框,請(qǐng)靠邊站。瞧得上小米MIX三面無(wú)邊框的,自覺(jué)排隊(duì)圍觀。
    發(fā)表于 05-14 09:53 ?1596次閱讀

    比亞迪王朝系列來(lái)襲,論顏值博越都得靠邊站

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

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

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

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

    新手想做跨境電商,是跨境電商平臺(tái)好還是跨境獨(dú)立站好? 這是一個(gè)很多人跨境商家頭疼的問(wèn)題,手跨境電商平臺(tái)和新手跨境獨(dú)立
    的頭像 發(fā)表于 10-18 09:34 ?1038次閱讀