I am trying to build a driver module for the SMI interface on my ethernet PHY. My top level module contains the following ports with eth_mdio marked as inout.
module top
(
input clk_100,
input cpu_rst_n,
output eth_mdc,
inout eth_mdio,
output eth_rstn,
inout eth_crsdv,
inout eth_rxerr,
inout [1:0] eth_rxd,
output eth_txen,
output [1:0] eth_txd,
output eth_clkin,
inout eth_intn,
input [15:0] sw,
output [15:0] led,
input btnc
);
...
smi smi_inst
(
.clk_50(clk_50),
.rst_n(rst_n),
.valid(read_reg),
.write(0),
.phyaddr(0),
.register(sw[4:0]),
.read_value(led),
.eth_mdc(eth_mdc),
.eth_mdio(eth_mdio)
);
endmodule
Inside the top module I create an instance of a submodule called smi which has the following ports.
module smi
(
input clk_50,
input rst_n,
output ready,
input valid,
input write,
input [4:0] phyaddr,
input [4:0] register,
input [15:0] write_value,
output [15:0] read_value,
output reg eth_mdc,
inout eth_mdio
);
Inside of smi I assign eth_mdio as follows...
assign eth_mdio = state == STATE_IDLE ? 1'b0 : (state == STATE_READ ? 1'bz : send_buffer[64]);
When I go to synthsize the design I get the following critical warning...
[Synth 8-5744] Inout buffer is not created at top module top for the pin eth_mdio, other connections may not have buffer connection ["/home/chase/workspace/EthernetTest/src/top.v":3]
What is causing this and how can I fix it? How can I pass an inout through the hierarchy?
state == STATE_IDLE
, like so:(state == STATE_IDLE)
\$\endgroup\$