新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > Verilog HDL基礎教程之:賦值語句和塊語句

        Verilog HDL基礎教程之:賦值語句和塊語句

        作者: 時間:2013-08-23 來源:網絡 收藏

        2.并行塊

        并行塊有以下4個特點。

        (1)塊內語句是同時執行的,即程序流程控制一進入該并行塊,塊內語句則開始同時并行地執行。

        (2)塊內每條語句的延遲時間是相對于程序流程控制進入到塊內時的仿真時間的。

        (3)延遲時間是用來給賦值語句提供執行時序的。

        (4)當按時間時序排序在最后的語句執行完后或一個disable語句執行時,程序流程控制跳出該程序塊。

        并行塊的格式如下:

        fork

        語句1;

        語句2;

        .......

        語句n;

        join

        或者:

        fork:塊名

        塊內聲明語句

        語句1;

        語句2;

        ......

        語句n;

        join

        其中:

        (1)塊名即標識該塊的一個名字,相當于一個標識符。

        (2)塊內說明語句可以是參數說明語句、reg型變量聲明語句、integer型變量聲明語句、real型變量聲明語句、ime型變量聲明語句或者事件(event)說明語句。

        下面舉例說明。

        例5:并行塊1。

        fork

        #50 r = 'h35; //在絕對時間50單位后,r被賦值

        #100 r = 'hE2; //在絕對時間100單位后(非絕對時間150),r再次被賦值

        #150 r = 'h00;

        #200 r = 'hF7;

        #250 -> end_wave; //在絕對時間250單位后,觸發事件end_wave

        join

        在這個例子中用并行塊來替代前面例子中的順序塊來產生波形,用這兩種方法生成的波形是一樣的。

        3.塊名

        語言中,可以給每一個塊取名字,只需將名字加在關鍵詞begin或fork后面即可,這樣做的原因有以下幾點。

        (1)這樣可以在塊內定義局部變量,即只在塊內使用的變量。

        (2)這樣可以允許塊被其他語句調用,如被disable語句調用。

        (3)在語言里,所有的變量都是靜態的,即所有的變量都只有一個惟一的存儲地址,因此進入或跳出塊并不影響存儲在變量內的值。

        基于以上原因,塊名就提供了一個在任何仿真時刻確認變量值的方法。需要注意的是,塊名和變量名一樣,都不能是關鍵詞。

        4.起始時間和結束時間

        在并行塊和順序塊中都有一個起始時間和結束時間的概念。對于順序塊,起始時間就是第一條語句開始被執行的時間,結束時間就是最后一條語句執行完的時間。而對于并行塊來說,起始時間對于塊內所有的語句是相同的,即程序流程控制進入該塊的時間,其結束時間是按時間排序在最后的語句執行完的時間。

        當一個塊嵌入另一個塊時,塊的起始時間和結束時間是很重要的。跟在塊后面的語句只有在該塊的結束時間到了才能開始執行,也就是說,只有該塊完全執行完后,后面的語句才可以執行。

        在fork_join塊內,各條語句不必按順序給出,因此在并行塊里,各條語句在前還是在后是無關緊要的,如下所示。

        例6:并行塊2。

        fork

        #250 -> end_wave; //按下面幾條語句順序執行結果和例[6]的執行結果一樣

        #200 r = 'hF7;

        #150 r = 'h00;

        #100 r = 'hE2;

        #50 r = 'h35;

        join

        在這個例子中,各條語句并不是按被執行的先后順序給出的,但同樣可以生成前面例子中的波形。

        關鍵詞

        中,所有的關鍵詞是事先定義好的確認符,用來組織語言結構。關鍵詞是用小寫字母定義的,因此在編寫原程序時要注意關鍵詞的書寫,以避免出錯。下面是Verilog 中使用的關鍵詞(請參閱附錄:Verilog語言參考手冊):

        always、and、assign、begin、buf、bufif0、bufif1、case、casex、casez、cmos、deassign、default、defparam、disable、edge、else、end、endcase、endmodule、endfunction、endprimitive、endspecify、endtable、endtask、event、for、force、forever、fork、function、highz0、highz1、if、initial、inout、input、integer、join、large、macromodule、medium、module、nand、negedge、nmos、nor、not、notif0、notifl、or、output、parameter、pmos、posedge、primitive、pull0、pull1、pullup、pulldown、rcmos、reg、releses、repeat、mmos、rpmos、rtran、rtranif0、rtranif1、scalared、small、specify、specparam、strength、strong0、strong1、supply0、supply1、table、task、time、tran、tranif0、tranif1、tri、tri0、tri1、triand、trior、trireg、vectored、wait、wand、weak0、weak1、while、wire、wor、xnor、xor。

        在編寫Verilog HDL程序時,變量名、端口名、塊名等的定義不要與這些關鍵詞沖突。


        上一頁 1 2 下一頁

        關鍵詞: Verilog HDL 基礎教程

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南陵县| 灵宝市| 洛扎县| 肇州县| 舒城县| 探索| 雅安市| 奉贤区| 洱源县| 孝感市| 东兰县| 祁连县| 融水| 翁牛特旗| 会泽县| 加查县| 尼木县| 榆林市| 甘洛县| 儋州市| 宜城市| 海丰县| 东港市| 甘德县| 罗定市| 泰兴市| 灵武市| 南澳县| 镇江市| 盐边县| 黑河市| 县级市| 德惠市| 兴文县| 明星| 辽阳市| 泰和县| 柳江县| 周至县| 南华县| 元谋县|