たとえば、IOs AとBが接続されている間にIOnsとIOの間に10nsの遅延があります。 IOは500MHz(2ns周期)で動作します。双方向転送遅延をモデル化する方法
デフォルトでは、Verilogはフィルタとして機能する慣性遅延を使用します。したがって、インターコネクト・ワイヤをwire #(10ns) io;
と定義すると、データがフィルタリングされるため、機能しません。
wire #(10ns) io;
assign io = io_a_en ? a_data_500MHz : 'z;
assign io = io_b_en ? b_data_500MHz : 'z;
転送遅延は単方向です。 IO上の各方向の1つを作成すると、複数のドライバとフィードバックループが発生します。
always @(a) b_reg <= #(10ns) a;
always @(b) a_reg <= #(10ns) b;
assign a = b_reg; // feedback b_reg = b = a_reg = a ... and multi-driver
assign b = a_reg; // feedback a_reg = a = b_reg = b ... and multi-driver
assign a = io_a_en ? a_data_500MHz : 'z;
assign b = io_b_en ? b_data_500MHz : 'z;
双方向トランスポート遅延をモデル化する方法はありますか。