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

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值