Re: [問題] always與assign的問題

看板Electronics作者 (清風闌夜起)時間19年前 (2007/01/02 12:31), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《CuckooBoy (阿書)》之銘言: : 請問一個簡單的 C = A and B : 可以用always與assign去寫 : 請問兩者差別為何 ? : verilog 初學者,看過verilog的書了.... : 不過還是弄不清楚 : 不知到高手可以幫小弟解惑一下!! : 你們應該會覺得這麼簡單還問.......不要罵我>"< always begin...end block 基本上有兩種描述分別為 always @ (posedge clk) <--- edge trigger 電路,合成出暫存器 always @ (a or b or c) <--- event trigger 電路,合成出組合邏輯電路 ex. 1. always @ (a_in or b_in) begin sum = {1'b0, a_in} + {1'b0, b_in}; end 2. assign sum = {1'b0, a_in} + {1'b0, b_in}; 以上兩種寫法都是合成出一個加法電路,assign的部份好理解就不說明 always的寫法為啥在模擬的時候也是組合邏輯 簡單的看,當always驅動事件中只要 a_in 以及 b_in 改變輸出 sum 也改變 那這不就相同於組合邏輯電路中只要輸入改變輸出就會經過延遲後可能改變 這也就是為什麼寫event trigger的時候sensitivity list一定要完整寫出 若是a_in沒有寫在list中,模擬器並不會因為a_in改變連帶讓sum改變 然而,合成結果為一加法器,輸入改變輸出依然可能會改變 這就會造成所謂的模擬的mismatch 因此寫成 always @ (event)/assign 都可以合成出組合邏輯電路 那為啥還要有 always block 的寫法,因為case等敘述得活在always block中 所以學會使用always @ (event trigger)的寫法還是很重要的 尤其是if/else, case中unconditional assignment以避免latch的產生是重點 以上的內容其實去上 CIC 的 Logic Synthesis with Design Compiler 王旭昇工程師都會很耐心的說明,包括Synthesizable Verilog HDL該節 初學者強烈建議去上上該門課,王工程師人很熱血問題有問必答喔 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.162.108.175

01/02 12:56, , 1F
01/02 12:56, 1F

01/02 13:16, , 2F
誠心建議最近問題很多的某網友 認真把manual看完
01/02 13:16, 2F

01/02 14:20, , 3F
我也想問 assign a=b and c 和 assign a=b & c有哪裏不同
01/02 14:20, 3F

01/03 00:02, , 4F
推推推
01/03 00:02, 4F
文章代碼(AID): #15cU043z (Electronics)
文章代碼(AID): #15cU043z (Electronics)