`在生成if语句中定义

时间:2019-12-10 09:53:53

标签: verilog generate

这将为参数syn的所有值生成单个输出。为什么syn>0不能生成2位输出

module test
        (clk,
         rst_n,
         en,
         rst_n2,
         in,
         out
         );

parameter syn=0;

generate if(syn>0)begin 
    `define ROMS
end endgenerate

input clk;
input rst_n;
input en;
input rst_n2;



`ifdef ROMS
    input  in;
    output reg  out;
`endif



`ifndef ROMS
    input [1:0] in;
    output reg [1:0] out;
`endif



always_ff@(posedge clk or negedge rst_n or negedge en) begin 
    if(~rst_n) begin 
         out <= 0;
     end else if(clk) begin 
         out <= 0;
     end else if(rst_n2 == 1'b0)begin 
         out <= 0;
     end else begin     
         out <= in;
     end 
end

endmodule 

1 个答案:

答案 0 :(得分:2)

因为`define是 compile指令。在编译代码之前先对其进行评估。无论syn的值如何,总是定义ROMS。