為什麼這篇verilog assign語法鄉民發文收入到精華區:因為在verilog assign語法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者horsehead (小孩臉)看板Electronics標題[問題] Verilog Code ...
各位版上的大大好
小弟最近在看原廠提供的一個FPGA的reference design 的RTL code
其中有一組雙向IO他的語法大概寫成
assign SDA = (條件1) ? 1'b0 : 1'bz ;
assign SDA = (條件2) ? 1'b0 : 1'bz ;
不好意思 小弟比較才疏學淺 在同一模組裡對同一根信號進寫兩個assign statment 居
然可以synthesis成功(有查過資料如果IO是三態可以成功 ,也就是如果我把1'bz改成1或0
邏輯合成是會失敗的 ,我自己做實驗也是如此)
然而問的問題是 他systehsis成功後他的behavior我看不太出來是什麼 @@ (我自己寫的
話我不會寫這種很語焉不詳的描述句 ,我一定把條件1/2整合在一起只寫成一條敘述句)
我自己在想是不是這電路的behavior會是條件1或條件2成立 就輸出0 其餘輸出Z呢 ?
還請版上高手們多多指教
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.114.34 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1624362746.A.12A.html
※ 編輯: horsehead (1.164.114.34 臺灣), 06/22/2021 19:53:52
感謝各位大大的回覆 Code 因為是原廠的 有些保密問題 可能不方便放上來 這邊要請各
位大大見諒 他原始的code就是一個I2C Master控制器 ,只是他上頭有兩個小模組同時會
需要取用這個I2C Master ,只是我不知道他為什麼要分兩條來寫 ,如果是我的話我會整
成一條 ,因為雖然有兩塊控制邏輯 ,但實體pin只有一根 ,所以我的話不會寫成兩個
assigm
不過這樣講還是太複雜 我覺得就直接看我自己實驗的的簡單小code來討論這個語法的行為吧
https://imgur.com/VCq9GYb
上圖就是我的實驗程式碼 很簡單 目前看兩條assign敘述 只要我每一條的驅動方式有Z
也就是關掉output buffer 合成就會過,變成三態閘目前 只是這樣寫我不知道當我
EN1/EN2都為1時 ,實際電路他會輸出啥 我是猜他等效成下面啦
assign OT = (EN1) ? 1'b1 :
(EN2) ? 1'b0 : 1'bz ;
想跟大家討論一下 看有沒有其他想法關於這語法最後合成的實際電路會是如何
※ 編輯: horsehead (1.164.114.34 臺灣), 06/23/2021 13:27:08