这里将对常用的预处理命令进行学习。

一、宏定义  ·defined

格式:`defined     宏名      数值

或者 `define      宏名

注意:后面没有‘;‘,和单片机不一样;

二、文件包含处理 ·include

include 的格式在不同的编译器里是不一样的:

在quartus 中为:·include "defien.v"

在Primace中为:  `include "../src/define.v"

另外,一个include只可以指定一个被包含的文件;被包含文件名可以是相对的路径也可以是绝对的路径,如:·include"scr/define.v";

多个include可以出现在同一行,可以出现空格和注释行;

重要:如果文件1包含文件2,文件2要用文件3的部分内用,(方法一)则在文件1中可以用两个include命令分别包含文件2,和文件3,并且文件3出现在文件2之前。这样还有利用文件的包含可以嵌套的特性(方法二)。

图形表示为:

方法一:

方法二:

三、时间尺度 ·timescal

命令格式为: ·timescal    时间单位/时间精度

四、条件编译命令 ·ifdef、`elsif、`else  `endif

条件编译命令指只有满足条件的时候才能编译,也就是选择性对指定的一部分的内容进行编译。

分为两种形式:

(1)’ifdef   宏名 (标识符)

程序1

·endif

(2) `ifdef  宏名  (标识符)

程序段1

·elsif   宏名  (标识符)   (注意:没有e,不是elseif)

程序段2

.............

`else

程序段3

`endif

条件编译命令配合·define 使用,用·define 来定义宏名。注意:·define定义的宏名要在条件声明之前,否则默认为没有声明。

例程:通过·ifdef来改变 cnt_top的值来改变led闪烁的频率。

程序:

    /********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :ifdef_test.v
** CreateDate :2015.05
** Funtions : 测试`ifdef 的用法
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ `include "../src/define.v" module ifdef_test(
clk,
rst_n, led
);
input clk;
input rst_n; output led;
reg led ;
//---------------------------------------------// // `define div_6 reg [:] cnt;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
cnt <= ;
end
else if(cnt >= `cnt_top)
begin
cnt <= ;
end
else cnt <= cnt + ;
end always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
led <= ;
end
else if(cnt == `cnt_top)
begin
led = ~led ;
end
end wire [:] a;
assign a = `cnt_top; //寄存`cnt_top的值更直接
endmodule

用define.v来设置·ifdef

    /********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :define.v
** CreateDate :2015.
** Funtions : ifdef 的声明文件
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ `define div_3 //要放在ifdef 的前面,佛则变异的时候判断为没有声明 `ifdef div_6
`define cnt_top
`elsif div_3 //elsif 没有'e '
`define cnt_top
`else
`define cnt_top
`endif

仿真程序:

  module  testbench;

    reg        clk;
reg rst_n; wire led; ifdef_test ifdef_test(
.clk,
.rst_n, .led
); parameter tck = ;
parameter t = /tck; always
#(t/) clk = ~clk; initial
begin
clk = ;
rst_n = ; #(*t) rst_n = ; end

仿真图:

复合预期效果。

编译预处理命令--define和ifdef的使用的更多相关文章

  1. 编译预处理命令define

    #include 包含指令 将一个源文件嵌入到当前源文件中该点处. #include<文件名>  按标准方式搜索,文件位于C++系统目录的include子目录下 #include" ...

  2. 预处理命令[#define]说明

    宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只 ...

  3. C/C++编译预处理命令详解【转】

    1.       预处理程序  按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #lin ...

  4. 预处理命令#define #undef #if #endif 的基本用法

    C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...

  5. C++——多文件结构和编译预处理命令

    [toc] 一.多文件结构 1.一个工程可以划分为多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2.利用工程来组合各个文件 //Poi ...

  6. c语言编译预处理和条件编译执行过程的理解

    在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...

  7. C预编译, 预处理, C/C++头文件, 编译控制,

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  8. 预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif

    预处理命令 在接触#if.#undef这类预处理指令前,大部分都都接触过#define.#include等预处理命令,通俗来讲预处理命令的作用就是在编译和链接之前,对源文件进行一些文本方面的操作,比如 ...

  9. C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)

    转自:http://www.kuqin.com/language/20090806/66164.html 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器 ...

随机推荐

  1. Request.InputStream 接收Post Data

    今天 用 Request.Form /Request.Params 等怎么也获取不到客户发过来的Post 数据 后来试着用了 Request.InputStream 竟然可以 using (Syste ...

  2. ubuntu14.04配置中文latex完美环境(texlive+texmaker+lyx)

    Ubuntu下的文档编辑虽然有libreoffice,但对中文和公式的排版始终不如ms office,因此要想写出高质量的文档,只能靠latex了,现在随着xeCjk的开发,中文文档在ubuntu下的 ...

  3. CSS 兼容 总结

    1> margin加倍的问题 设置为float的div在ie下设置的margin会加倍.这是一个ie6都存在的bug. 解决方案是在这个div里面加上display:inline; 例如: &l ...

  4. WPF 检测管理员权限

    // 检查是否是管理员身份 private static void CheckAdministrator() { WindowsIdentity wi = null; try { wi = Windo ...

  5. 复合主键@IdClass

    有时一个实体的主键可能同时为多个,例如同样是之前使用的“CustomerEO”实体,需要通过name和email来查找指定实体,当且仅当name和email的值完全相同时,才认为是相同的实体对象.要配 ...

  6. iOS ASIHTTPRequest用https协议加密请求

    iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...

  7. log4j:ERROR setFile(null,true) call failed.java.io.FileNotFoundException: ..\logs\2010-1-19.log (系统找不到指定的路径。)

    log4j:ERROR setFile(null,true) call failed.java.io.FileNotFoundException: ..\logs\2010-1-19.log (系统找 ...

  8. POJ 1836 Alignment

    Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11450 Accepted: 3647 Descriptio ...

  9. 《CMake实践》第三部分的示例代码的错误

    <CMake实践>的第三章,初试cmake - cmake的helloworld 中的 PROJECT (HELLO) SET(SRC_LIST main.c) MESSAGE(statu ...

  10. JVM<一>----------运行时数据区域

    参考:1.JVM Specification: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5 2.< ...