0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA編程語(yǔ)言之verilog語(yǔ)法1

jf_78858299 ? 來(lái)源:Hack電子 ? 作者:Hack電子 ? 2023-05-22 15:52 ? 次閱讀

Verilog語(yǔ)法的基本概念

一、Verilog HDL

Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的語(yǔ)言。用Verilog HDL描述的電路設(shè)計(jì)就是該電路的Verilog HDL模型也稱(chēng)為模塊。Verilog HDL既是一種行為描述的語(yǔ)言也是一種結(jié)構(gòu)描述的語(yǔ)言。這也就是說(shuō),無(wú)論描述電路功能行為的模塊或描述元器件或較大部件互連的模塊都可以用Verilog語(yǔ)言來(lái)建立電路模型。如果按照一定的規(guī)矩編寫(xiě),功能行為模塊可以通過(guò)工具自動(dòng)地轉(zhuǎn)換為門(mén)級(jí)互連模塊。Verilog模型可以是實(shí)際電路的不同級(jí)別的抽象。這些抽象的級(jí)別和它們對(duì)應(yīng)的模型類(lèi)型共有以下五種:

1.1 系統(tǒng)級(jí)(system): 用語(yǔ)言提供的高級(jí)結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)模塊外部性能的模型。

1.2 算法級(jí)(algorithm): 用語(yǔ)言提供的高級(jí)結(jié)構(gòu)實(shí)現(xiàn)算法運(yùn)行的模型。

1.3 RTL級(jí)(Register Transfer Level):描述數(shù)據(jù)在寄存器之間流動(dòng)和如何處理和控制這些數(shù)據(jù)流動(dòng)的模型。

1.4 門(mén)級(jí)(gate-level):描述邏輯門(mén)以及邏輯門(mén)之間的連接的模型。

1.5 開(kāi)關(guān)級(jí)(switch-level):描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)以及它們之間連接的模型。

二、Verilog HDL模塊

一個(gè)復(fù)雜電路系統(tǒng)的完整Verilog HDL模型是由若干個(gè)Verilog HDL模塊構(gòu)成的,每一個(gè)模塊又可以由若干個(gè)子模塊構(gòu)成。其中有些模塊需要綜合成具體電路,而有些模塊只是與用戶(hù)所設(shè)計(jì)的模塊有交互聯(lián)系的現(xiàn)存電路或激勵(lì)信號(hào)源。利用Verilog HDL語(yǔ)言結(jié)構(gòu)所提供的這種功能就可以構(gòu)造一個(gè)模塊間的清晰層次結(jié)構(gòu)來(lái)描述極其復(fù)雜的大型設(shè)計(jì),并對(duì)所作設(shè)計(jì)的邏輯電路進(jìn)行嚴(yán)格的驗(yàn)證。

Verilog HDL行為描述語(yǔ)言作為一種結(jié)構(gòu)化和過(guò)程性的語(yǔ)言,其語(yǔ)法結(jié)構(gòu)非常適合于算法級(jí)和RTL級(jí)的模型設(shè)計(jì)。這種行為描述語(yǔ)言具有以下功能:

(1) 可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構(gòu)。

(2) 用延遲表達(dá)式或事件表達(dá)式來(lái)明確地控制過(guò)程的啟動(dòng)時(shí)間。

(3) 通過(guò)命名的事件來(lái)觸發(fā)其它過(guò)程里的激活行為或停止行為。

(4) 提供了條件、if-else、case、循環(huán)程序結(jié)構(gòu)。

(5) 提供了可帶參數(shù)且非零延續(xù)時(shí)間的任務(wù)(task)程序結(jié)構(gòu)。

(6) 提供了可定義新的操作符的函數(shù)結(jié)構(gòu)(function)。

(7) 提供了用于建立表達(dá)式的算術(shù)運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符。

Verilog HDL作為一種高級(jí)的硬件描述編程語(yǔ)言,與C語(yǔ)言的風(fēng)格有許多類(lèi)似之處。其中有許多語(yǔ)句如:if語(yǔ)句、case語(yǔ)句等和C語(yǔ)言中的對(duì)應(yīng)語(yǔ)句十分相似。如果讀者已經(jīng)掌握C語(yǔ)言編程的基礎(chǔ),那么學(xué)習(xí)Verilog HDL并不困難。我們只要對(duì)Verilog HDL某些語(yǔ)句的特殊方面著重理解,并加強(qiáng)上機(jī)練習(xí)就能很好地掌握它,就能利用它的強(qiáng)大功能來(lái)設(shè)計(jì)復(fù)雜的數(shù)字邏輯電路系統(tǒng)。

2.1 簡(jiǎn)單的Verilog HDL模塊

2.1.1 Verilog 語(yǔ)法簡(jiǎn)介

下面先介紹一個(gè)個(gè)簡(jiǎn)單的Verilog HDL程序,從中了解Verilog模塊的特性。

module test_project_top( //模塊名

input clk, // 時(shí)鐘輸入

input resetn, // 復(fù)位

input[7:0] a, //信號(hào)輸入,信號(hào)a 位寬為8 bit

input[7:0] b, //信號(hào)輸入,信號(hào)b 位寬為8 bit

input en, // 信號(hào)是能輸入 信號(hào)en 位寬為1 bit

output reg [8:0] c, // 寄存器類(lèi)型定義,信號(hào)輸出 c為9bit

output reg [15:0] d // 寄存器類(lèi)型定義,信號(hào)輸出 d 為16bit

);

/ ........ / //.........表示注釋部分,注釋只是為了方便程序員理解程序,對(duì)編譯是不起作用的。

/*一個(gè) .v文件中主要由 一個(gè)或多個(gè) module ... endmodule塊組成

每個(gè)module塊內(nèi)包括:模塊名,輸入端口,輸出端口,以及多個(gè)時(shí)序電路,組合電路等組成

*/

// 簡(jiǎn)單的時(shí)序電路組成

always@(posedge clk or negedge resetn)

begin

if(~resetn) // 或者 if(!resetn) 取 resetn 反

begin

d<=16'h0;

end

else

begin

if(en) // if en ==1 那么 d等于a*b+a/b;否則d<=0

d<=ab+a/b; // + , - , ,/ 加減乘除

else

d<=0;

end

end

// 簡(jiǎn)單的組合電路

always@(a or b) // 只要其中a或b一個(gè)變化就執(zhí)行always塊內(nèi)語(yǔ)句

begin

if(en) // verilog 語(yǔ)法 if ... else ...,在組合電路中一個(gè)if對(duì)應(yīng)一個(gè)else,不能缺else,防止產(chǎn)生鎖存器

c<=a*b+a/b;

else

c<=0;

end

wire[8:0] sum; // 常見(jiàn)變量定義類(lèi)型:wire-線(xiàn)網(wǎng)型,reg-寄存器

assign sum =a+b; // 組合電路賦值,關(guān)鍵字 assign

wire[15:0] multy;

assign multy = (en ) ? ab :0;// 如果 en ==1,那么 multy =ab,否則multy =0;

wire e;

assign e =&a; // & 按位與

wire f;

assign f =|b;// | 按位或

wire [8:0] c_sum;

// 實(shí)例化模塊

my_add u_add_top( // my_add 模塊名 ,u_add_top 實(shí)例化名

.clk(clk), //端口連接輸入

.resetn(resetn),//端口連接輸入

.a(a),//端口連接輸入

.b(b),//端口連接輸入

.c(c_sum)//端口連接輸出

);

endmodule

這個(gè)小程序表述了一個(gè).v文件包含了常用的verilog語(yǔ)法,變量的定義類(lèi)型包括:wire,reg等,常見(jiàn)的運(yùn)算符號(hào)跟C語(yǔ)言中相同,理解較容易。在這個(gè)例子中存在著兩個(gè)模塊。模塊test_project_top引用由模塊my_add定義的實(shí)例部件u_add_top。模塊test_project_top是頂層模塊。模塊my_add則被稱(chēng)為子模塊。在實(shí)例部件u_add_top中,帶 “.”的表示被引用模塊的端口,名稱(chēng)必須與被引用模塊my_add的端口定義一致,小括號(hào)中表示在本模塊中與之連接的線(xiàn)路。

2.1.2 Verilog用于模塊的測(cè)試

Verilog 還可以用來(lái)描述變化的測(cè)試信號(hào)。描述測(cè)試信號(hào)的變化和測(cè)試過(guò)程的模塊也叫做測(cè)試平臺(tái)(Testbench 或Testfixture),它可以對(duì)上面介紹的電路模塊(無(wú)論是行為的或結(jié)構(gòu)的)進(jìn)行動(dòng)態(tài)的全面測(cè)試。通過(guò)觀測(cè)被測(cè)試模塊的輸出信號(hào)是否符合要求,可以調(diào)試和驗(yàn)證邏輯系統(tǒng)的設(shè)計(jì)和結(jié)構(gòu)正確與否,發(fā)現(xiàn)問(wèn)題及時(shí)修改。

下面我們來(lái)看一個(gè)Verilog的測(cè)試模塊,

// 測(cè)試激勵(lì)產(chǎn)生

`timescale 1ns / 1ps

module test_project_top_tb; // 測(cè)試文件模塊名

// 信號(hào)測(cè)試激勵(lì),輸入變量聲明

reg clk ;

reg reset;

reg [7:0] a;

reg [7:0] b;

reg en;

// 輸出變量聲明

wire[8:0] c;

wire [15:0] d;

// 信號(hào)變量初始化 ,關(guān)鍵字 initial

initial

begin

clk =0;

reset =0;

a =0;

b =0;

en =0;

#1000; // 在1000 ns后 reset拉高

reset =1;

end

// 時(shí)鐘生成

always #5 clk =~clk; //時(shí)鐘周期 10ns ,每隔5ns 取反一次

always @(posedge clk)

begin // {$random} 為系統(tǒng)任務(wù),它會(huì)產(chǎn)生一個(gè)隨機(jī)數(shù)

#1 a= {$random}%256; // 產(chǎn)生隨機(jī)的位信號(hào)流a和b ,%256為做模256運(yùn)算

#3 b = {$random}%256; // 分別延遲1和3個(gè)時(shí)間單位后產(chǎn)生隨機(jī)的位信號(hào)流a 和b

end

always #10000 en = !en; //產(chǎn)生周期為10000個(gè)單位時(shí)間的選通信號(hào)變化

// 實(shí)例化 被測(cè)試模塊

test_project_top u_top(

.clk(clk), // 時(shí)鐘輸入

.resetn(reset), // 復(fù)位

.a(a), //信號(hào)輸入,信號(hào)a 位寬為8 bit

.b(b), //信號(hào)輸入,信號(hào)b 位寬為8 bit

.en(en), // 信號(hào)是能輸入 信號(hào)en 位寬為1 bit

.c(c), // 寄存器類(lèi)型定義,信號(hào)輸出 c為9bit

.d(d) // 寄存器類(lèi)型定義,信號(hào)輸出 d 為16bit

);

endmodule

本測(cè)試?yán)淌菍?duì)2.1.1中的小程序的測(cè)試,屬于RTL級(jí)功能仿真,主要調(diào)試語(yǔ)法及時(shí)序信號(hào)是否跟設(shè)計(jì)時(shí)一致。對(duì)于初學(xué)者來(lái)說(shuō),這是最基本的技能,必須熟練掌握。

圖片

圖1 仿真時(shí)序圖

2.1.3 總結(jié):

通過(guò)上面這些的例子可以看到以下幾點(diǎn):

(1) Verilog HDL程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都是位于module和endmodule兩個(gè)語(yǔ)句之間,每個(gè)模塊實(shí)現(xiàn)特定的功能。

(2) 模塊是可以進(jìn)行層次嵌套的。正因?yàn)槿绱?才可以將大型的數(shù)字電路設(shè)計(jì)分割成不同的小模塊來(lái)實(shí)現(xiàn)特定的功能。

(3) 每個(gè)模塊都是可以綜合的,通過(guò)綜合工具可以把它們的功能描述全都轉(zhuǎn)換為最基本的邏輯單元描述,最后可以用一個(gè)上層模塊通過(guò)實(shí)例引用把這些模塊連接起來(lái),把它們整合成一個(gè)很大的邏輯系統(tǒng)。

(4) Verilog 模塊可以分為兩種類(lèi)型:一種是為了讓模塊最終能生成電路結(jié)構(gòu),另一種只是為了測(cè)試所設(shè)計(jì)的電路其邏輯功能是否正確。

(5) 每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出口,然后對(duì)模塊的功能進(jìn)行 描述。

(6) Verilog HDL程序的書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫(xiě)多行。

(7) 除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。

(8) 可以用/ ..... /和//.......對(duì)Verilog HDL程序的任何部分作注釋。一個(gè)好的,有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 元器件
    +關(guān)注

    關(guān)注

    112

    文章

    4717

    瀏覽量

    92339
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110107
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    327

    瀏覽量

    47392
  • 數(shù)字系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    20851
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog HDL語(yǔ)言編程基礎(chǔ)與FPGA常用開(kāi)發(fā)工具

    關(guān)鍵字:Altera 、FPGA、軟硬件協(xié)調(diào)設(shè)計(jì)(Verilog & C)、CPU、總線(xiàn)、外設(shè)FPGA硬件結(jié)構(gòu)知識(shí)Verilog HDL語(yǔ)言
    發(fā)表于 12-22 08:06

    _Verilog_HDL的基本語(yǔ)法

    Verilog_HDL語(yǔ)言的學(xué)習(xí),為FPGA編程打下堅(jiān)實(shí)的基礎(chǔ)
    發(fā)表于 05-19 16:40 ?12次下載

    FPGA視頻教程之Verilog語(yǔ)法基礎(chǔ)的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA視頻教程之Verilog語(yǔ)法基礎(chǔ)的詳細(xì)資料說(shuō)明資料免費(fèi)下載
    發(fā)表于 03-01 11:35 ?17次下載
    <b class='flag-5'>FPGA</b>視頻教程之<b class='flag-5'>Verilog</b><b class='flag-5'>語(yǔ)法</b>基礎(chǔ)的詳細(xì)資料說(shuō)明

    FPGA之硬件語(yǔ)法篇:Verilog關(guān)鍵問(wèn)題解惑

    大家都知道軟件設(shè)計(jì)使用軟件編程語(yǔ)言,例如我們熟知的C、Java等等,而FPGA設(shè)計(jì)使用的是HDL語(yǔ)言,例如VHDL和Verilog HDL。
    的頭像 發(fā)表于 12-05 07:11 ?1751次閱讀
    <b class='flag-5'>FPGA</b>之硬件<b class='flag-5'>語(yǔ)法</b>篇:<b class='flag-5'>Verilog</b>關(guān)鍵問(wèn)題解惑

    FPGA視頻教程:Verilog語(yǔ)法基礎(chǔ)

    Verilog與C語(yǔ)言還是存在許多差別。另外,作為一種與普通計(jì)算機(jī)編程語(yǔ)言不同的硬件描述語(yǔ)言,它還具有一些獨(dú)特的
    的頭像 發(fā)表于 12-11 07:02 ?1751次閱讀
    <b class='flag-5'>FPGA</b>視頻教程:<b class='flag-5'>Verilog</b><b class='flag-5'>語(yǔ)法</b>基礎(chǔ)

    fpga用什么編程語(yǔ)言_fpga的作用

    經(jīng)??吹讲簧偃嗽谡搲锇l(fā)問(wèn),FPGA是不是用C語(yǔ)言開(kāi)發(fā)的?國(guó)外有些公司專(zhuān)注于開(kāi)發(fā)解決編譯器這方面問(wèn)題,目的讓其能夠達(dá)到用C語(yǔ)言替代VHDL語(yǔ)言的目的,也開(kāi)發(fā)出了一些支持用c
    發(fā)表于 07-29 16:37 ?2.4w次閱讀

    Verilog編程語(yǔ)言

    知乎上刷到一個(gè)問(wèn)題,問(wèn)性能最強(qiáng)的編程語(yǔ)言是什么?看到高贊回答到是Verilog,然后在評(píng)論區(qū)就引發(fā)了一場(chǎng)Verilog到底算不算編程
    的頭像 發(fā)表于 08-23 14:30 ?6214次閱讀

    FPGA編程語(yǔ)言之verilog語(yǔ)法2

    Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的語(yǔ)言。用Verilog HDL描述的電路設(shè)計(jì)就是該電路的Verilog HDL模型也稱(chēng)為模塊。Veri
    的頭像 發(fā)表于 05-22 15:53 ?842次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>編程</b><b class='flag-5'>語(yǔ)言之</b><b class='flag-5'>verilog</b><b class='flag-5'>語(yǔ)法</b>2

    從仿真器的角度理解Verilog語(yǔ)言1

    要想深入理解Verilog就必須正視Verilog語(yǔ)言同時(shí)具備硬件特性和軟件特性。在當(dāng)下的教學(xué)過(guò)程中,教師和教材都過(guò)于強(qiáng)調(diào)Verilog語(yǔ)言
    的頭像 發(fā)表于 05-25 15:10 ?925次閱讀
    從仿真器的角度理解<b class='flag-5'>Verilog</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>1</b>

    fpga芯片用什么編程語(yǔ)言

    FPGA芯片主要使用的編程語(yǔ)言包括Verilog HDL和VHDL。這兩種語(yǔ)言都是硬件描述語(yǔ)言
    的頭像 發(fā)表于 03-14 16:07 ?1522次閱讀

    fpga用的是什么編程語(yǔ)言 fpga用什么語(yǔ)言開(kāi)發(fā)

    fpga用的是什么編程語(yǔ)言 FPGA(現(xiàn)場(chǎng)可編程邏輯門(mén)陣列)主要使用的編程
    的頭像 發(fā)表于 03-14 17:09 ?3513次閱讀

    fpga用什么語(yǔ)言編程

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)的編程主要使用硬件描述語(yǔ)言(HDL),其中最常用的是Verilog HDL和VHDL。
    的頭像 發(fā)表于 03-14 18:17 ?2839次閱讀

    fpga是用c語(yǔ)言還是verilog

    FPGA(現(xiàn)場(chǎng)可編程邏輯門(mén)陣列)開(kāi)發(fā)主要使用的編程語(yǔ)言是硬件描述語(yǔ)言(HDL),其中Verilog
    的頭像 發(fā)表于 03-27 14:38 ?2009次閱讀

    FPGA編程語(yǔ)言的入門(mén)教程

    FPGA(現(xiàn)場(chǎng)可編程邏輯門(mén)陣列)的編程涉及特定的硬件描述語(yǔ)言(HDL),其中Verilog和VHDL是最常用的兩種。以下是一個(gè)
    的頭像 發(fā)表于 10-25 09:21 ?275次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語(yǔ)法和風(fēng)格 VerilogVerilog語(yǔ)法
    的頭像 發(fā)表于 12-17 09:44 ?151次閱讀