Verilog 語(yǔ)言簡(jiǎn)介

什么是 Verilog 語(yǔ)言

Verilog一般指Verilog HDL。Verilog HDL是一種硬件描述語(yǔ)言(HDL:Hardware Description Language),以文本形式來(lái)描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語(yǔ)言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。

Verilog 語(yǔ)言要素

? Verilog的設(shè)計(jì)初衷是成為一種基本語(yǔ)法與C語(yǔ)言相近的硬件描述語(yǔ)言。這是因?yàn)镃語(yǔ)言在Verilog設(shè)計(jì)之初,已經(jīng)在許多領(lǐng)域得到廣泛應(yīng)用,C語(yǔ)言的許多語(yǔ)言要素已經(jīng)被許多人習(xí)慣。一種與C語(yǔ)言相似的硬件描述語(yǔ)言,可以讓電路設(shè)計(jì)人員更容易學(xué)習(xí)和接受。不過(guò),Verilog與C語(yǔ)言還是存在許多差別。另外,作為一種與普通計(jì)算機(jī)編程語(yǔ)言不同的硬件描述語(yǔ)言,它還具有一些獨(dú)特的語(yǔ)言要素,例如向量形式的線網(wǎng)和寄存器、過(guò)程中的非阻塞賦值等??偟膩?lái)說(shuō),具備C語(yǔ)言的設(shè)計(jì)人員將能夠很快掌握Verilog硬件描述語(yǔ)言。

Verilog基本語(yǔ)法

Verilog基本結(jié)構(gòu)

/* 模塊聲明 */
module flowing_light(
    /* 端口定義 */
    input clk,
    input rst,
    output [15:0] led
);

    /* 信號(hào)類(lèi)型聲明 */
    reg [29:0] cnt_reg;
    reg [15:0] light_reg;

    always@ (posedge clk) begin
        /* 功能描述 */
        if(!rst)
            cnt_reg <= 0;
        else if (cnt_reg >= 100000000)
            cnt_reg <= 0;
        else
            cnt_reg += 1;
    end

    always@ (posedge clk) begin
        /* 功能描述 */
        if(!rst)
            light_reg <= 16'h0001;
        else if(cnt_reg == 29'd100000000) begin
            if(light_reg == 16'h8000)
                light_reg <= 16'h0001;
            else
                light_reg <= light_reg << 1;
            end
    end

    assign led = light_reg;
/* 模塊結(jié)束聲明 */
endmodule

Verilog 常用信號(hào)類(lèi)型

wire型

輸出始終隨輸入的變化而變化的變量,表示結(jié)構(gòu)實(shí)體,如門(mén)店了之間的物理連接。

reg型

對(duì)應(yīng)具有狀態(tài)保持作業(yè)的電路元件,如觸發(fā)器、寄存器等。

Always 塊

always塊的基本說(shuō)明

  • 主要描述邏輯功能的塊
  • 括號(hào)內(nèi)為敏感信號(hào)表

組合邏輯快塊

always (*) begin
    /* 邏輯語(yǔ)句 */
end

時(shí)序邏輯塊

always (posedge clk) begin
    /* 邏輯語(yǔ)句 */
end

帶異步下降沿復(fù)位的時(shí)序邏輯塊

always (posedge clk or negedge rst) begin
    /* 邏輯語(yǔ)句 */
end

always@(*)和always不加@的區(qū)別

  • 若沒(méi)有@,則是一般在teastbench 中產(chǎn)生時(shí)鐘信號(hào),指不會(huì)滿(mǎn)足特定的條件,執(zhí)行完一次后立馬繼續(xù)執(zhí)行下一次,一直重復(fù)執(zhí)行。
  • 有@時(shí),是每次執(zhí)行語(yǔ)句時(shí),必須滿(mǎn)足括號(hào)內(nèi)的條件才能繼續(xù)執(zhí)行語(yǔ)句,否則不執(zhí)行。

所以說(shuō):當(dāng)使用always塊生成時(shí)鐘信號(hào)時(shí),不用加上@,加上之后編譯會(huì)發(fā)生錯(cuò)誤。

模塊例化

/* 模塊定義 */
module add(
    input a,b;
    output c;
    assign c=a+b);
endmodule
/* 模塊定義 */
module double_add(
    input d,e,f,
    output g
);
    /* 模塊例化1 */
    /* add:模塊名;add_inst1:例化名稱(chēng) */
    add add_inst1(
        /* 端口映射 */
        .a(d),
        .b(e),
        .c(temp)
    );
    /* 模塊例化2 */
    add add_inst2(
        /* 端口映射 */
        .a(f),
        .b(temo),
        .c(g)
    );
endmodule
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容