SMI接口時序圖如下:
在讀數據的時候,主機端應該給高阻態,但是我把它過了一個觸發器,就類似下面這樣:
assign mdio_in = mdio;
assign mdio_o = mdio_reg;
always @(posedge clk)
mdio_reg <= 1'bz;
用示波器測得輸出得電平變成低電平了,於是當讀出來的數據爲高電平的時候,就變成了半高的電平,如下圖:
後來將代碼修改成了這樣,才恢復正常:
assign mdio_in = mdio;
assign mdio_o = en ? mdio_reg : 1'bz;
正常的波形如下:
其實以前都是按照第二種方法寫inout數據的賦值的,這次也就是想換一種寫法,沒想到高阻態經過觸發器後會變成低電平。
像這種出現半高狀態的波形,看到的時候,就應該想到是一端拉高,一端拉低,才導致了電平只有一半。