· 基本硬件設計模式 ·
讀者如果學習了verilog,并且有了一定的實踐經驗的話應該強烈的感受到,verilog和軟件(諸如C/C++)有著本質且明顯的差別,是一條不可跨越的鴻溝。所以初學者把C和verilog拿來作比較是完全沒用的,甚至會把初學者繞暈,影響學習效率的提高。
雖然verilog比硬件更抽象,但是最終實現的結果就是一堆硬件電路。所以評價一個verilog代碼的好壞不是看代碼量多少,而是看最終實現的功能和性能(有速度和面積2方面)。假設面積為S,性能為V,定義品質數Q=S/V,Q越小,設計的電路越成功。
評價一個設計者代碼水平較高,只是這個設計由硬件向verilog表現形式轉換更流暢,合理。一個設計最終實現的性能,很大程度上取決于設計的硬件方案是否高效合理。這是兩回事。
也因上述2點,verilog設計不刻意追求代碼簡潔,合理的設計方法是首先理解要設計的電路,也就是把需求轉化為數字電路,對此電路的結構和連接十分清晰,然后再用verilog表達出這段電路。也就是說,verilog只是簡化了電路設計的工作量,本質上就是設計數字電路,永遠繞不開電路這點!這也決定了不能憑空去想代碼,因為只有存在的電路才是可實現的,而存在的代碼未必可以變成存在的電路。
大家也應該知道,在沒有verilog這種高級語言之前都是用原理圖設計,必須先構思好整個電路框架,才能去實現。有了verilog以后這種思路并沒有被拋棄,依然需要大家去思考電路結構,只有深入理解了電路本身,才能夠有高效的設計。
· 實例說明 ·
世界上沒有工作2次就自動停下的觸發器,所以下面的電路綜合是無法實現的。
repeat(2)@(posedge clk)
d <=x;
雖然上述語法很正確,沒有毛病,但是是不現實的,現在的技術或者提供的語言還沒有抽象到符合語法的都能直接綜合成電路,他比較生硬,沒有大家想的那么靈活。
至此可以得出一個基本結論,面向硬件的設計模式,就是要從電路特征和行為來編寫代碼。
例如上面的電路,要實現觸發器只工作2次就停止怎么辦呢?這個電路是存在的,只是不存在工作2次就自動停下的觸發器,所以控制觸發器運行2次后關閉使能就可以了。按照這個思路,原理圖如下:
上圖觸發器輸入數據x,輸出數據d,觸發器和計數器使能端由比較器控制,計數到2的時候,計數器和觸發器都不使能,這樣觸發器就只工作了2次。也可以認為是一個簡單的狀態機,計數器就是狀態控制。具體代碼請讀者思考,首先用上圖思路,再用三段式狀態機思路,建議二者都寫出來,好好比較綜合后的RTL圖,并且仿真確保結果正確。
-
計數器
+關注
關注
32文章
2256瀏覽量
94478 -
觸發器
+關注
關注
14文章
2000瀏覽量
61132 -
狀態機
+關注
關注
2文章
492瀏覽量
27529 -
C++語言
+關注
關注
0文章
147瀏覽量
6989 -
Verilog語言
+關注
關注
0文章
113瀏覽量
8224
發布評論請先 登錄
相關推薦
評論