Thanks for the question! Perhaps if you could share some screenshots in Vivado and/or example code that exhibits the behavior, we might be able to help identify the issue better. In theory,
Design.createAndPlaceIOB() should create a top-level port and connect to it, but it is possible that it might be failing to do so in situations we haven't tested yet. Also, can you share which device you are targeting?
I don't believe we have an equivalent command to place_ports in RapidWright, but that is interesting feedback that perhaps we should.