1.數制與編碼
1.1格雷碼
1.2二進位製碼和格雷碼的相互轉換
1.2.1二進位製碼轉換為格雷碼
1.2.2格雷碼轉換為二進位製碼
2.邏輯代數
3.硬體描述語言(verilog)
關於reg和wire的使用以及alway @(a,b):
在verilog中想要表示乙個二進位制,首先要給出二進位制的長度,其次要給出二位數的標識(例如:8'b1000,表示8位的二進位制數1000;8'd8,表示十進位制10;8'h8,表示十六進製制8)
注意:位數與標識可以省略,預設的位數是32位,預設的進製是十進位制。
表1.1 常見編碼
格雷碼又叫迴圈二進位製碼或反射二進位製碼,它的基本特點是任意兩個相鄰的**只有一位二進位制數不同。這裡著重強調格雷碼的原因是,當數字變化的位數越多,每個位變化的頻率也比較高,在某些特定情況下是十分不利的,可能會導致電路狀態錯誤或輸出錯誤的結果。而使用格雷碼可以有效避免這種錯誤,由於格雷碼具有迴圈特性和單步特性,當用它表示乙個連續變化的數值時,僅有乙個位會翻轉,大大降低了位變化的頻率,因此可以保證傳輸的穩定性和較低的傳輸誤位元速率。
下圖是十進位制0-15對應的格雷碼:
最左邊一位保持不變,從右邊倒數第一位起,依次與左邊一位進行異或操作,作為該位對應格雷碼的值。
最左邊一位保持不變,從左邊第二位起,依次與左邊一位進行異或操作,作為該位對應二進位製碼的值。
verilog hdl內建26個基本元件,其中14個是門級元件,12個為開關級元件,其中7個基本門分別為:and(與)、nand(與非)、or(或)、nor(或非)、not(非)、xor(異或)、nxor(同或)。
表2.1 常見的閘電路的幾種表示方法
圖3.1 一般的verilog語法結構
這裡簡要對描述介面說明部分進行詳細闡述(引用低層次模組和基本門級元件、連續賦值語句(assign)、過程賦值語句(initial和always)以例項給出)。
(1)"模組名"是模組唯一的標示符,括號中以逗號分隔列出的埠名是該模組的輸入、輸出埠;
(2)"埠型別說明"為input(輸入)、output(輸出)、inout(雙向埠)三種型別,凡是在模組後面圓括號**現的埠必須明確定義其埠型別;
(3)"引數定義"是將常量用符號常量替代,以增加程式的可讀性和可修改性,是乙個可選擇的語句,用不到可以省略;
(4)"資料型別定義"部分用來指定模組內所用的資料物件是暫存器型別(reg等)還是連線型別(wire等)。
下面以與門的verilog**為例。
圖3.2 使用連續賦值語句描述方法實現與閘電路
注意:
(1)這裡未對資料型別進行定義,是因為input或output預設的資料型別是wire型,因此在此省略(也可以對其進行定義,wire a,wire b,wire y);
(2)連續賦值語句assign是針對wire型變數的一種賦值語句,wire型變數一般對應到fpga中的一根線,由於wire型的值是會隨著驅動源的變化而變化的,因此也將assign成為"連續"賦值語句;
(3)verilog中沒有與非、或非、異或和同或這些組合邏輯運算符號,但是可以通過組合與、或和非運算得到。
圖3.3 引用低層次模組的描述方法實現與閘電路
圖3.4 利用過程賦值語句來描述與閘電路
(1)在verilog中,任何過程賦值的左側變數必須宣告為reg,除此之外使用的變數必須宣告為wire;
(2)verilog區分reg和wire的原因與資料型別檢查有關,這樣能保證設計者無法對同一變數使用兩種不同型別賦值。如果嘗試對同乙個變數既做連續賦值,又做過程賦值,連續賦值要求用net宣告,過程賦值要求用reg賦值,而把同乙個變數同時宣告為兩種型別屬於語法錯誤(net並不是乙個關鍵字,它代表了一組資料型別,包括wire、wand、wor、tri、triand、trior以及trireg等。線網(net)表示硬體單元之間的連線,就像在真實的電路中一樣,線網由其連線器件的輸出端連續驅動。線網一般使用關鍵字wire進行宣告,如果沒有顯式地說明為向量,則預設線網的位寬為1);
(3)always @(a,b),@是事件等待語句,意思是always不斷迴圈等待a和b兩個敏感變數變化,不管a和b是從高到低,還是從低到高,將會執行always下面的 y=a&&b語句。如果a和b都沒有變化,那麼always將不往下執行,將一直迴圈等待。新標準可以書寫為always @ (*),是個組合邏輯電腦的描述方式,能夠防止在設計時因考慮不周全導致的一些操作失誤,敏感錶用*(表示全部的敏感變數),只要有任何輸入訊號變化,其輸出立即發生變化。
references:
鋯石科技《hello fpga數字部分》
數位電路基礎知識 計算機基礎知識(二)
一 基礎知識 大概了解即可 1 基本元件 計算機的五大部分中的控制器 運算器 內部儲存器都是由是晶體三極體 晶體二極體等經過有機組合而成的。那麼二極體三極體是怎麼回事呢?製作二極體 三極體的材料是半導體,常用的有矽和鍺,在純正的半導體材料上,摻入雜質,根據摻入不同的雜質可形成n型半導體 p型半導體。...
數位電路基礎草稿
zynq名詞術語 ps 處理系統 processing system 就是與fpga無關的arm的soc的部分。pl 可程式設計邏輯 progarmmable logic 就是fpga部分。mio multiuse i o.與ps部分相連,對pl部分透明 不可見 純ps操作。emio extenda...
FPGA入門到精通系列1 數位電路基礎知識
本文主要介紹數位電路基礎知識,用最簡潔的內容介紹最核心的知識。1 數位電路是什麼?數位電路是利用電源電壓的高電平和低電平分別表示1和0,進而實現資訊的表達。模擬訊號 隨時間連續變化的訊號。處理模擬訊號的電路就是模擬電路。數碼訊號 隨時間不連續變化的訊號,離散變化。處理數碼訊號的電路就是數位電路。2 ...