编译预处理命令--define和ifdef的使用
这里将对常用的预处理命令进行学习。
一、宏定义 ·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的使用的更多相关文章
- 编译预处理命令define
#include 包含指令 将一个源文件嵌入到当前源文件中该点处. #include<文件名> 按标准方式搜索,文件位于C++系统目录的include子目录下 #include" ...
- 预处理命令[#define]说明
宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只 ...
- C/C++编译预处理命令详解【转】
1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #lin ...
- 预处理命令#define #undef #if #endif 的基本用法
C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...
- C++——多文件结构和编译预处理命令
[toc] 一.多文件结构 1.一个工程可以划分为多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2.利用工程来组合各个文件 //Poi ...
- c语言编译预处理和条件编译执行过程的理解
在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...
- C预编译, 预处理, C/C++头文件, 编译控制,
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...
- 预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif
预处理命令 在接触#if.#undef这类预处理指令前,大部分都都接触过#define.#include等预处理命令,通俗来讲预处理命令的作用就是在编译和链接之前,对源文件进行一些文本方面的操作,比如 ...
- C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
转自:http://www.kuqin.com/language/20090806/66164.html 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器 ...
随机推荐
- jquery ajax提交表单数据的两种方式
http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...
- Hibernate动态更新
Hibernate一级缓存: Hibernate有一级和二级缓存.一级缓存就是Session. 在Hibernate启动的时候,SessionFactory解析映射文件的时候,会根据映射文件中的字段生 ...
- 统一软件开发过程(rup)理解
不好意思,没有内容,请看百科吧http://baike.baidu.com/link?url=-zXA6oXiHRts5Z1THGzie7seH-YRigfiR7KRppP6TYcnnb7_Bxc_f ...
- 各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!!
各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!! 实用tcpdump命令 //查看本机与mysql的 ...
- 如何使用vim的帮助功能
set guioptions+-=m/T 更换vim的默认color schema: 将下载的color.vim文件如sonofob'sidian.vim放到/usr/share/vim/vimfil ...
- 导出Excel之Epplus使用教程2(样式设置)
导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他 ...
- Object学习笔记
<script type="text/javascript"> function forEach(o){ var html =""; for(var ...
- 《深入PHP与jQuery开发》读书笔记——Chapter1
由于去实习过后,发现真正的后台也要懂前端啊,感觉javascript不懂,但是之前用过jQuery感觉不错,很方便,省去了一些内部函数的实现. 看了这一本<深入PHP与jQuery开发>, ...
- 在生产环境使用Docker部署应用
导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...
- linux下vim命令详解 转自: zhanglong0426
高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx 开始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的 ...