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—宏定义相关推荐

  1. 【C语言进阶深度学习记录】十七 宏定义的使用与分析

    文章目录 1 C语言中的宏定义 1.1 定义宏常量 1.2 宏定义表达式 1.3 宏表达式与函数的对比 1.4 宏表达式的作用域 2 C语言中的内置宏 3 宏定义的代码综合示例 4 总结 1 C语言中 ...

  2. verilog 定义位宽为1的_Verilog中宏定义位宽带来的问题

    Verilog 中宏定义位宽带来的问题 宏定义在 C 语言程序中的使用司空见惯,他的好处就在于可以大大提高代码的可读性和可 移植性.而在 verilog 中,也支持这个语法,在很多开源代码中也都能看到 ...

  3. max 宏定义取消:error C2589: error C2059: 语法错误 : “::”

    原文链接:http://blog.csdn.net/danelumax2/article/details/9172465有修改! 一:关于Pcl和WIndef的冲突: 1. 错误输出 ./zlibra ...

  4. (15)Verilog HDL宏定义:define

    (15)Verilog HDL宏定义:define 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL宏定义:define 5)结语 1.2 FPGA ...

  5. 虚幻编程准备之-宏定义的语法

    虚幻编程要面对的很大一部分代码都是用宏来书写的,包括整个虚幻的反射机制也是由宏来支撑的. 这里对宏来做一个简单的用法总结,主要还是针对C++和C的宏语法. 文章目录 最简形式的宏 定义 使用 输出 带 ...

  6. 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 ...

  7. c语言语法基础之——局部变量及存储类别、全局变量及存储类别、宏定义 学习

    宏定义 // 宏定义只是替身,不需要小括号,一般命名用大写字母 #define B(c) c*c main(){int m=5, n=8,k; k=10*B(m+n); // 是 10*5+8*5+8 ...

  8. Verilog语法和典型电路

    这里写目录标题 Verilog语法知识 Q:锁存器 Q:D触发器 Q:消除毛刺 Q:同步复位和异步复位 Q:边沿检测 Q:握手信号 Q:脉冲展宽(单bit慢采快) Q:二进制与格雷码的转换 Q:二进制 ...

  9. Verilog语法之`define、`undef

    在这篇文章<从几个简单例子聊聊Verilog的参数化设计(parameter.localparam和`define)>中已经讨论过 `define 的一些用法,但不太深入,所以今天再说道说 ...

最新文章

  1. 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
  2. ASP.NET Web API 基本操作(CRUD)
  3. 设计模式:外观模式(Facade)
  4. Android 5.1 添加硬件抽象层(HAL)和JNI接口总结
  5. OS_CORE.C(1)
  6. oracle不使用游标,oracle – 为什么我们不能在动态SQL语句中使用强引用游标?
  7. 如何使用Putty登录安装在VirtualBox里的ubuntu
  8. whey some page need header when your fetch that page and some don't need
  9. MATLAB矩阵基本运算
  10. 生成树模型 matlab,最小生成树matlab
  11. fake_useragent导入无法引用的解决方法
  12. 彻底掌握Quartus——基础篇
  13. 笔试必备:48道SQL练习题(Oracle为主)
  14. linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...
  15. P4043 [AHOI2014/JSOI2014] 上下界最小费用流
  16. 网站性能测试基本指标
  17. trackerslist GitHub12月无重复更新版
  18. CDateTimeCtrl 用法总结
  19. Android疯狂ListViw之旅 第二季之 分组排序显示数据
  20. 邻接表Dijkstra模板———2014 北邮网研 D题 网络传输

热门文章

  1. 关于visual studio安装失败的真正解决办法
  2. 三只松鼠股东大撤退幕后
  3. 常见外包公司(非全部)
  4. python floor() 函数
  5. python地产成本_Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)...
  6. Formal Verification (二) FPV、APPs
  7. Linux 根目录下的文件介绍
  8. 怎么用计算机按反三角函数的导数,反三角函数求导过程
  9. vscode中检查单词是否拼写错误的插件
  10. JAVA-----锁机制