Guest
Hi,
What is expected synthesizability of recursively generated
instantiation (see below for trivial test case)
Is this explicitely prohibited by Verilog 2001 LRM?
(Did not found it)
So far my results are 50/50: Xilinx ISE8.1 XST works,
Synopsys dc_shell (2005.09) dies with "Internal error".
BTW Modelism did not have any issues with this code either.
<rant>
It is really anoying that support level for Verilog 2001 is still
so patchy (5 years on). How anybody is expected to adopt
SystemVerilog if basic V2001 stuff does not work yet.
Do you guys use V2001 or do you stay with V95 for safety
and peace of mind?
</rant>
Cheers,
Przemek
module iee_biton_test (
data_in,
data_out
);
// Global parameters
parameter DATA_WIDTH = 4;
parameter DATA_ARRAY_SIZE_EXP = 3;
// Local parameters
parameter DATA_ARRAY_MSB = DATA_WIDTH -1;
parameter DATA_ARRAY_SIZE_EXP_M1 = DATA_ARRAY_SIZE_EXP-1;
input [DATA_ARRAY_MSB:0] data_in;
output [DATA_ARRAY_MSB:0] data_out;
wire [DATA_ARRAY_MSB:0] data_in_p1 = data_in +1'b1;
generate
if(DATA_ARRAY_SIZE_EXP>1) begin: nest
iee_biton_test
#(
..DATA_WIDTH(DATA_WIDTH),
..DATA_ARRAY_SIZE_EXP(DATA_ARRAY_SIZE_EXP_M1)
)
iee_biton_test_0
(
..data_in(data_in_p1),
..data_out(data_out)
);
end
else begin: last
assign data_out = data_in_p1;
end
endgenerate
endmodule
What is expected synthesizability of recursively generated
instantiation (see below for trivial test case)
Is this explicitely prohibited by Verilog 2001 LRM?
(Did not found it)
So far my results are 50/50: Xilinx ISE8.1 XST works,
Synopsys dc_shell (2005.09) dies with "Internal error".
BTW Modelism did not have any issues with this code either.
<rant>
It is really anoying that support level for Verilog 2001 is still
so patchy (5 years on). How anybody is expected to adopt
SystemVerilog if basic V2001 stuff does not work yet.
Do you guys use V2001 or do you stay with V95 for safety
and peace of mind?
</rant>
Cheers,
Przemek
module iee_biton_test (
data_in,
data_out
);
// Global parameters
parameter DATA_WIDTH = 4;
parameter DATA_ARRAY_SIZE_EXP = 3;
// Local parameters
parameter DATA_ARRAY_MSB = DATA_WIDTH -1;
parameter DATA_ARRAY_SIZE_EXP_M1 = DATA_ARRAY_SIZE_EXP-1;
input [DATA_ARRAY_MSB:0] data_in;
output [DATA_ARRAY_MSB:0] data_out;
wire [DATA_ARRAY_MSB:0] data_in_p1 = data_in +1'b1;
generate
if(DATA_ARRAY_SIZE_EXP>1) begin: nest
iee_biton_test
#(
..DATA_WIDTH(DATA_WIDTH),
..DATA_ARRAY_SIZE_EXP(DATA_ARRAY_SIZE_EXP_M1)
)
iee_biton_test_0
(
..data_in(data_in_p1),
..data_out(data_out)
);
end
else begin: last
assign data_out = data_in_p1;
end
endgenerate
endmodule