0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog HDL中常用预编译命令介绍

FPGA之家 来源:时沿科技 作者:NemoYxc 2022-03-15 11:24 次阅读

“ 此小节中介绍Verilog HDL中提供的常用预编译命令:`define ;`timescale ;`include ;`ifdef 、`elsif、`endif 。”

01、时间尺度`timescale

`timescale命令用于在文件中指明时间单位和时间精度,通常在对文件进行仿真时体现。EDA工具可以支持在一个设计中可根据仿真需要在不同模块里面指定不同的时间单位。如模块A仿真的时间单位为皮秒(ps),模块B仿真的时间单位为纳秒(ns)。使用`timescale命令语句格式如下:

`timescale 《时间单位》 / 《时间精度》

使用时注意《时间单位》和《时间精度》必须是整数,且时间精度不能大于时间单位值。

其中时间单位是定义仿真时间和延迟时间的基准单位;时间精度是定义模块仿真时间的精确程度的,又被称为取整精度(在仿真前,被用来对延迟的时间值进行取整操作,例程中会对此进行介绍)。如果在同一个设计中,出现多个`timescale命令,工具会采用最小的时间精度值来决定仿真的时间单位。

下面举例说明`timescale用法。

`timescale 1ns / 1ps:此命令已定义模块中的时间单位为1ns,即仿真模块中所有的延迟时间单位都是1ns的整数倍;定义了模块的时间精度为1ps,即仿真模块中延迟单位可以指定到小数点后3位,小数超过3位会进行取小数点后3位的操作。

02、宏定义`define

在设计中,为了提高程序可读性和简化程序描述,可以使用指定的标识符来代替一个长的字符串,或者使用一个简单的名字来代替没有含义的数字或者符号,此时需使用到宏定义命令`define。它的使用形式如下:

`define signal(宏名) string(宏内容)

在设计中进行了以上声明后,在与编译处理时,在此命令后程序中所有的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 ; // 经宏展开之后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文件中可以直接调用

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

仿真结果如下:

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

关于“文件包含的几点说明”:

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

  2. `include中的文件名可以是相对路径,也可以是绝对路径(ISE中调用Modelsim仿真的时候得用绝对路径,否则Modelsim会报错);

  3. 如果文件1包含文件2,而文件2要用到文件3的内容,那么在文件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

仿真结果如下所示:

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

04、 条件编译指令(`ifdef、`elsif、`endif)

条件预编译指令有如下几种形式:

1. `ifdef宏名

程序段1

`elsif

程序段2

`endif

当宏名被定义,则对程序段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

仿真结果如下:

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

如果将:

`defineMODE_ADD`defineMODE_ENABLE改成`defineMODE_ADD2`defineMODE_ENABLE2

仿真结果如下:


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

审核编辑:郭婷


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132163
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109307
  • eda
    eda
    +关注

    关注

    71

    文章

    2540

    浏览量

    170872

原文标题:Verilog基础知识学习笔记(五)

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    未能获得预编译的模拟库信息

    HDL模拟库”中的“编译库目录”属性中设置模拟库路径模拟行为模型“过程。 - 如果库尚未编译,请通过运行“编译HDL仿真库”过程或在
    发表于 03-17 10:17

    Verilog 预编译

    Verilog 预编译Verilog 语言支持宏定义(`define),参数 parameter,局域参数(localparam)以及`include等内容。这些数据常量的支持极大方便数字系统
    发表于 08-11 09:31

    Verilog-HDL实践与应用系统设计

    Verilog-HDL实践与应用系统设计本书从实用的角度介绍了硬件描述语言Verilog-HDL。通过动手实践,体验Verilog-HDL的语法结构、功能等内涵。在前五章,以简单的实例
    发表于 11-14 22:57 146次下载
    <b class='flag-5'>Verilog-HDL</b>实践与应用系统设计

    Verilog HDL华为入门教程

    Verilog HDL 华为入门教程 本文主要介绍Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握
    发表于 02-11 08:35 140次下载

    Verilog HDL程序设计教程_王金明

    Verilog HDL 程序设计教程》对Verilog HDL程序设计作了系统全面的介绍,以可综合的设计为重点,同时对仿真和模拟也作了深入
    发表于 09-22 15:53 0次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>程序设计教程_王金明

    Verilog HDL程序设计与实践

    Verilog HDL程序设计与实践着重介绍Verilog HDL语言
    发表于 10-29 14:45 21次下载

    Verilog HDL入门教程

    本文主要介绍Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL设计方法,初步了解并掌握Verilog
    发表于 07-15 15:27 0次下载

    Verilog HDL入门教程之Verilog HDL数字系统设计教程

    本文档的主要内容详细介绍的是Verilog HDL入门教程之Verilog HDL数字系统设计教程。
    发表于 09-20 15:51 81次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入门教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>数字系统设计教程

    如何设计常用模块的Verilog HDL

    本文档的主要内容详细介绍的是常用模块的Verilog HDL设计详细资料免费下载。
    发表于 10-16 11:12 20次下载
    如何设计<b class='flag-5'>常用</b>模块的<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>?

    Verilog教程之Verilog命令格式资料说明

    本文档的主要内容详细介绍的是Verilog HDL教程之Verilog HDL命令格式资料说明
    发表于 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 语言的一些基本知识,目的是使初学者能够迅速掌握HDL 设计方法,初步了解并掌握Verilog
    发表于 02-11 08:00 95次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入门教程

    Verilog HDL基础语法入门

    简单介绍Verilog HDL语言和仿真工具。
    发表于 05-06 16:17 617次下载

    Verilog HDL 编译器指令说明

    Verilog HDL 编译器指令 复杂一点的系统在进行设计或者验证时,都会用到一些编译器指令,那么什么是编译器指令?  
    的头像 发表于 11-03 09:31 3051次阅读
    <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的基本语法
    发表于 01-07 09:23 161次下载

    什么是预编译

    预编译就是处理以#开头的指令,比如赋值#include包含的文件、#define宏定义的替换、条件编译等。预编译就是为编译前做准备工作的阶段,主要处理以#开头的
    发表于 01-13 13:52 0次下载
    什么是<b class='flag-5'>预编译</b>