HDL課程筆記

CHAPTER 1

1、PSPICE是針對原理圖進行時間序列仿真
2、Verilog(Verifacation Logic)是從C語言改造的,VHDL是和Verilog平行競爭的語言
3、wire變量是無記憶性,have value only by driven,類似於導線
reg變量有記憶,retain previous value until refreshed or updated,類似於寄存器
4、數字電路正確性包括:功能邏輯正確性,時序正確性(延時正確)nand #1表示延時1單位
5、instantiation實例化
6、begin end串行執行 moduel end module並行執行
7、monitor是示波器 dollar符號系統命令
8、verilog程序結束是用分號結束
9、comment註釋
10、waveform產生波形
11、#的含義是delay
12、以分號結束的操作是順序進行
13、dollar monitor一開啓就一直執行,直到遇見 dollar finish
14、Verilog的變量有(0,1,x,z)四個值,x是不確定,z是高阻態
15、Verilog把變量的變化稱爲時間,時間是event driven(事件驅動)
16、Verilog三種port: input、output、inout
17、Verilog是compoment orientation面向組件,組件可以重用
18、testBench測試體= Test Generator and Monitor + System being design
19、design 和verification的代碼都要寫
20、synthesized聚合的,Verilog的組件要滿足synthesize的要求
21、 Top level module
22、不定義是wire
23、structural modeling通過組成描述電路, Behavioral modelling通過電路行爲特徵描述電路
24、Verilog是事件驅動還是時間驅動?答:事件驅動。由於不是時間驅動,因此Verilog執行速度快
25、Verilog資源不共享,並行工作,穩定性高。
26、conbinational circuit 組合電路,特點:有輸入就有輸出
27、sequencial circuit順序電路,依賴於時鐘
27、initial只做一遍,always程序永遠運行(上電後循環運行)
28、always @(A,B,C,D) begin…end,如果ABCD變化,則運行該段程序。組合電路當中的程序需要先對輸出進行初始化。begin…end內的程序順序執行
29、synthesize自動完成電路設計
30、flip flop觸發器
31、posedge上升沿、negedge下降沿
32、Verilog不允許邊沿觸發和電平觸發同時作爲條件
32、= blocking assignment <=non-blocking assignment
33、Always @(電平觸發/沿觸發)
34、任何電路都由組合電路和順序電路構成,其中順序電路由flip flop、clock、reset實現
35、如果有多個語句,則用begin end包裹起來
36、 一個module裏面如果有在always裏面哪兒個先執行不確定,哪個initial先執行不確定。多個always、多個initial,相互並行不阻擋。但是不論順序如何,initial先執行,always並行執行。
37、rerilog的時間單位是1ns/100ps。時間單位是1ns,分辨率是100ps。
38、concurretn並行的
39、Verilog所有語法在可以用於verification,但是隻有一個子集 能用於Design
40、always能用於Design和Verification,initial只能用於Design
41、wait(go);go是一個wire變量,該module等待go信號,當go=1執行下一條程序。
42、the least-significant bit(digit)最高有效位/數字
the most-significant bit(digit)最低有效位/數字

CHAPTER 3
43、behavioral modling是由initial 和always引導的、
vector矢量 scalar標量
44、test bench = design + verification。所有的語法可以用於verification,只有子集可以用於design。其中驗證是在仿真器裏面運行。
45、如果always後面沒有@(),則always裏面的內容直接執行。運行到end後直接回到always開頭再次運行。但是always裏面應該有wait()、延時等語句
46、relational operator == >= <=,
47、forever循環,無條件進入循環體的循環,但是在循環體裏面需要有跳出循環的機制。
48、concurrent併發 recurrent遞歸
49、exception是一種debug的手段,clause子句
50、disable用於程序調試,可以退出任意begin …end
51、register是一維的,memory是二維的;register可以位操作,memory只能對字節進行操作。
52、accumulator累加器
53、指令寄存器裏面存入的是正在執行的指令。
54、二進制串的書寫格式,4‘b0001,其中4是串長度,’b是二進制,'o八進制,'h十六進制,'d十進制
55、disable是用來調試的
56、multi-way branching多路分叉
57、case之後一定要加上default,否則一旦case不全,就會產生鎖存器,記住之前的值。這樣浪費電路資源
59、task在同一個always中多次調用不需要automatic,如果在不同的always中調用就需要automatic。因此always是並行的,其中的task需要佔用不同的層級
58、function在考試中經常出現,在design時不考慮延時,在synthesize時自動加上延時。function內部的語句不能用#,@,wait()語句來控制時間。
59、function其實就是函數
在這裏插入圖片描述
60、concatenation串聯
61、verilog語句有兩大屬性:parallel case和full case,也就是並行執行,以及涵蓋所有可能。一個case語句必須要帶一個default,一般是default : xxxx

62、Task;end task是用來測試的,不用於設計代碼,只用於仿真代碼。(initial也是)。設計代碼用function,(function既可以用於設計也可以用於測試仿真)

63、function沒有延時等待,沒有#,沒有@,沒有wait(),仿真結果上看不到延時。用於combinational circuit。

64、concatenate(contatenation)連接

65、有節拍的電路比沒有節拍的電路容易做,方便不同電路之間的交流

66、if-else的比較是0-1比較,2-valued-comparison;
case的比較是0-1-x-z比較,4-values-comparison。前者只要出現了x或者z就判定錯。

67、function :expression, function是有返回值的且只有一個
task:statement,task是沒有返回值的。
68、task/function不形成邊界,是一種soft的程序劃分方法
module形成邊界,是一種hard的程序劃分方法,是真是存在的電路
69、register ->cache->memory->storage->network

70、parameter是常量,reg和wire是變量
在這裏插入圖片描述
71、寫HDL一般不用hierarchy,因爲一旦增加、刪減了變量,就要修改hierarchy。

72、在always裏面可以使用r和w,但是在top裏面不能使用q
在這裏插入圖片描述

73、硬邊界:module;軟邊界:function,task

CHARTER 4
1、同步電路抗干擾能力強,容易設計。異步電路設計複雜

2、抽象級別:
(1)晶體管級
(2)門級
(3)結構化級(除門之外還多了module)
(3)寄存器傳輸級
(4)行爲級
(5)數據流級(assign)

3、綜合:將HDL語言轉化成netlist和邏輯電路的過程。
綜合器:實現綜合作用的工具。綜合器相當於編譯器

4、同步電路既可以握手(訪問存儲器)也可以約定(訪問總線或者I/O,也叫flow control)

5、level sensitive 電平觸發 edge sensitive

6、verikog仿真時首先將HDL轉換爲netlist

7、時序圖,虛線是有效沿
在這裏插入圖片描述

8、電路普遍寫比讀要快,讀比較慢。稱寫快讀慢。寫一個週期,讀兩個週期。如果要連續讀狠多個數,通常會切換成對方的寫操作。

9、沒有約定的情況下要有握手信號(如ready-acknowledge)

9、clock信號的上升下降沿是垂直的,AB/DB的上升下降沿總是在有效沿之後,表示上一件事情完成後,要延時後才能進行下一件任務。

10、採樣窗口內的值必須valid,穩定有效

11、disable用於debug

12、第一個時鐘信號從復位之後開始計算

13、$表示系統任務及函數

14、wire的默認值是Z,reg的默認值是X

15、在這裏插入圖片描述

16、wire只能用於組合邏輯。組合邏輯的輸出只決定於當下的輸入,可以理解爲一旦輸入變了輸出就會變。但是實際上有延時的,組合邏輯的延時在一個特殊文件中設置。

17、1Z,結果爲X;1X,結果爲X;1=Z結果爲0,1=X,結果爲0。一般情況下用==就夠了

18、條件語句if-else和case只能在always和initial引導的begin…end之間運行。

19、wire #(3,5) x2; 組合電路wire延時,由於cmos管從低到高和從高到低是不對稱的,所以wire上升沿延時3,下降沿延時5

20、initial不可綜合

21、initial和always都不能前嵌套

22、組合邏輯的語法:continuous assign + function。注意function是沒有延時的

23、task沒有返回值,function有返回值

CHAPTER 5
1、完整的條件語句產生組合電路,不完整的條件語句產生時序電路
2、FPGA優化主要指速度優化和資源優化
3、case/casez/casex
case語句的表達式的值有4中情況:0、1、z、x。4種是不同的,故表達式要嚴格的相等纔可以操作分支語句。
casez語句中的表達式情況有三種:0、1、x。不用關心z,z可以和任何數值相等,即z =0.z= 1,z=x;
casex語句的表達式情況有二種:0、1.不用關心x和z。即x=z=0,x=z=1.

4、verilog進行電路設計的方法:
(1)自頂向下 top-down
(2)自底向上 bottom-up
(3)綜合法

5、blocking和non-blocking的區別
(1)non-blocking並不是立即執行的,而是在塊結束的時候執行,有對應的硬件電路;
(2)blocking立即執行,只有執行完後才能進行下一個語句。沒有對應的硬件電路,綜合的結果不確定。

6、function的返回是一瞬間的,因此也要求function內部不能有延時

7、moore狀態機輸出只與輸入有關;mealy狀態機輸出與輸出和當前的狀態有關。

8、頂層module一般指將design代碼和testbench連接在一起的代碼

9、綜合是將系統級轉化成行爲級的過程,RTL是reg transport level,寄存器級
在這裏插入圖片描述

10、#(3,4,5)
在這裏插入圖片描述

11、
(1)valid clk edge一個週期內有一個或者兩個。
(2)採樣窗口=setup time + hold time
(3)T - setuptime(worst case) > =time to output >= hold time (best case)
(4)clock to output是輸出延時
(5)P(process考慮電路一致性)V(voltage)T(temperature)裏面,溫度的影響是最大的。溫度大,功耗也大,延時也大。

12、採樣窗口不滿足絕大多數是因爲setup time不滿足引起,hold time不滿足情況較少。setup time與時鐘週期有關,hold time與時鐘週期無關

13、data path 和FSM是顯示設計

14、邏輯綜合 RTL綜合(RTL綜合是目前最最最爲主要的綜合方式)
RTL:存-轉換-存-轉換…在這裏插入圖片描述
15、上升延時,下降延時,三態延時。bestcase ,worstcase,typecase是電路速度的高低,不是實際上的效果好壞。有時候worstcase反而比bestcase好因爲bestcase的holdtime不滿足

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章