Reputation: 21
This generates single bit out, for all values of parameter syn
. Why for syn>0
its not generating 2 bit out
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
Upvotes: 2
Views: 693
Reputation: 13987
Because `define is a compile directive. It is evaluated before your code is compiled. `ROMS is always defined, whatever the value of syn
.
Upvotes: 2