文字数制限に引っかかってしまったので、後半部分を分けました。
68 // FSM in distination side
69 always@( posedge dst_clk_i) begin
70 if( dst_por_i ) begin
71 s2d <= 2'b0 ;
72 dst_fsm <= DST_IDLE ;
73 end // if
74 else begin
75 s2d <= { s2d[0], a_s2d } ;
76 (* parallel_case *)
77 casex( dst_fsm )
78 DST_IDLE : begin
79 if( s_s2d ) begin
80 dst_fsm <= DST_WAITFOR_READY ; // start fsm
81 end
82 // else stay
83 end
84 DST_WAITFOR_READY : begin
85 if( dst_ready_i ) begin
86 dst_fsm <= DST_WAITFOR0 ;
87 end
88 // else stay
89 end
90 DST_WAITFOR0 : begin
91 if( ~s_s2d ) begin
92 dst_fsm <= DST_IDLE ;
93 end
94 // else stay
95 end
96 default :
97 dst_fsm <= DST_IDLE ;
98 endcase
99 end // else
100 end // always
101 assign a_d2s = (dst_fsm == DST_WAITFOR0 ) ? 1'b1 : 1'b0 ;
102 assign dst_we_o = (dst_fsm == DST_WAITFOR_READY) ? dst_ready_i : 1'b0 ;
103 assign s_s2d = s2d[1] ; // for debug use only
104
105 endmodule // common_cdc