學習 Verilog

Verilog 前一陣子,練習了一下,發現自己真是貪多嚼不爛,看Example code 都能理解,但是換成自己寫卻寫不大出來,或是寫出來的經過 Synthesis 後,完全不是那麼一回事,對於 RTL的掌握還太弱了點,然後又發現如果真的想要,做出可以賣得東西的話,卻真的需要對使用的Target FPGA有深入瞭解,這樣最後的結果才會不相去太遠,不同設計Base的FPGA 針對不同的RTL 有不同的Implement,好的設計可以將資源與效能最大化的使用。
 
想要依靠Synthesis就跟寫程式想要完全依賴Compiler 是一個不切實際的想法。對於一個優良的設計,可攜性也是必須考慮的,因此瞭解怎樣的語法對於不同Sythesis or Target 會有怎樣的影響也是需要去花時間累積。這應該就是經驗吧。

在 Verilog 下 指定一個值基本有兩種方法,一種是 Blocking另一種就是 non-Blocking

Blocking 使用 = 來表示

如           @alway(posedge clk) begin

                      b = a;

                      c = a & d;

                      d = b & c;

               end;

這樣的語法會使得電路在 Evalution 時有相依性,跟在 C Language 的情況相似有循序性。

 

而 non-Blocking 使用 <= 表示

如           @alway(posedge clk) begin

                      b <= a;

                      c <= a & d;

                      d <= b & c;

               end;

這時 c, d 的值是與 a 指定給 b 時同時計算的,呈現平行的效果,在設計HDL 時,需注意如何透過non-Blocking 設計減少不必要的 Register,才能有效的利用資源與提高時脈。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: