1. 程式人生 > 其它 >挑戰(二):兩週自己動手寫CPU(第二章:可程式設計邏輯器件與Verilog HDL)

挑戰(二):兩週自己動手寫CPU(第二章:可程式設計邏輯器件與Verilog HDL)

一、PLD(Programmable Logic Device):可程式設計邏輯器件(FPGA屬於PLD中的一種,Field Programmable Gate Array:現場可程式設計門陣列)

PLD器件分類

(1)基於乘積項(Product-Term)結構的PLD器件:利用與或陣列,靈活配置的互連線實現任意邏輯功能,但器件規模不大;PROM、PLA、PAL、GAL、EPLD:多采用EEPROM或Flash工藝製作,掉電後不會丟失配置資料

任何組合邏輯電路都可以化為“與或”表示式,用“與門-或門”兩級電路實現,而任何時序電路又由組合電路與儲存元件(觸發器)構成。因此原理上來說,與或陣列加上觸發器的結構即可實現任意的數字邏輯電路。

“與或陣列”:實現各種邏輯函式和邏輯功能;

輸入緩衝電路:產生輸入訊號的原變數和反變數;

輸出緩衝電路:對將要輸出的訊號進行處理,既能輸出純組合邏輯訊號,又能輸出時序邏輯訊號;

(2)基於查詢表(Look-Up Table, LUT )結構的PLD器件:物理結構基於靜態儲存器(MStatic RAM,SRA)和資料選擇器(MUX),通過查詢表方式實現函式功能。函式值放在SRAM中,SRAM的地址線即輸入變數,不同的輸入通過MUX找到對應的函式值並輸出。N個輸入項的邏輯函式可以由一個2N位容量的SRAM實現。FPGA:其查詢表的輸入變數一般不超過5個,多餘5個輸入變數的邏輯函式可由多個查詢表通過組合或級聯實現

PS:FPGA大多基於SRAM查詢表結構實現,整合度高(可實現百萬邏輯閘以上設計規模)、邏輯功能強、可實現大規模數字系統設計和複雜的演算法運算,但掉電後會丟失配置資料,需外掛非易失配置器以儲存配置資料,才能構成可獨立執行的系統。在FPGA內部一般還會整合更多的邏輯功能塊,如儲存器塊、DSP塊、硬體乘法器、數字鎖相環等,用以滿足數字訊號處理、數字通訊等應用的需要。

 

二、基於PLD的數字系統設計流程

 

 

三、Verilog HDL

1、過程語句:

(1)initial:用於模擬模組中對激勵向量的描述,或用於給暫存器賦初值,不帶觸發條件,其中的語句只執行一次,initial語句是面向模擬模擬的過程語句,

不可綜合的

(2)always:其中的語句不斷重複執行,always過程語句是可綜合的;通常是帶有觸發條件的,觸發條件寫在敏感訊號表示式中,當敏感訊號表示式中的變數值改變時,就會引發其中語句序列的執行;當用”*“表示時,意味著在該過程語句中的所有輸入訊號變數

敏感訊號分為兩種型別:電平敏感型(組合電路)、邊沿敏感型(時序電路)

 

 

 

 

 2、條件語句:

(1)if-else語句

 

 注意:”1“為真,”0、X、Z“為假;

(2)case語句:

 

 

 

 

 

 3、迴圈語句

(1)forever:連續不斷的執行其中的語句序列,常用來產生週期性的波形;寫Test Bench檔案時會用到;

 

 (2)repeat語句:

 

 4、編譯指示語句:在編譯時,通常先對這些指示語句進行預處理,然後再將預處理的結果和源程式一起進行編譯;

(1)巨集替換'define:用一個簡單的名字或有意義的標識代替一個複雜的名字或變數;

 

 (2)檔案包含語句'include將一個檔案全部包含到另一個檔案中;

 

 (3)條件編譯語句‘ifdef、'else、’endif可以指定僅對程式中的部分內容進行編譯:

用法1:當指定的巨集在程式中已定義,那麼其中的語句序列參與原始檔的編譯,否則,其中其中的語句不參與原始檔的編譯;

用法2:當指定的巨集在程式中已定義,那麼其中的語句序列1參與原始檔的編譯,否則,其中其中的語句序列2參與原始檔的編譯;

 

 

 5、行為語句的可綜合性

 

 不可綜合的原因:https://blog.csdn.net/weixin_43274923/article/details/107506983

 

 6、系統函式:

 

 (1)$stop:當模擬程式執行到$stop時,將暫停模擬,此時設計者可以輸入命令,對模擬器進行互動控制;

(2)$readmemh:用於從外部檔案中讀取資料並放入儲存器中;

 

 

 

 

 

 

 

 (PS:一個16進位制數是4位,8個16進位制數就是32位)

 

 四、Test Bench