舉例:與非門
與非門的Verilog 描述如下圖所示,源程序文件的后綴為.v。
Verilog語言的基本描述單元是模塊,也就是module。可以看到每一個功能模塊都是以module開始,endmodule結束的。一個.v文件可以同時包含多個這樣的模塊。但是,我們建議大家一個.v文件只包含一個模塊,這樣便于程序的管理、調試以及復用。
在模塊聲明中還包含這個模塊的名稱,以及端口列表,模塊就是通過這些端口與其他功能模塊進行通信的。我們可以將模塊看作一個具有特定功能的電路或集成芯片,端口就相當于這個電路的引腳。
這個與非門模塊包含了abc三個端口,那么這些端口哪些是輸入,哪些是輸出呢,我們需要對其進行聲明。并且還要聲明這些端口的類型,最常用的就是wire和reg兩種類型,其中wire是默認類型,可以省略。后續我們會詳細講解,這里不多做介紹。接下來就是模塊的主體部分“邏輯功能描述”,這里使用的是組合邏輯常用assign連續賦值語句。
舉例:D觸發器
再來看一個簡單的上升沿d觸發器的例子,如下圖所示。
D觸發器是時序電路的基本組成單元。可以看到模塊聲明和剛才的格式略有不同(兩種格式均可),但整個模塊仍然是以module開始,endmodule結束的。module后面是模塊名,這里模塊名后面的括號中將端口聲明和端口類型聲明放在了一起,這是vivado自動生成的格式。
這里的clk和d_i是輸入信號,沒有指明類型,則默認為wire型。q_o是一個reg類型的輸出端口。接下來就是邏輯功能描述,這里采用了時序邏輯主要使用的always語句。
兩種端口聲明格式
下面是與非門模塊的兩種描述格式。
總結
- 一個Verilog HDL模塊是以module開始,endmodule結束的。
- module后面是模塊名,是所設計電路的標識符。
- 模塊名后面的括號中是模塊的端口名,使用逗號隔開,最后一個端口后面沒有標點符號。
- 端口及其類型聲明:端口還需要定義是輸入還是輸出,以及端口信號的類型是wire型還是reg型,這些都可以放在端口名后面的括號中一起聲明。此外,在模塊中所使用的一些內部信號和數據對象也要進行數據類型聲明。
一般使用assign賦值的信號聲明為wire型,在always或initial語句中賦值的信號聲明為reg型。還可以使用參數來定義常量,增加程序的可讀性。Verilog的數據類型有很多,但80%的情況只用到這三種。
- 模塊的主體用于描述模塊的邏輯功能。常用的有:① assign連續賦值語句,多用于描述組合電路。② always語句可以描述時序邏輯也可以描述組合邏輯。③ 還可以通過實例化已有的模塊的方式來建立新的模塊,像搭積木一樣快速搭建一個系統。
-
D觸發器
+關注
關注
2文章
163瀏覽量
47699 -
時序邏輯電路
+關注
關注
2文章
85瀏覽量
16494 -
Module
+關注
關注
0文章
63瀏覽量
12829 -
CLK
+關注
關注
0文章
124瀏覽量
17011 -
Verilog語言
+關注
關注
0文章
113瀏覽量
8184
發布評論請先 登錄
相關推薦
評論