《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模塊使用同步時序電路描述每個狀態的輸出。
總結
以上是生活随笔為你收集整理的《FPGA入门教程》看书随笔——RTL设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背景图片适应屏幕百分百
- 下一篇: [HAOI2015]T2