模組由兩部分組成,一部分描述介面,另一部分描述邏輯功能(可以模擬軟體程式中的函式由資料加演算法組成),邏輯功能定義輸入怎麼影響輸出。
1、模組埠定義
module 模組名(口1,口2,口3,口4,……);
口1,口2,口3,口4,……表示模組的輸入和輸出名。
引用模組時其埠可以用兩種方法連線
(1)嚴格按照模組定義的埠順序連線
模組名(連線埠1訊號名,連線埠2訊號名,連線埠3訊號名,……)
(2)用「.」符號,表明模組是定義時規定的埠名
模組名(.埠1名(連線訊號1名),埠2名(連線訊號2名),……)
例如:mydesignmk m1(.sin(serialin),.pout(parallelout),……)
2、模組內容
模組內容包括i/o說明、內部訊號宣告和功能定義
(1)i/o說明的格式
輸入口: input[訊號位寬-1:0] 埠名1;
輸出口: output[訊號位寬-1:0]埠名1;
輸入輸出口: inout[訊號位寬-1:0]埠名1;
i/o說明也可以寫在埠宣告語句裡。例如:
module module_name(input port1,input port2,……output port1,output port2,……);
(2)內部訊號說明
在模組內用到的和與埠有關的wire和reg型別變數的宣告。
如:reg[width-1:0]r變數1,r變數2……;
wire[width-1:0]w變數1,w變數2……;
(3)功能定義
有三種方法
(1)用「assign」宣告語句 如:assign a = b & c;
(2)用例項元件 如:and # 2 ul(q,a,b);
這表示在設計中用到乙個跟與門一樣的名為u1的與門,其輸入端為a,b,輸出為q。輸出延遲為兩個單位時間。要求每個例項元件的名字必須是唯一的,以避免與其他呼叫與門的例項混淆。
(3)用「always」塊, 如:
always @(posedge clk or posedge clr);
begin
if(clr) q <= 0;
else if(en) q <= d;
end「assign」是描述組合邏輯最常用的方法之一。而「always」既可用於描述組合邏。也可描述時序邏輯。
用verilog模組實現一定的功能,首先應該清楚哪些是同時發生,哪些是順序發生。
像用上面的三個關鍵字寫的模組在乙個verilog檔案中,這些模組同時執行,也就是併發。
但是「always」模組內,邏輯是順序執行,所以「always」也稱為「過程塊」。
3、要點總結
(1)verilog模組中所有過程塊、連續賦值語句、實力引用都是並行的
(2)他們表示的是一種通過變數名互相連線的關係
FPGA學習筆記(一) 初識FPGA
該隨筆中部分內容 自小梅哥 fpga field programmable gate array,現場可程式設計門陣列 正如其名,fpga內部有大量的可程式設計邏輯功能塊,使用verilog hdl 硬體描述語言 實現設計。玩過微控制器的小夥伴剛接觸fpga可能會有點困惑,其實fpga與微控制器最大...
fpga入門學習之一 fpga簡介
fpga簡介 說到底,fpga就是乙個能夠按照自己的意願去實現一些功能模組的這麼一種晶元。那問題就來啦,dsp也好 微控制器也好都能夠實現你說的這些功能,那我為什麼要選擇fpga呢?筆者認為選擇fpga的原因就在於,我如果想實現乙個20個串列埠收發資料的模組怎麼辦,我如果想實現乙個幾百兆時鐘的設計怎...
FPGA學習記錄一
fpga學習記錄 20170608 周四 早上洗好了衣服。中午下了大雨,難得遇一次。下午來,除錯放大板子,折騰半天,問題還是沒有解決,有點心累。飛了幾根線,但還是不行,實在沒信心去做了。所以還是來學習fpga吧,這個不那麼讓人傷心。串列埠uart的測試。需要建立多個測試文字程式,後面又去弄板子測試了...