精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA編程語言之verilog語法1

jf_78858299 ? 來源:Hack電子 ? 作者:Hack電子 ? 2023-05-22 15:52 ? 次閱讀

Verilog語法的基本概念

一、Verilog HDL

Verilog HDL是一種用于數字系統設計的語言。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型也稱為模塊。Verilog HDL既是一種行為描述的語言也是一種結構描述的語言。這也就是說,無論描述電路功能行為的模塊或描述元器件或較大部件互連的模塊都可以用Verilog語言來建立電路模型。如果按照一定的規矩編寫,功能行為模塊可以通過工具自動地轉換為門級互連模塊。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別和它們對應的模型類型共有以下五種:

1.1 系統級(system): 用語言提供的高級結構實現設計模塊外部性能的模型。

1.2 算法級(algorithm): 用語言提供的高級結構實現算法運行的模型。

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

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

1.5 開關級(switch-level):描述器件中三極管和儲存節點以及它們之間連接的模型。

二、Verilog HDL模塊

一個復雜電路系統的完整Verilog HDL模型是由若干個Verilog HDL模塊構成的,每一個模塊又可以由若干個子模塊構成。其中有些模塊需要綜合成具體電路,而有些模塊只是與用戶所設計的模塊有交互聯系的現存電路或激勵信號源。利用Verilog HDL語言結構所提供的這種功能就可以構造一個模塊間的清晰層次結構來描述極其復雜的大型設計,并對所作設計的邏輯電路進行嚴格的驗證。

Verilog HDL行為描述語言作為一種結構化和過程性的語言,其語法結構非常適合于算法級和RTL級的模型設計。這種行為描述語言具有以下功能:

(1) 可描述順序執行或并行執行的程序結構。

(2) 用延遲表達式或事件表達式來明確地控制過程的啟動時間。

(3) 通過命名的事件來觸發其它過程里的激活行為或停止行為。

(4) 提供了條件、if-else、case、循環程序結構。

(5) 提供了可帶參數且非零延續時間的任務(task)程序結構。

(6) 提供了可定義新的操作符的函數結構(function)。

(7) 提供了用于建立表達式的算術運算符、邏輯運算符、位運算符。

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

2.1 簡單的Verilog HDL模塊

2.1.1 Verilog 語法簡介

下面先介紹一個個簡單的Verilog HDL程序,從中了解Verilog模塊的特性。

module test_project_top( //模塊名

input clk, // 時鐘輸入

input resetn, // 復位

input[7:0] a, //信號輸入,信號a 位寬為8 bit

input[7:0] b, //信號輸入,信號b 位寬為8 bit

input en, // 信號是能輸入 信號en 位寬為1 bit

output reg [8:0] c, // 寄存器類型定義,信號輸出 c為9bit

output reg [15:0] d // 寄存器類型定義,信號輸出 d 為16bit

);

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

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

每個module塊內包括:模塊名,輸入端口,輸出端口,以及多個時序電路,組合電路等組成

*/

// 簡單的時序電路組成

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

// 簡單的組合電路

always@(a or b) // 只要其中a或b一個變化就執行always塊內語句

begin

if(en) // verilog 語法 if ... else ...,在組合電路中一個if對應一個else,不能缺else,防止產生鎖存器

c<=a*b+a/b;

else

c<=0;

end

wire[8:0] sum; // 常見變量定義類型:wire-線網型,reg-寄存器

assign sum =a+b; // 組合電路賦值,關鍵字 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;

// 實例化模塊

my_add u_add_top( // my_add 模塊名 ,u_add_top 實例化名

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

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

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

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

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

);

endmodule

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

2.1.2 Verilog用于模塊的測試

Verilog 還可以用來描述變化的測試信號。描述測試信號的變化和測試過程的模塊也叫做測試平臺(Testbench 或Testfixture),它可以對上面介紹的電路模塊(無論是行為的或結構的)進行動態的全面測試。通過觀測被測試模塊的輸出信號是否符合要求,可以調試和驗證邏輯系統的設計和結構正確與否,發現問題及時修改。

下面我們來看一個Verilog的測試模塊,

// 測試激勵產生

`timescale 1ns / 1ps

module test_project_top_tb; // 測試文件模塊名

// 信號測試激勵,輸入變量聲明

reg clk ;

reg reset;

reg [7:0] a;

reg [7:0] b;

reg en;

// 輸出變量聲明

wire[8:0] c;

wire [15:0] d;

// 信號變量初始化 ,關鍵字 initial

initial

begin

clk =0;

reset =0;

a =0;

b =0;

en =0;

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

reset =1;

end

// 時鐘生成

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

always @(posedge clk)

begin // {$random} 為系統任務,它會產生一個隨機數

#1 a= {$random}%256; // 產生隨機的位信號流a和b ,%256為做模256運算

#3 b = {$random}%256; // 分別延遲1和3個時間單位后產生隨機的位信號流a 和b

end

always #10000 en = !en; //產生周期為10000個單位時間的選通信號變化

// 實例化 被測試模塊

test_project_top u_top(

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

.resetn(reset), // 復位

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

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

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

.c(c), // 寄存器類型定義,信號輸出 c為9bit

.d(d) // 寄存器類型定義,信號輸出 d 為16bit

);

endmodule

本測試例程是對2.1.1中的小程序的測試,屬于RTL級功能仿真,主要調試語法及時序信號是否跟設計時一致。對于初學者來說,這是最基本的技能,必須熟練掌握。

圖片

圖1 仿真時序圖

2.1.3 總結:

通過上面這些的例子可以看到以下幾點:

(1) Verilog HDL程序是由模塊構成的。每個模塊的內容都是位于module和endmodule兩個語句之間,每個模塊實現特定的功能。

(2) 模塊是可以進行層次嵌套的。正因為如此,才可以將大型的數字電路設計分割成不同的小模塊來實現特定的功能。

(3) 每個模塊都是可以綜合的,通過綜合工具可以把它們的功能描述全都轉換為最基本的邏輯單元描述,最后可以用一個上層模塊通過實例引用把這些模塊連接起來,把它們整合成一個很大的邏輯系統。

(4) Verilog 模塊可以分為兩種類型:一種是為了讓模塊最終能生成電路結構,另一種只是為了測試所設計的電路其邏輯功能是否正確。

(5) 每個模塊要進行端口定義,并說明輸入輸出口,然后對模塊的功能進行 描述。

(6) Verilog HDL程序的書寫格式自由,一行可以寫幾個語句,一個語句也可以分寫多行。

(7) 除了endmodule語句外,每個語句和數據定義的最后必須有分號。

(8) 可以用/ ..... /和//.......對Verilog HDL程序的任何部分作注釋。一個好的,有使用價值的源程序都應當加上必要的注釋,以增強程序的可讀性和可維護性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 元器件
    +關注

    關注

    112

    文章

    4692

    瀏覽量

    92012
  • Verilog
    +關注

    關注

    28

    文章

    1343

    瀏覽量

    109986
  • HDL
    HDL
    +關注

    關注

    8

    文章

    327

    瀏覽量

    47339
  • 數字系統
    +關注

    關注

    0

    文章

    142

    瀏覽量

    20829
收藏 人收藏

    評論

    相關推薦

    Verilog HDL語言編程基礎與FPGA常用開發工具

    關鍵字:Altera 、FPGA、軟硬件協調設計(Verilog & C)、CPU、總線、外設FPGA硬件結構知識Verilog HDL語言
    發表于 12-22 08:06

    _Verilog_HDL的基本語法

    Verilog_HDL語言的學習,為FPGA編程打下堅實的基礎
    發表于 05-19 16:40 ?12次下載

    FPGA視頻教程之Verilog語法基礎的詳細資料說明

    本文檔的主要內容詳細介紹的是FPGA視頻教程之Verilog語法基礎的詳細資料說明資料免費下載
    發表于 03-01 11:35 ?16次下載
    <b class='flag-5'>FPGA</b>視頻教程之<b class='flag-5'>Verilog</b><b class='flag-5'>語法</b>基礎的詳細資料說明

    FPGA之硬件語法篇:Verilog關鍵問題解惑

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

    FPGA視頻教程:Verilog語法基礎

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

    fpga用什么編程語言_fpga的作用

    經常看到不少人在論壇里發問,FPGA是不是用C語言開發的?國外有些公司專注于開發解決編譯器這方面問題,目的讓其能夠達到用C語言替代VHDL語言的目的,也開發出了一些支持用c
    發表于 07-29 16:37 ?2.4w次閱讀

    Verilog編程語言

    知乎上刷到一個問題,問性能最強的編程語言是什么?看到高贊回答到是Verilog,然后在評論區就引發了一場Verilog到底算不算編程
    的頭像 發表于 08-23 14:30 ?6160次閱讀

    FPGA編程語言——verilog語法詳解

    一個復雜電路系統的完整Verilog HDL模型是由若干個Verilog HDL模塊構成的,每一個模塊又可以由若干個子模塊構成。其中有些模塊需要綜合成具體電路,而有些模塊只是與用戶所設計的模塊有交互聯系的現存電路或激勵信號源。
    的頭像 發表于 02-02 10:03 ?1w次閱讀

    FPGA編程語言之verilog語法2

    Verilog HDL是一種用于數字系統設計的語言。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型也稱為模塊。Veri
    的頭像 發表于 05-22 15:53 ?807次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>編程</b><b class='flag-5'>語言之</b><b class='flag-5'>verilog</b><b class='flag-5'>語法</b>2

    從仿真器的角度理解Verilog語言1

    要想深入理解Verilog就必須正視Verilog語言同時具備硬件特性和軟件特性。在當下的教學過程中,教師和教材都過于強調Verilog語言
    的頭像 發表于 05-25 15:10 ?896次閱讀
    從仿真器的角度理解<b class='flag-5'>Verilog</b><b class='flag-5'>語言</b><b class='flag-5'>1</b>

    fpga芯片用什么編程語言

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

    fpga用的是什么編程語言 fpga用什么語言開發

    fpga用的是什么編程語言 FPGA(現場可編程邏輯門陣列)主要使用的編程
    的頭像 發表于 03-14 17:09 ?3321次閱讀

    fpga用什么語言編程

    FPGA(現場可編程門陣列)的編程主要使用硬件描述語言(HDL),其中最常用的是Verilog HDL和VHDL。
    的頭像 發表于 03-14 18:17 ?2709次閱讀

    fpga是用c語言還是verilog

    FPGA(現場可編程邏輯門陣列)開發主要使用的編程語言是硬件描述語言(HDL),其中Verilog
    的頭像 發表于 03-27 14:38 ?1795次閱讀

    FPGA編程語言的入門教程

    FPGA(現場可編程邏輯門陣列)的編程涉及特定的硬件描述語言(HDL),其中Verilog和VHDL是最常用的兩種。以下是一個
    的頭像 發表于 10-25 09:21 ?152次閱讀