Absorb wire for IO blackbox connection

Skip to first unread message


Mar 3, 2022, 3:49:05 AMMar 3
to chisel-users

I have a problem with the last version of Gowin EDA synthesizer ( as I explained on my GbHdmi issue project :

I have to connect an lvds output buffer named TLVDS_OBUF on differential FPGA output.

To instanciate the buffer I wrote a blackbox. And I'm connecting the blackbox as it :

class GbHdmi(gowinDviTx: Boolean = true) extends Module

with GbConst with GbHdmiConst{

val io = IO(new Bundle {

/* HDMI output signals */

val tmds = Output(new TMDSDiff())

val buffDiffRed = Module(new TLVDS_OBUF())
buffDiffRed.io.I := serdesRed.io.q

io.tmds.data(2).p := buffDiffRed.io.O
io.tmds.data(2).n := buffDiffRed.io.OB

This works and generate Verilog without problem but generate a verilog wire to connect module port :


wire buffDiffRed_O;
assign io_tmds_data_2_p = buffDiffRed_O; // wire connection
TLVDS_OBUF buffDiffRed (
 .I(buffDiffRed_I) );


And gowin synthesizer doesn't like it and refuse to connect port through wire :

ERROR (CV0013) : Pin(buffDiffRed_O) of 'io_tmds_data_2_p'(TLVDS_OBUF) does not connect to port("/home/user/myapp/GbHdmi/TopGbHdmi.v":1115)

If I suppress this verilog wire by hand and connect io port directly it's work.

I'm sure that is a gowin synthesizer problem but is there a way to 'absorb' this wire and connect io module directly to the buffer with Chisel ?

Modifying Verilog generated code is a pain. It couldn't be a definitive solution.

Reply all
Reply to author
0 new messages