新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Verilog的語言要素有哪些?

        Verilog的語言要素有哪些?

        作者: 時間:2018-08-03 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201808/385258.htm

        語言定義了實數如何隱式地轉換為整數。實數通過四舍五入被轉換為最相近的整數。

        42.446, 42.45 轉換為整數42

        92.5, 92.699 轉換為整數93

        -15.62 轉換為整數-16

        -26.22 轉換為整數-26

        3.6.3 字符串

        字符串是雙引號內的字符序列。字符串不能分成多行書寫。例如:

        INTERNAL ERROR

        REACHED->HERE

        用8位ASCII值表示的字符可看作是無符號整數。因此字符串是8位ASCII值的序列。為存儲字符串“INTERNAL ERROR”,變量需要8*14位。

        reg [1 : 8*14] Message;

        . . .

        Message = INTERNAL ERROR

        反斜線 ( ) 用于對確定的特殊字符轉義。

        n 換行符

        t 制表符

        \ 字符本身

        字符

        206 八進制數206對應的字符

        3.7 數據類型

        HDL 有兩大類數據類型。

        1) 線網類型。net type 表示結構化元件間的物理連線。它的值由驅動元件的值決定,例如連續賦值或門的輸出。如果沒有驅動元件連接到線網,線網的缺省值為z。

        2) 寄存器類型。register type表示一個抽象的數據存儲單元,它只能在always語句和initial語句中被賦值,并且它的值從一個賦值到另一個賦值被保存下來。寄存器類型的變量具有x 的缺省值。

        3.7.1 線網類型

        線網數據類型包含下述不同種類的線網子類型。

        * wire

        * tri

        * wor

        * trior

        * wand

        * triand

        * trireg

        * tri1

        * tri0

        * supply0

        * supply1

        簡單的線網類型說明語法為:

        net_kind [msb:lsb] net1, net2, . . . , netN;

        net_kind 是上述線網類型的一種。msb和lsb 是用于定義線網范圍的常量表達式;范圍定義是可選的;如果沒有定義范圍,缺省的線網類型為1位。下面是線網類型說明實例。

        wire Rdy, Start; //2個1位的連線。

        wand [2:0] Addr; //Addr是3位線與。

        當一個線網有多個驅動器時,即對一個線網有多個賦值時,不同的線網產生不同的行為。例如,

        wor Rde;

        . . .

        assign Rde = Blt Wyl;

        . . .

        assign Rde = Kbl | Kip;

        本例中,Rde有兩個驅動源,分別來自于兩個連續賦值語句。由于它是線或線網,Rde的有效值由使用驅動源的值(右邊表達式的值)的線或(wor)表(參見后面線或網的有關章節)決定。

        1. wire和tri線網

        用于連接單元的連線是最常見的線網類型。連線與三態線(tri)網語法和語義一致;三態線可以用于描述多個驅動源驅動同一根線的線網類型;并且沒有其他特殊的意義。

        wire Reset;

        wire [3:2] Cla, Pla, Sla;

        tri [ MSB-1 : LSB +1] Art;

        如果多個驅動源驅動一個連線(或三態線網),線網的有效值由下表決定。

        wire (或 tri) 0 1 x z

        0 0 x x 0

        1 x 1 x 1

        x x x x x

        z 0 1 x z

        下面是一個具體實例:

        assign Cla = Pla Sla;

        . . .

        assign Cla = Pla ^ Sla;

        在這個實例中,Cla有兩個驅動源。兩個驅動源的值(右側表達式的值)用于在上表中索引,以便決定Cla的有效值。由于Cla是一個向量,每位的計算是相關的。例如,如果第一個右側表達式的值為01x, 并且第二個右測表達式的值為11z,那么Cla 的有效值是x1x (第一位0和1在表中索引到x, 第二位1和1在表中索引到1,第三位x 和z在表中索引到x)。

        2. wor和trior線網

        線或指如果某個驅動源為1,那么線網的值也為1。線或和三態線或(trior)在語法和功能上是一致的。

        wor [MSB:LSB] Art;

        trior [MAX-1: MIN-1] Rdx, Sdx, Bdx;

        如果多個驅動源驅動這類網,網的有效值由下表決定。

        wor (或 trior) 0 1 x z

        0 0 1 x 0

        1 1 1 1 1

        x x 1 x x

        z 0 1 x z

        3. wand和triand線網

        線與(wand)網指如果某個驅動源為0,那么線網的值為0。線與和三態線與(triand)網在語法和功能上是一致的。

        wand [-7 : 0] Dbus;

        triand Reset, Clk;

        如果這類線網存在多個驅動源,線網的有效值由下表決定。

        wand (或 triand) 0 1 x z

        0 0 0 0 0

        1 0 1 x 1

        x 0 x x x

        z 0 1 x z

        4. trireg線網

        此線網存儲數值(類似于寄存器),并且用于電容節點的建模。當三態寄存器(trireg)的所有驅動源都處于高阻態,也就是說,值為z時,三態寄存器線網保存作用在線網上的最后一個值。此外,三態寄存器線網的缺省初始值為x。

        trireg [1:8] Dbus, Abus;

        5. tri0和tri1線網

        這類線網可用于線邏輯的建模,即線網有多于一個驅動源。tri0(tri1)線網的特征是,若無驅動源驅動,它的值為0(tri1的值為1)。

        tri0 [-3:3] GndBus;

        tri1 [0:-5] OtBus, ItBus;

        下表顯示在多個驅動源情況下tri0或tri1網的有效值。

        tri0 (tri1) 0 1 x z

        0 0 x x 0

        1 x 1 x 1

        x x x x x

        z 0 1 x 0(1)

        6. supply0和supply1線網

        supply0用于對“地”建模,即低電平0;supply1網用于對電源建模,即高電平1;例如:

        supply0 Gnd, ClkGnd;

        supply1 [2:0] Vcc;

        3.7.2 未說明的線網

        在Verilog HDL中,有可能不必聲明某種線網類型。在這樣的情況下,缺省線網類型為1位線網。

        可以使用`default_nettype編譯器指令改變這一隱式線網說明方式。使用方法如下:

        `default_nettype net_kind

        例如,帶有下列編譯器指令:

        `default_nettype wand

        任何未被說明的網缺省為1位線與網。

        3.7.3 向量和標量線網

        在定義向量線網時可選用關鍵詞scalared 或vectored。如果一個線網定義時使用了關鍵詞vectored, 那么就不允許位選擇和部分選擇該線網。換句話說,必須對線網整體賦值(位選擇和部分選擇在下一章中講解)。例如:



        關鍵詞: Verilog FPGA

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 北碚区| 师宗县| 翁牛特旗| 梨树县| 兴隆县| 潮安县| 五台县| 壤塘县| 建昌县| 南华县| 历史| 观塘区| 博野县| 视频| 淮南市| 获嘉县| 上高县| 靖西县| 中牟县| 延津县| 泰兴市| 徐州市| 栾城县| 北海市| 韶山市| 土默特左旗| 凤冈县| 邳州市| 镇坪县| 兴山县| 穆棱市| 固安县| 祁东县| 饶阳县| 濮阳市| 望谟县| 克什克腾旗| 富顺县| 桃园市| 佛学| 平遥县|