精華區beta comm_and_RF 關於我們 聯絡資訊
我是verilog的新手.... 我想請問一個基本的問題,在verilog中 a=b; 與 a<=b;兩者的差異在哪裡? 我只知道一個是non-blocking一個是blocking 好像跟是不是同時執行有關.... 想知道能不能有詳細依點的解釋,另外這兩種都可以合成嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.81.41
wildwolf:參考這份說明 http://0rz.tw/ca3Mw 140.113.212.31 03/15 05:25
wildwolf:兩者都可合成,如果你是為了要用合成使用 140.113.212.31 03/15 05:25
wildwolf:verilog 的話,描述 combintaional logic 140.113.212.31 03/15 05:26
wildwolf:時使用 = , 描述 sequentail logic 使用 140.113.212.31 03/15 05:26
wildwolf: <= 140.113.212.31 03/15 05:27
froalc:推 163.13.133.35 03/15 16:57
sasako:都可以合..220.132.144.169 03/17 02:26
sasako:只是用錯 合出來的東西可能不是你想要的220.132.144.169 03/17 02:27
> -------------------------------------------------------------------------- < 作者: sasako (微笑待人) 看板: comm_and_RF 標題: Re: [問題] RTL語法問題... 時間: Mon Mar 17 02:34:25 2008 ※ 引述《theda (無限)》之銘言: : 我是verilog的新手.... : 我想請問一個基本的問題,在verilog中 : a=b; : 與 : a<=b;兩者的差異在哪裡? : 我只知道一個是non-blocking一個是blocking : 好像跟是不是同時執行有關.... : 想知道能不能有詳細依點的解釋,另外這兩種都可以合成嗎? 舉個CIC上課的例子 always @ (posedge clk or negedge n_rst)begin if(!n_rst)begin . . . end else begin a <= b ; b <= c ; c <= temp ; end end 合出來是shift register <= 意思大家同時間都要做的動作 always @ (posedge clk or negedge n_rst)begin if(!n_rst)begin . . . end else begin a = b ; b = c ; c = temp ; end end 若是改成 = 那synthesis tool會自動幫你做化減 變成a = temp ; 所以中間就少了兩個flip-flop 也就是本來你可能要合shift register結果變成a = temp ;這種直接給值的東西 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.144.169 ※ 編輯: sasako 來自: 220.132.144.169 (03/17 02:37)