Quiero convertir un diseño de verilog en vhdl pero encontré un módulo de verilog que no veo forma de convertirlo, porque el diseño en sí no tiene sentido para mí. La entidad del módulo es el siguiente fragmento de código:
module fifo_mst_dpath (
// inputs
input fifoRstn,
input fifoClk,
input latch_clk,
input [31:0] tc_data,
input [3:0] tc_be,
input tc_rxf_n,
input tc_txe_n,
input snd_cmd,
input [3:0] bus_cmd,
input [31:0] tx_data,
input [3:0] tx_be,
input [2:0] ep_num,
// outputs
output reg [31:0] tp_data,
output reg [3:0] tp_be,
output reg rx_rxf_n,
output reg rx_txe_n,
output reg [31:0] rx_data,
output reg [3:0] rx_be
);
La entrada latch_clk controla la siguiente lógica:
always @(latch_clk or tc_data)
if (~latch_clk)
rx_data <= tc_data;
always @(latch_clk or tc_be)
if (~latch_clk)
rx_be <= tc_be;
always @(latch_clk or tc_rxf_n)
if (~latch_clk)
rx_rxf_n <= tc_rxf_n;
always @(latch_clk or tc_txe_n)
if (~latch_clk)
rx_txe_n <= tc_txe_n;
endmodule
El problema ahora es que el diseño de nivel superior crea una instancia de fifo_mst_dpath sin conectar el puerto de entrada latch_clk:
fifo_mst_dpath i_fifo_mst_dpath (
// inputs
.fifoRstn(tm_rstn),
.fifoClk(fifoClk),
.tc_data(tc_data),
.tc_be(tc_be),
.tc_txe_n(tc_txe_n),
.tc_rxf_n(tc_rxf_n),
.snd_cmd(snd_cmd),
.bus_cmd(bus_cmd),
.tx_data(tx_data),
.tx_be(all_m_wr_be),
.ep_num(t_ep_num),
// outputs
.tp_data(tp_data),
.tp_be(tp_be),
.rx_txe_n(rx_txe_n),
.rx_rxf_n(rx_rxf_n),
.rx_data(rx_data),
.rx_be(rx_be)
);
La simulación del diseño con esta configuración (falta latch_clk) siempre dará como resultado rx_be="XXXX", rx_data="XXXXXXX" y así sucesivamente. Pero estas señales se usan en el diseño para otra lógica y el diseño en sí mismo cuando se sintetice funcionará. ¿Me pueden ayudar a entender este problema? ¿Me estoy perdiendo de algo? ¿Cómo se puede convertir esto a vhdl? Gracias.