Re: [問題] verilog中if else和case合成後的差別

看板Electronics作者 (渟沂)時間11年前 (2012/09/08 19:16), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《hadbeen (你在哪)》之銘言: 假設可能的a只有0~10000之間 case(a) 0:---------------\ . \ . 執行ins1 . / . / 10:---------------/ 11:----------------\ . \ . 執行ins2 . / . / 100:----------------/ 101:--------------\ . \ . \ . 執行ins3 . / 1000:--------------/ 1001:------------\ . \ . \ . 執行ins4 假設是個nmos . / 這個gate電壓為: 10000:------------/ 1:如果a=0 0:elsewhere ↓ 以上我可以想像每個case合成後變 以a=0的來說 ins1 ----| ̄ ̄|----->執行的內容 共有一萬個像這樣的transmitting gate組成一個超大多工器 各各平行 即同一時間只有一個transister會通 那寫成 if(a>1000) 執行ins4 else if(a>100) 執行ins3 else if(a>10) 執行ins2 else 執行ins1 應該也是合出上面同義(function上同義)case敘述所合成出的電路吧? 那這樣的話兩種寫法差在哪?寫code的方便性嗎?(如果要寫case就要寫一大堆) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.239.249 我印象中在Advanced ASIC Chip Synthesis這本書講的coding style有提到過。 用if....else....的話會合出有"優先順序"的結構,就是會有串接的mux a>1000 | a>100 ----- | ---| | ----- |mux|----output ---| |-----| | |mux| ----- ---| | ----- 用case的話,每個輸入訊號是平行的,就是沒有優先順序 --------------- a --|combinational|---- --------------- | | ------ -----| | -----| | -----|mux |----output -----| | -----| | ------ 這本書是講design compiler的,聽說其它合成工具不一定會這樣~ 有欠缺的話麻煩其他大大補充~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.150.149

09/08 23:29, , 1F
09/08 23:29, 1F

09/09 02:00, , 2F
正解 不過現在的compiler有的會幫忙這件事了
09/09 02:00, 2F

09/09 02:00, , 3F
但ISX這個東西 一直到200X年都還沒有這個功能
09/09 02:00, 3F
文章代碼(AID): #1GIoaYtw (Electronics)
文章代碼(AID): #1GIoaYtw (Electronics)