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