1. 程式人生 > >《FPGA入門教程》看書隨筆——RTL設計

《FPGA入門教程》看書隨筆——RTL設計

1、使用verilog進行RTL設計一般可歸納為3種基本的描述方式:      (1)資料流描述:採用assign連續賦值語句      (2)行為描述:使用always語句或initial語句塊的過程賦值語句      (3)結構化描述:例項化已有的功能模組或原語,即平常所說的元件例化和IP core.      過程賦值語句包括非阻塞過程賦值、阻塞過程賦值和 連續過程賦值。 2、RTL級設計時需注意的問題      (1)凡是在always或initial語句中賦值的變數,一定是reg型別變數;凡是在assign語句中賦值的變數,一定是wire型別變數、      (2)定義儲存器:reg[3:0]      MEMAORY[0:7];地址為0~7,每個儲存單元都是4bit;      (3)由於硬體是並行工作的,在Verilog語言的module中,所有描述語句(包括連續輔助語句assign、行為語句塊always和initial語句塊以及模組例項化)都是併發執行的。      (4)使用完備的if...else語句,使用個條件完備的case語句並設定default操作。以防止產生鎖存器latch,因為鎖存器對毛刺敏感      (5)嚴禁設計組合邏輯反饋環路,它最容易引起振盪、毛刺、時序違規等問題
。      (6)不要在兩個或兩個以上的語句塊(always或initial)中對同一個訊號賦值  3、阻塞賦值與非阻塞賦值      (1)阻塞賦值的操作符號為“=”。它的含義是在計算等式右側表示式值及完成其賦值時不 會被其他的 verilog 語句打斷,就是說,在當前賦值沒有完成之前,它阻塞了其他 verilog 語句的執行。      (2) 非阻塞賦值的操作符為“<=”。它的含義是子啊賦值操作時刻開始計算等式右邊,賦值操作時刻結束時更新等式左邊。在這器件,可以執行其他Verilog語句,也不阻塞其他Verilog語句的執行。      在實際使用中,應該遵循的原則是:      (1)在時序邏輯中,使用非阻塞賦值      (2)在組合邏輯中,使用阻塞賦值      (3)在同一個always塊中,不要混合使用阻塞賦值和非阻塞賦值      (4)在同一個always塊中,如果既有組合邏輯又有時序邏輯,使用非阻塞賦值      (5)always模組的敏感表為電平敏感訊號時,使用阻塞賦值
     (6)不要使用#0時延進行賦值      (7)不要在阻塞賦值中使用時延語句      (8)在行為級描述中,如語句間是順序執行的關係,使用阻塞賦值 4、哪些是不可綜合的程式碼      (1)對於一些抽象的行為描述程式碼是不可綜合的。延遲語句(如:#delay)、初始化語句initial以及等待語句wait。      (2)對於一些抽象的運算程式碼也是不可綜合的。      (3)對於不定次數的迴圈運算是不可綜合的。 5、面積和速度是FPGA設計的兩個標準。      “面積”是指一個設計所消耗FPGA的邏輯資源數量,“速度”指設計在晶片上穩定執行所能達到的最高頻率。      優化RTL程式碼追求的最終目標是面積或速度,或者是兩者的平衡。 6、Pipelining技術      即流水線時序優化方法
,其本質是調整一個較大的組合邏輯路徑中暫存器位置,用暫存器合理分割改組合邏輯路徑,從而降低路徑Clock-To-Output 和Setup等時間引數的要求,達到提高設計頻率的目的。 7、模組複用與資源共享      模組複用與資源共享的目的在於節約FPGA的邏輯資源,即節約面積。 8、邏輯複製時一種通過增加面積而改善時序條件的優化手段。邏輯複製最常用的場合是調整訊號的扇出。 9、狀態機的設計      推薦採用兩段寫法(2個always模組)或三段寫法(3個always模組)。

     兩段寫法的核心思想是,一個always模組採用同步時序描述狀態轉移;另一個always模組採用組合邏輯方式判斷轉檯轉移條件,描述狀態轉移規律。其結構如下:


三段式寫法的核心思想是,一個always模組採用同步時序的方式描述狀態轉移,一個採用組合邏輯的方式判斷狀態轉移條件,描述狀態轉移規律,第三個always模組使用同步時序電路描述每個狀態的輸出


狀態機設計的其他技巧和準則:      (1)狀態機的編碼最好使用one-hot(獨熱碼)      (2)一個玩唄的狀態機應該具備初始化狀態和預設狀態      (3)狀態機的編碼可以用parameter定義,不推薦使用define巨集定義      (4)時序邏輯always米快使用非阻塞賦值"<=",組合邏輯模組使用阻塞賦值“=”      (5)使用玩唄的if...else語句和case 語句      (6)case語句需具備full_case和parallel_case屬性。full_case定義了所有可能的輸入模式,parallel_case定義了case項是不重複的。 10、分析狀態機的工具:synplify pro。 11、testbench包括兩部分:一時激勵,而是被驗證設計的元件例化。