`ifedf条件编译语句

一般情况下,Verilog HDL源程序中所有的行都将参加编译。但是有时希望对其中的一部分内容只有在满足条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足条件时对一组语句进行编译,而当条件不满足是则编译另一部分。

应该在什么情况下使用呢?
例如:一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件编译语句。

条件编译命令有以下几种形式: 
 
        1)   `ifdef 宏名 (标识符) 
               程序段1 
               `else 
               程序段2 
               `endif 
        它的作用是当宏名已经被定义过(用`define命令定义),则对程序段1进行编译,程序段2将被忽略;否则编译程序段2,程序段1被忽略。其中`else部分可以没有,即: 
 
        2)   `ifdef 宏名 (标识符)

               程序段1
              `endif 
        这里的 “宏名” 是一个Verilog HDL的标识符,“程序段”可以是Verilog HDL语句组,也可以是命令行。这些命令可以出现在源程序的任何地方。注意:被忽略掉不进行编译的程序段部分也要符合Verilog HDL程序的语法规则。 
        通常在Verilog HDL程序中用到`ifdef、`else、`endif编译命令的情况有以下几种: 
        •    选择一个模块的不同代表部分。 
        •    选择不同的时序或结构信息。 
        •    对不同的EDA工具,选择不同的激励。

语法:

// Style #1: Only single `ifdef
`ifdef <FLAG>
	// Statements
`endif

// Style #2: `ifdef with `else part
`ifdef <FLAG>
	// Statements
`else
	// Statements
`endif

// Style #3: `ifdef with additional ifdefs
`ifdef <FLAG1>
	// Statements
`elsif <FLAG2>
	// Statements
`elsif <FLAG3>
	// Statements
`else
	// Statements
`endif

 条件编译可以通过Verilog的  `ifdef 和 `ifndef 关键字来实现。
 这些关键字可以出现在设计中的任何地方,并且可以相互嵌套。 
 它通常和预编译指令`define配套使用。 如果使用 `define定义了
 称为`FLAG`的宏,那么关键字`ifdef会告诉编译器包含这段代码,
 直到下一个`else或`endif。

 示例

module my_design (input clk, d,
`ifdef INCLUDE_RSTN
                  input rstn,
`endif
                  output reg q);

  always @ (posedge clk) begin
`ifdef INCLUDE_RSTN
    if (!rstn) begin
      q <= 0;
    end else
`endif
    begin
      q <= d;
    end
  end
endmodule

Testbench

module tb;
  reg clk, d, rstn;
  wire q;
  reg [3:0] delay;

  my_design u0 ( .clk(clk), .d(d),
`ifdef INCLUDE_RSTN
                .rstn(rstn),
`endif
                .q(q));

  always #10 clk = ~clk;

  initial begin

    {d, rstn, clk} = 0;

	#20 rstn = 1;
	
    for (integer i = 0 ; i < 20; i=i+1) begin
      delay = $random;
      #(delay) d = $random;
    end

    #20 $finish;
  end

endmodule

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值