衡阳派盒市场营销有限公司

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

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

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

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

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

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

01、時間尺度`timescale

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

`timescale 《時間單位》 / 《時間精度》

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

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

下面舉例說明`timescale用法。

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

02、宏定義`define

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

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

在設(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有一個宏定義 `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)于“文件包含的幾點說明”:

  1. 一個`include只能指定一個包含文件;

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

  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進行編譯,程序段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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4124

    瀏覽量

    134005
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    71

    文章

    2788

    瀏覽量

    173879

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    未能獲得預(yù)編譯的模擬庫信息

    HDL模擬庫”中的“編譯庫目錄”屬性中設(shè)置模擬庫路徑模擬行為模型“過程。 - 如果庫尚未編譯,請通過運行“編譯HDL仿真庫”過程或在
    發(fā)表于 03-17 10:17

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

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

    Verilog HDL華為入門教程

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

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

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

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

    Verilog HDL程序設(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 ?17次下載

    Verilog HDL入門教程

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

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

    本文檔的主要內(nèi)容詳細介紹的是Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計教程。
    發(fā)表于 09-20 15:51 ?83次下載
    <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è)計教程

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

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

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

    本文檔的主要內(nèi)容詳細介紹的是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è)計方法,初步了解并掌握Verilog
    發(fā)表于 02-11 08:00 ?99次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程

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

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

    Verilog HDL 編譯器指令說明

    Verilog HDL 編譯器指令 復(fù)雜一點的系統(tǒng)在進行設(shè)計或者驗證時,都會用到一些編譯器指令,那么什么是編譯器指令? ?
    的頭像 發(fā)表于 11-03 09:31 ?3869次閱讀
    <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 ?179次下載

    什么是預(yù)編譯

    預(yù)編譯就是處理以#開頭的指令,比如賦值#include包含的文件、#define宏定義的替換、條件編譯等。預(yù)編譯就是為編譯前做準(zhǔn)備工作的階段,主要處理以#開頭的
    發(fā)表于 01-13 13:52 ?0次下載
    什么是<b class='flag-5'>預(yù)編譯</b>
    百家乐博彩技巧视频| 百家乐游戏规则介绍| 百家乐论坛香港马会| 大发888娱乐城casino| 大发体育| 最好的百家乐官网博彩网站| 百家乐分析下载| 百家乐几点不用补牌| 全讯网| 网上的百家乐官网怎么才能赚钱| 百家乐庄闲和各| bet365备用网址器| 网络百家乐官网内幕| 百家乐一黑到底| 真博娱乐| 捷豹百家乐官网的玩法技巧和规则 | 百家乐投注技巧公式| 德州扑克比赛规则| 现场百家乐官网玩法| 百家乐买对子技巧| 鄱阳县| 百家乐最新首存优惠| 娱乐城官方网站| 大发888wf娱乐场下载| 百家乐官网赌场现金网| 单机百家乐小游戏| 大发百家乐官网现金网| 百家乐投注方法多不多| 新利国际娱乐网| 太阳百家乐官网开户| 大发888充钱| 香港百家乐官网玩法| 火箭百家乐的玩法技巧和规则 | 公海百家乐官网的玩法技巧和规则 | 百家乐官网平客户端| 大发888娱乐场下载最高| 网上百家乐官网赌博出| 百家乐园qq群| 百家乐官网直杀| 全讯网报码| 德州扑克明星|