02-26-2020 01:10 PM
I'm working with Partial Reconfiguration and have some issues if anyone can help with.
Target Device: Vertix UltraScale+
My RM is actually bigger than my static top. My RM contains multiple SLRs and it does have a GT core (Serial Transceivers).
My RM does have SERDES I/O and Reference Clocks which I didn't expose to the Static Top but, I want to have them as IO ports so that I can set their PACKAGE_PIN property to connect them directly to the GTs. If I expose them to the Static Top then Vivado will place LUT1 over the boundaries which I don't want.
Please see the example code of my case;
input [7:0] Data_in_Static,
input [7:0] Data_in_RM,
output reg [7:0] Data_out_Static,
output [7:0] Data_out_RM
always @(posedge Clk) begin
if (Reset) begin
Data_out_Static <= 8'd0;
else if (Ena) begin
Data_out_Static <= Data_in_Static;
.Data_out (Data_out_RM) // Rest of the IOs are not exposed here
where RM module looks like,
input [7:0] Data_in,
output [7:0] Data_out
//Not Exposed IOs
input [11:0] RxSerdes_p,
input [11:0] RxSerdes_n,
output [11:0] TxSerdes_p,
output [11:0] TxSerdes_n
// IP instantiations and other logic is here
I'm using PR Project flow, so I created the Partition Definition on the RM which made RM OOC synth run. I do have two .xdc files one for Static_Top and one for RM. In Static_Top.xdc I have defined all IO standards and package pins for Clk, Reset, Ena, Data_in_Static, Data_out_Static, Data_in_RM, and Data_out_RM. While in RM.xdc I have defined IO standards and package pins for RefClk_p, RefClk_n, RxSerdes_p, RxSerdes_n, TxSerdes_p, and TxSerdes_n.
I have created a parent run as a GreyBox then child run for RM so it looks like this
I have inserted the RM.xdc using OPT_DESIGN.PRE in impl_RM run to apply LOC constraints to the RM IOs but I couldn't apply them because these IOs (RefClk_p, RefClk_n, RxSerdes_p, RxSerdes_n, TxSerdes_p, and TxSerdes_n) are actually cell pins instead of actual IOs so they don't have PACKAGE_PIN property.
According to UG947 (Page#13), we can have ISERDES, OSERDES, MGTs in the RM.
Could anyone please explain is it a possible way to have IOs in RM without exposing them to the Top? Any suggestions or ideas?
02-26-2020 07:38 PM
Hi, email@example.com ,
If RM contains IO ports, these RM ports should still be exposed to the top level.
In the top level, these ports for RM should be set with io_buffer_type none.
Ex：(* io_buffer_type = “none” *) input in1;
In the RM design, all the needed Ibuf/obuf should be instantiated manually.
02-27-2020 12:13 PM - edited 02-27-2020 12:24 PM
Hongh, if the top level rtl needs to have these ports defined, then for each RM that's used the top rtl would have to be modified and get recompiled. Doesn't that defeat the purpose of having the RM independent of the static top?