作者horsehead (小孩臉)
看板Electronics
標題[問題] Verilog Code 多重assign 語法問題
時間Tue Jun 22 19:52:24 2021
各位版上的大大好
小弟最近在看原廠提供的一個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://webptt.com/m.aspx?n=bbs/Electronics/M.1624362746.A.12A.html
※ 編輯: horsehead (1.164.114.34 臺灣), 06/22/2021 19:53:52
1F:推 b0241091: 會自動合成出tristate buffer,共用bus時會用到,好像是 06/23 06:51
2F:→ b0241091: 這樣 06/23 06:51
3F:推 mmonkeyboyy: 是 就是tristate b. 你可能沒寫完 但bus就是這樣 06/23 08:38
4F:→ wildwolf: assign SDA = (條件2) ? 1'b1 : 1'bz ; 06/23 10:44
5F:→ wildwolf: 上面那行如果是這樣的話,電路光模擬就會出現 unknown 06/23 10:45
6F:→ duffrose: assign SDA=(條件1 | 條件2) ? 1'b1 : 1'bz; 06/23 10:46
7F:→ duffrose: assign SDA=(條件1 | 條件2) ? 1'b0 : 1'bz; 06/23 10:47
8F:→ duffrose: 上面一行大錯了,然後你要想一想為何要1'b0 & 1'bz? 06/23 10:47
9F:推 mmonkeyboyy: 所以我說他沒寫完 看不出來對錯 06/23 10:48
10F:→ mmonkeyboyy: 下次有這種問題的人吼 請把code都貼好貼滿 不然跟 06/23 10:49
11F:→ mmonkeyboyy: 隔空抓藥是差不多意思的 06/23 10:50
感謝各位大大的回覆 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
12F:推 mmonkeyboyy: 看你寫SDA 再看看z 也猜得到是I2C 啦 XD 06/23 13:50
13F:→ mmonkeyboyy: 最後會變成 OT 輸出 EN1 EN2輸入 裡面就是摻在一起 06/23 13:50
14F:→ mmonkeyboyy: 做撒尿牛丸囉 06/23 13:52
15F:推 mmonkeyboyy: 11/00應該都是同一態 vcs出來應該是中間 @_@~(猜的) 06/23 14:15
16F:推 mmonkeyboyy: 也就是z態 floating 06/23 14:18
17F:推 mmonkeyboyy: 你的寫法在某EN = z的情況下應該會不太一樣 06/23 14:23