Verilog语法-005—宏定义
Verilog语法-005—宏定义
1、Verilog宏定义-`ifdef `ifndef
`ifdef FOR_FPGA //如果定义了FOR_FPGA宏,则会执行如下
语句/或者没有语句
`else //如果没有定义FOR_FPGA宏,执行如下语句
语句/或者没有语句
`endif //结束`ifndef FOR_FPGA //如果没有定义了FOR_FPGA宏,则会执行如下
语句/或者没有语句
`else //如果定义了FOR_FPGA宏,执行如下语句
语句/或者没有语句
`endif //结束
`ifdef和`ifndef含义相反,并且`else都可以根据语句情况决定是否省略,`ifdef、`ifndef、和`else后面可以选择不加语句。注意:`endif不能省略,`endif限制了宏定义影响的范围。
最常见的三个宏定义是ASIC设计、仿真宏定义、FPAG宏定义。宏定义名称可以自己取,只要能够明确表达含义就行,例如 ASIC_DESIG、FOR_SIM,FOR_FPGA。
ASIC_DESIG:ASIC设计,就是投片需要的代码设计
FOR_SIM :为了便于VCS仿真
FOR_FPGA:便于FPGA实现,代码裁剪。
案例:`ifdef和`ifndef可以产生同样的效果
FPGA情况需要将代码进行裁剪,在FPGA情况下 client_num=4,在ASIC情况下,client_num=8。下面两种写法效果相同。
写法1:
reg [(8*client_num)-1:0] cfg_byte_num ;
always@(posedge clk or negedge rst_n)
...........................
10’h002: cfg_byte_num[31:0] <= mem_wr_dat ;
`ifndef FOR_FPGA
10’h003: cfg_byte_num[63:32] <= mem_wr_dat ;
`endif
................................
写法2:
reg [(8*client_num)-1:0] cfg_byte_num ;
always@(posedge clk or negedge rst_n)
...........................`ifdef FOR_FPGA
10’h002: cfg_byte_num[31:0] <= mem_wr_dat ;
`else
10’h002: cfg_byte_num[31:0] <= mem_wr_dat ;
10’h003: cfg_byte_num[63:32] <= mem_wr_dat ;
`endif
................................
Verilog语法-005—宏定义相关推荐
- 【C语言进阶深度学习记录】十七 宏定义的使用与分析
文章目录 1 C语言中的宏定义 1.1 定义宏常量 1.2 宏定义表达式 1.3 宏表达式与函数的对比 1.4 宏表达式的作用域 2 C语言中的内置宏 3 宏定义的代码综合示例 4 总结 1 C语言中 ...
- verilog 定义位宽为1的_Verilog中宏定义位宽带来的问题
Verilog 中宏定义位宽带来的问题 宏定义在 C 语言程序中的使用司空见惯,他的好处就在于可以大大提高代码的可读性和可 移植性.而在 verilog 中,也支持这个语法,在很多开源代码中也都能看到 ...
- max 宏定义取消:error C2589: error C2059: 语法错误 : “::”
原文链接:http://blog.csdn.net/danelumax2/article/details/9172465有修改! 一:关于Pcl和WIndef的冲突: 1. 错误输出 ./zlibra ...
- (15)Verilog HDL宏定义:define
(15)Verilog HDL宏定义:define 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL宏定义:define 5)结语 1.2 FPGA ...
- 虚幻编程准备之-宏定义的语法
虚幻编程要面对的很大一部分代码都是用宏来书写的,包括整个虚幻的反射机制也是由宏来支撑的. 这里对宏来做一个简单的用法总结,主要还是针对C++和C的宏语法. 文章目录 最简形式的宏 定义 使用 输出 带 ...
- Verilog hdl 宏定义编译报错
1.今天使用quartus 9.1 编译文本文件使用宏定义时编译器报错,不使用则正确.原因不明. 如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- c语言语法基础之——局部变量及存储类别、全局变量及存储类别、宏定义 学习
宏定义 // 宏定义只是替身,不需要小括号,一般命名用大写字母 #define B(c) c*c main(){int m=5, n=8,k; k=10*B(m+n); // 是 10*5+8*5+8 ...
- Verilog语法和典型电路
这里写目录标题 Verilog语法知识 Q:锁存器 Q:D触发器 Q:消除毛刺 Q:同步复位和异步复位 Q:边沿检测 Q:握手信号 Q:脉冲展宽(单bit慢采快) Q:二进制与格雷码的转换 Q:二进制 ...
- Verilog语法之`define、`undef
在这篇文章<从几个简单例子聊聊Verilog的参数化设计(parameter.localparam和`define)>中已经讨论过 `define 的一些用法,但不太深入,所以今天再说道说 ...
最新文章
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- ASP.NET Web API 基本操作(CRUD)
- 设计模式:外观模式(Facade)
- Android 5.1 添加硬件抽象层(HAL)和JNI接口总结
- OS_CORE.C(1)
- oracle不使用游标,oracle – 为什么我们不能在动态SQL语句中使用强引用游标?
- 如何使用Putty登录安装在VirtualBox里的ubuntu
- whey some page need header when your fetch that page and some don't need
- MATLAB矩阵基本运算
- 生成树模型 matlab,最小生成树matlab
- fake_useragent导入无法引用的解决方法
- 彻底掌握Quartus——基础篇
- 笔试必备:48道SQL练习题(Oracle为主)
- linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...
- P4043 [AHOI2014/JSOI2014] 上下界最小费用流
- 网站性能测试基本指标
- trackerslist GitHub12月无重复更新版
- CDateTimeCtrl 用法总结
- Android疯狂ListViw之旅 第二季之 分组排序显示数据
- 邻接表Dijkstra模板———2014 北邮网研 D题 网络传输