mirror of
https://github.com/zachjs/sv2v.git
synced 2026-08-30 09:28:12 +02:00
interface and instance array support
- support for interface instance arrays - support for interface-using module instance arrays - support for modport array bindings - fix modport bindings shadowed in nested instances
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
interface Interface;
|
||||
logic x;
|
||||
endinterface
|
||||
|
||||
module Module(intfs);
|
||||
parameter LEFT = 0;
|
||||
parameter RIGHT = 0;
|
||||
Interface intfs[LEFT:RIGHT];
|
||||
logic [LEFT:RIGHT] xs;
|
||||
localparam LO = LEFT > RIGHT ? RIGHT : LEFT;
|
||||
localparam HI = LEFT > RIGHT ? LEFT : RIGHT;
|
||||
for (genvar i = LO; i <= HI; i = i + 1) begin
|
||||
// intentional shadowing of dimension constants
|
||||
localparam LEFT = 0;
|
||||
localparam RIGHT = 0;
|
||||
assign xs[i] = intfs[i].x;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module Instance();
|
||||
parameter LEFT = 0;
|
||||
parameter RIGHT = 0;
|
||||
|
||||
parameter INNER_LEFT = 0;
|
||||
parameter INNER_RIGHT = 0;
|
||||
parameter INNER_OFFSET = 0;
|
||||
|
||||
reg [LEFT:RIGHT] xs;
|
||||
|
||||
localparam DIR = LEFT >= RIGHT ? -1 : 1;
|
||||
Interface intfs[LEFT:RIGHT]();
|
||||
generate
|
||||
genvar i;
|
||||
for (i = LEFT; i <= RIGHT; i = i + DIR)
|
||||
assign intfs[i].x = xs[i];
|
||||
endgenerate
|
||||
|
||||
// intentional name collision with localparams in the module
|
||||
localparam LO = INNER_LEFT >= INNER_RIGHT ? INNER_RIGHT : INNER_LEFT;
|
||||
localparam HI = INNER_LEFT >= INNER_RIGHT ? INNER_LEFT : INNER_RIGHT;
|
||||
localparam LEN = HI - LO + 1;
|
||||
|
||||
Module #(INNER_LEFT + INNER_OFFSET, INNER_RIGHT + INNER_OFFSET)
|
||||
l(intfs[INNER_LEFT:INNER_RIGHT]);
|
||||
Module #(INNER_LEFT + INNER_OFFSET, INNER_RIGHT + INNER_OFFSET)
|
||||
m(intfs[LO+:LEN]);
|
||||
Module #(INNER_LEFT + INNER_OFFSET, INNER_RIGHT + INNER_OFFSET)
|
||||
n(intfs[HI-:LEN]);
|
||||
endmodule
|
||||
Reference in New Issue
Block a user