Re: [問題] MUX兩種Verilog寫法的差異

看板Electronics作者 (Colin Shih)時間13年前 (2012/10/04 19:41), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《simcityjerry (奶綠)》之銘言: : 標題: [問題] MUX兩種Verilog寫法的差異 : 時間: Sat Sep 29 19:29:24 2012 : : : 最近找工作爬科技版 : : 發現了下面這個題目 : : always@(*) : if(en) : a <= b ; : else : a <= c; : : 與 a = en ? b : c ; 有什麼不一樣 : : 我用Design Compiler分別合成 : 兩者產生的電路都是一樣的 : 所以我覺得應該是問blocking 與 nonblocking的差異 : 但是我想不出有什麼差異@@ : 麻煩大家指點迷津~ : : PS: 這題結束後的下一題就問 : : 如果判斷式成立 : : a <= b : a <= c : 與 : a = b : a = c : 有什麼差別? : : 這我就更疑惑了XD : : : 先謝謝大家的幫忙^^ : 1. * = {en, b, c}; 雖 LHA 使用 nonblocking, 但與blocking assignment同行為 in simulation, 1 與 2 行為相同 因 * 為 fully sensitivity list, 沒有 simulation-synthesis mismatch 當然有相同 synthesis 結果 由 simulation, 由 synthesis, 這兩者描述當然一樣, DC 也證明 synthesis 的結果相同 2. <= nonblocking assignment, = blocking assignment = 為 order sensitive, 故稱 blocking assignment LHA 相不相同, 由always 內 assignment 右邊 operand 是否有次序性決定 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 125.224.87.244 : 推 book12722002:一個是CLK來才改 一個是隨時改 09/29 23:19 : → book12722002:喔 抱歉沒看到* 09/29 23:19 : → book12722002:我覺得第一個是每個值改變都會跑一次 第二個是只看en 09/29 23:23 : → simcityjerry:可是用assign的寫法不就是combinational電路嗎? 09/30 09:22 : → simcityjerry:這樣怎麼會只看en值來改變? 不是要看所有input嗎? 09/30 09:22 : → simcityjerry:如果我說錯的部分麻煩糾正我~ 謝謝^^ 09/30 09:23 : → lovepy:題目else裡面確定是b <= c不是a <= c嗎?? 09/30 15:12 : → lovepy:還有下一題判斷是成立那兩行是甚麼意思啊??看不懂題目QQ 09/30 15:14 : ※ 編輯: simcityjerry 來自: 125.224.87.106 (09/30 15:37) : → simcityjerry:謝謝lovepy糾正~ 我已經改過來了~ 09/30 15:39 : → simcityjerry:至於下一題他就真的是這樣寫@@ 所以我也看不懂XD 09/30 15:40 : → lovepy:可以問一下原文在哪裡嗎?? 09/30 15:44 : → lovepy:第一題若真的是我說那樣 只是用不同方式描述 電路應該一樣 09/30 15:45 : → plsung:第一項用"*"是可以,可是裡面也用"=","<="是給sequential 09/30 19:11 <= : nonblocking assignment, 是 LHA 其中一種型式 與 SEQ/COMB 無關, SEQ/COMB 由電路描述決定 : → plsung:第二項容易用錯,systemverilog都用alway_comb形容combinati 09/30 19:14 : → plsung:nal, 就個人經驗啦... 09/30 19:14 : → plsung:抱歉阿 以為原PO想問這兩項表示combinational有何不同 09/30 19:17 : → plsung:嗯 第一項要加clock才會成sequential電路,是nonblocking 09/30 19:18 : → plsung:加clock一定要用<=,沒clock就是combinational,<=或=都可以 09/30 19:26 ^^^^^^^^^^^^^^^^^^ always @(posedge clk) a_r = a_i; 這是什麼電路? : → plsung:第一項不是b或c有變動才看en? 第二項看en,就馬上傳b或c給a 09/30 19:35 : → simcityjerry:我剛剛去科技版搜原文竟然找不到了QQ... 09/30 21:04 : → simcityjerry:如果我沒記錯是原作者說是STEC公司考的題目~ 09/30 21:05 : → simcityjerry:根據上面大家提供的意見 我自己寫test bench 09/30 21:44 : → simcityjerry:模擬結果 assign 寫法跟 always@(*) 是一樣的 09/30 21:45 : → simcityjerry:都是根據en, b, c三者變動 而變動 09/30 21:45 : → simcityjerry:應該說一句三者其一變動 而變動 09/30 21:49 : → simcityjerry: 依據 09/30 21:49 : 推 mmonkeyboyy:一個是有一個動就動 一個是只有動EN才動 10/01 22:02 : → mmonkeyboyy:差別在要多用幾個DFF 10/01 22:03 : → mmonkeyboyy:a<=b signal flow, a=b variable flow 10/01 22:04 : → mmonkeyboyy:在verilog裡是不管的 但在VHDL裡有差 10/01 22:05 : → mmonkeyboyy:<= real connection = register copy 10/01 22:07 : → michael6172:always@(*)不會產生DFF,請不要誤人,視情況會有latch 10/03 22:05 : → michael6172:但一定不會有DFF 10/03 22:05 : 推 mmonkeyboyy:那我就想問了 LATCH電路在FPGA上 怎麼實現呢 10/03 22:42 : 推 mmonkeyboyy:你講的是沒有錯 但前題是不能用LATCH 10/03 22:44 : 推 mmonkeyboyy:alway could be combinational logic 10/03 22:46 : 推 mmonkeyboyy:我這說的是不全正確沒錯 10/03 22:50 latch : a = en? b : a; 基本就是 loop-back mux 能不能實現? RTL DFF 電路充要條件為 edge sensitivity, 這邊有嗎? RTL latch 必要條件為 self loop-back behaivior, 這邊有嗎? 你說的不是不全正確, 基本是全錯

10/05 23:28, , 1F
a=en? b:a; 沒有太大的意義,反而真實電路特性上會
10/05 23:28, 1F

10/05 23:29, , 2F
造成電路一直在轉態,建議原PO不要把Verilog當軟體寫
10/05 23:29, 2F

10/05 23:30, , 3F
先去了解數位電路,再好好以電路去思考要怎樣寫
10/05 23:30, 3F
※ 編輯: colinshih 來自: 111.251.200.128 (10/08 02:08)
文章代碼(AID): #1GRNO6F0 (Electronics)
文章代碼(AID): #1GRNO6F0 (Electronics)