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

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

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

Verilog HDL中常用預(yù)編譯命令介紹

FPGA之家 ? 來源:時(shí)沿科技 ? 作者:NemoYxc ? 2022-03-15 11:24 ? 次閱讀

“ 此小節(jié)中介紹Verilog HDL中提供的常用預(yù)編譯命令:`define ;`timescale ;`include ;`ifdef 、`elsif、`endif ?!?/p>

01、時(shí)間尺度`timescale

`timescale命令用于在文件中指明時(shí)間單位和時(shí)間精度,通常在對文件進(jìn)行仿真時(shí)體現(xiàn)。EDA工具可以支持在一個(gè)設(shè)計(jì)中可根據(jù)仿真需要在不同模塊里面指定不同的時(shí)間單位。如模塊A仿真的時(shí)間單位為皮秒(ps),模塊B仿真的時(shí)間單位為納秒(ns)。使用`timescale命令語句格式如下:

`timescale 《時(shí)間單位》 / 《時(shí)間精度》

使用時(shí)注意《時(shí)間單位》和《時(shí)間精度》必須是整數(shù),且時(shí)間精度不能大于時(shí)間單位值。

其中時(shí)間單位是定義仿真時(shí)間和延遲時(shí)間的基準(zhǔn)單位;時(shí)間精度是定義模塊仿真時(shí)間的精確程度的,又被稱為取整精度(在仿真前,被用來對延遲的時(shí)間值進(jìn)行取整操作,例程中會對此進(jìn)行介紹)。如果在同一個(gè)設(shè)計(jì)中,出現(xiàn)多個(gè)`timescale命令,工具會采用最小的時(shí)間精度值來決定仿真的時(shí)間單位。

下面舉例說明`timescale用法。

`timescale 1ns / 1ps:此命令已定義模塊中的時(shí)間單位為1ns,即仿真模塊中所有的延遲時(shí)間單位都是1ns的整數(shù)倍;定義了模塊的時(shí)間精度為1ps,即仿真模塊中延遲單位可以指定到小數(shù)點(diǎn)后3位,小數(shù)超過3位會進(jìn)行取小數(shù)點(diǎn)后3位的操作。

02、宏定義`define

在設(shè)計(jì)中,為了提高程序可讀性和簡化程序描述,可以使用指定的標(biāo)識符來代替一個(gè)長的字符串,或者使用一個(gè)簡單的名字來代替沒有含義的數(shù)字或者符號,此時(shí)需使用到宏定義命令`define。它的使用形式如下:

`define signal(宏名) string(宏內(nèi)容)

在設(shè)計(jì)中進(jìn)行了以上聲明后,在與編譯處理時(shí),在此命令后程序中所有的signal都替換成string,此過程稱為“宏展開”。具體使用方法如下:

例1 :`define LENGTH 16

reg[ `LENGTH–1 : 0 ] writedata;//即定義reg[15:0]writedata;

例2 :`define expression a+b+c

assign data = `expression + d ; // 經(jīng)宏展開之后assign //add_data = a+b+c+d;

例3 :`define A a+b

`define B c+`A

assign data = `B ; // 即data = c + a + b;

03、文件包含指令`includ

C語言中聲明頭文件很類似。其一般形式為:`include “文件名”

例:

文件para.v有一個(gè)宏定義 `defineA 2+3

test.v文件中可以直接調(diào)用

`timescale1ns/1ps`include"para.v"`include"para2.v"module test(    input    wire          clk,  outputreg[7:0]result);  always@(posedge  clk)    beginresult<=?`A+10;endendmodule

仿真結(jié)果如下:

e20d57bc-9645-11ec-952b-dac502259ad0.png

關(guān)于“文件包含的幾點(diǎn)說明”:

  1. 一個(gè)`include只能指定一個(gè)包含文件;

  2. `include中的文件名可以是相對路徑,也可以是絕對路徑(ISE中調(diào)用Modelsim仿真的時(shí)候得用絕對路徑,否則Modelsim會報(bào)錯(cuò));

  3. 如果文件1包含文件2,而文件2要用到文件3的內(nèi)容,那么在文件1中用`include命令分別包含文件2和文件3文件3在文件2的前面

例:

para.v: `define A 2+3

para2.v : `define B `A+2

test.v中:

`timescale 1ns / 1ps`include"para.v"`include  " para2.v"module test(     input    wire          clk,       output    reg    [7:0]    result   );  always@(posedge  clk)    beginresult<=?`B+10;    endendmodule

仿真結(jié)果如下所示:

e2279230-9645-11ec-952b-dac502259ad0.png

04、 條件編譯指令(`ifdef、`elsif、`endif)

條件預(yù)編譯指令有如下幾種形式:

1. `ifdef宏名

程序段1

`elsif

程序段2

`endif

當(dāng)宏名被定義,則對程序段1進(jìn)行編譯,程序段2被忽略;否則編譯程序段2,程序段1倍忽略。

`ifdef宏名

程序段1

`endif

其中程序段可以是語句組也可以是命令行

例:

`timescale1ns/1ps`defineMODE_ADD`defineMODE_ENABLEmodule test_add(    input                            clk,input    rst_n,    output  reg     [ 15 : 00 ]      data_cal,    output  reg     [ 15 : 00 ]      data_cal2  );wire[15:0]data;  `ifdef  MODE_ADD    always@(posedge  clk  or  negedge  rst_n) begin      if(!rst_n)        data_cal    <=    1'b0;      else         data_cal    <=    data_cal  + 16'd100;   end  `elsif   MODE_ADD2    always@(posedge  clk  or  negedge  rst_n) begin      if(!rst_n)        data_cal    <=    1'b0;      else        data_cal    <=    data_cal  + 16'd200;       end  `endif
  `ifdef  MODE_ENABLE      `define    M    10  `elsif   MODE_ENABLE2      `define    M    20`endif  always@(posedge  clk  or  negedge  rst_n) begin    if(!rst_n)      data_cal2  <=    1'b0;    else      data_cal2  <=    `M;endassigndata=`M;endmodule

仿真結(jié)果如下:

e25366e4-9645-11ec-952b-dac502259ad0.png

如果將:

`defineMODE_ADD`defineMODE_ENABLE改成`defineMODE_ADD2`defineMODE_ENABLE2

仿真結(jié)果如下:


e27a6294-9645-11ec-952b-dac502259ad0.png

審核編輯:郭婷


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

    關(guān)注

    50

    文章

    3972

    瀏覽量

    132965
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109719
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2654

    瀏覽量

    172176

原文標(biāo)題:Verilog基礎(chǔ)知識學(xué)習(xí)筆記(五)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Verilog-HDL實(shí)踐與應(yīng)用系統(tǒng)設(shè)計(jì)

    Verilog-HDL實(shí)踐與應(yīng)用系統(tǒng)設(shè)計(jì)本書從實(shí)用的角度介紹了硬件描述語言Verilog-HDL。通過動手實(shí)踐,體驗(yàn)Verilog-HDL的語法結(jié)構(gòu)、功能等內(nèi)涵。在前五章,以簡單的實(shí)例
    發(fā)表于 11-14 22:57 ?147次下載
    <b class='flag-5'>Verilog-HDL</b>實(shí)踐與應(yīng)用系統(tǒng)設(shè)計(jì)

    Verilog HDL華為入門教程

    Verilog HDL 華為入門教程 本文主要介紹Verilog HDL 語言的一些基本知識,目的是使初學(xué)者能夠迅速掌握
    發(fā)表于 02-11 08:35 ?140次下載

    Verilog HDL入門教程(華為絕密資料)

    Verilog HDL入門教程(華為絕密資料) 本文主要介紹Verilog HDL 語言的一些基本知識,目的是使初學(xué)者能夠迅速掌握
    發(fā)表于 04-02 11:52 ?0次下載

    Verilog HDL程序設(shè)計(jì)教程_王金明

    Verilog HDL 程序設(shè)計(jì)教程》對Verilog HDL程序設(shè)計(jì)作了系統(tǒng)全面的介紹,以可綜合的設(shè)計(jì)為重點(diǎn),同時(shí)對仿真和模擬也作了深入
    發(fā)表于 09-22 15:53 ?0次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>程序設(shè)計(jì)教程_王金明

    Verilog HDL程序設(shè)計(jì)與實(shí)踐

    Verilog HDL程序設(shè)計(jì)與實(shí)踐著重介紹Verilog HDL語言
    發(fā)表于 10-29 14:45 ?21次下載

    Verilog HDL硬件描述語言_Verilog語言要素

    本章介紹Verilog HDL的基本要素,包括標(biāo)識符、注釋、數(shù)值、編譯程序指令、系統(tǒng)任務(wù)和系統(tǒng)函數(shù)。另外,本章還介紹
    發(fā)表于 04-25 16:09 ?16次下載

    Verilog HDL入門教程

    本文主要介紹Verilog HDL 語言的一些基本知識,目的是使初學(xué)者能夠迅速掌握HDL設(shè)計(jì)方法,初步了解并掌握Verilog
    發(fā)表于 07-15 15:27 ?0次下載

    Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程。
    發(fā)表于 09-20 15:51 ?82次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>數(shù)字系統(tǒng)設(shè)計(jì)教程

    如何設(shè)計(jì)常用模塊的Verilog HDL

    本文檔的主要內(nèi)容詳細(xì)介紹的是常用模塊的Verilog HDL設(shè)計(jì)詳細(xì)資料免費(fèi)下載。
    發(fā)表于 10-16 11:12 ?20次下載
    如何設(shè)計(jì)<b class='flag-5'>常用</b>模塊的<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>?

    Verilog教程之Verilog命令格式資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog HDL教程之Verilog HDL命令格式資料說明
    發(fā)表于 01-09 08:00 ?31次下載
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b>的<b class='flag-5'>命令</b>格式資料說明

    Verilog HDL入門教程

    本文主要介紹Verilog HDL 語言的一些基本知識,目的是使初學(xué)者能夠迅速掌握HDL 設(shè)計(jì)方法,初步了解并掌握Verilog
    發(fā)表于 02-11 08:00 ?96次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程

    Verilog HDL基礎(chǔ)語法入門

    簡單介紹Verilog HDL語言和仿真工具。
    發(fā)表于 05-06 16:17 ?617次下載

    Verilog HDL 編譯器指令說明

    Verilog HDL 編譯器指令 復(fù)雜一點(diǎn)的系統(tǒng)在進(jìn)行設(shè)計(jì)或者驗(yàn)證時(shí),都會用到一些編譯器指令,那么什么是編譯器指令? ?
    的頭像 發(fā)表于 11-03 09:31 ?3421次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b> <b class='flag-5'>編譯</b>器指令說明

    Verilog HDL入門教程-Verilog HDL的基本語法

    Verilog HDL入門教程-Verilog HDL的基本語法
    發(fā)表于 01-07 09:23 ?171次下載

    什么是預(yù)編譯

    預(yù)編譯就是處理以#開頭的指令,比如賦值#include包含的文件、#define宏定義的替換、條件編譯等。預(yù)編譯就是為編譯前做準(zhǔn)備工作的階段,主要處理以#開頭的
    發(fā)表于 01-13 13:52 ?0次下載
    什么是<b class='flag-5'>預(yù)編譯</b>