新聞中心

        EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Verilog HDL基礎(chǔ)j教程之:程序基本結(jié)構(gòu)

        Verilog HDL基礎(chǔ)j教程之:程序基本結(jié)構(gòu)

        作者: 時(shí)間:2013-08-22 來源:網(wǎng)絡(luò) 收藏

        模塊的框架

        模塊的內(nèi)容包括I/O聲明、I/O說明、內(nèi)部信號(hào)聲明和功能定義。

        1.I/O聲明

        模塊的端口聲明了模塊的輸入輸出端口,其格式如下:

        Module 模塊名(端口1,端口2,端口3,端口4, …);

        2.I/O說明

        I/O說明的格式如下:

        輸入口:input 端口名1,端口名2,…,端口名i; //(共有i個(gè)輸入口)

        輸出口:output 端口名1,端口名2,…,端口名j; //(共有j個(gè)輸出口)

        I/O說明也可以寫在端口聲明語句里,其格式如下:

        module module_name(input port1,input port2,…,output port1,output port2… )

        3.內(nèi)部信號(hào)聲明

        在模塊內(nèi)用到的和與端口有關(guān)的wire和reg變量的聲明,如下所示:

        reg [width-1 : 0] R變量1,R變量2 …;

        wire [width-1 : 0] W變量1,W變量2 …;

        4.功能定義

        模塊中最重要的部分是邏輯功能定義部分,有3種方法可在模塊中產(chǎn)生邏輯。

        (1)用“assign”聲明語句。

        assign a = b c;

        這種方法的句法很簡(jiǎn)單,只需寫一個(gè)“assign”,后面再加一個(gè)方程式即可。例子中的方程式描述了一個(gè)有兩個(gè)輸入的與門。

        (2)用實(shí)例元件。

        and and_inst( q, a, b );

        采用實(shí)例元件的方法在電路圖輸入方式下,調(diào)入庫元件。鍵入元件的名字和相連的引腳即可,表示在設(shè)計(jì)中用到一個(gè)跟與門(and)一樣的名為and_inst的與門,其輸入端為a、b,輸出為q。要求每個(gè)實(shí)例元件的名字必須是惟一的,以避免與其他調(diào)用與門(and)的實(shí)例混淆。

        (3)用“always”塊。

        always @(posedge clk or posedge clr) begin //時(shí)鐘上升沿觸發(fā),異步清零

        if(clr) q = 0; //清零

        else if(en) q = d; //使能賦值

        end

        采用“assign”語句是描述組合邏輯最常用的方法之一,而“always”塊既可用于描述組合邏輯,也可描述時(shí)序邏輯。上面的例子用“always”塊生成了一個(gè)帶有異步清除端的D觸發(fā)器。

        “always”塊可用很多種描述手段來表達(dá)邏輯,例如上例中就用了“if...else”語句來表達(dá)邏輯關(guān)系。如按一定的風(fēng)格來編寫“always”塊,可以通過綜合工具把源代碼自動(dòng)綜合成用門級(jí)結(jié)構(gòu)表示的組合或時(shí)序邏輯電路。需要注意的是,如果用模塊實(shí)現(xiàn)一定的功能,首先應(yīng)該清楚哪些是同時(shí)發(fā)生的,哪些是順序發(fā)生的。

        上面3個(gè)例子分別采用了“assign”語句、實(shí)例元件和“always”塊。這3個(gè)例子描述的邏輯功能是同時(shí)執(zhí)行的。也就是說,如果把這3項(xiàng)寫到一個(gè)模塊文件中去,它們的次序不會(huì)影響邏輯實(shí)現(xiàn)的功能。這3項(xiàng)是同時(shí)執(zhí)行的,也就是并發(fā)的。

        然而,在“always”模塊內(nèi),邏輯是按照指定的順序執(zhí)行的。“always”塊中的語句稱為“順序語句”,因?yàn)樗鼈兪琼樞驁?zhí)行的。請(qǐng)注意,兩個(gè)或更多的“always”模塊也是同時(shí)執(zhí)行的,但是模塊內(nèi)部的語句是順序執(zhí)行的。

        看一下“always”內(nèi)的語句,就會(huì)明白它是如何實(shí)現(xiàn)功能的。“if…else… if”必須順序執(zhí)行,否則其功能就沒有任何意義。如果else語句在if語句之前執(zhí)行,功能就會(huì)不符合要求。為了能實(shí)現(xiàn)上述描述的功能,“always”模塊內(nèi)部的語句將按照書寫的順序執(zhí)行。


        上一頁 1 2 下一頁

        關(guān)鍵詞: Verilog HDL 基礎(chǔ) 程序

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 吴川市| 海口市| 通州区| 榆林市| 于田县| 孟津县| 库尔勒市| 湾仔区| 滕州市| 阿鲁科尔沁旗| 桃园市| 山阴县| 贺州市| 永州市| 沂南县| 广平县| 恩施市| 中卫市| 威海市| 军事| 盐池县| 锡林浩特市| 甘南县| 册亨县| 柳林县| 桃江县| 石屏县| 侯马市| 团风县| 公安县| 蓬安县| 耒阳市| 苍梧县| 嵩明县| 桑日县| 微山县| 常熟市| 北票市| 中西区| 商城县| 营口市|