Quartus® II 軟體版本 6.0 和更新版本更嚴格地將 VHDL 方向訊號合成。由於 Quartus II 軟體強制執行 VHDL 規則,因此將編碼錯誤的雙向緩衝區轉換為輸出針腳。
例如,如果您執行下列代碼所示的雙向緩衝區,Quartus II 軟體會合成輸出針腳(從版本 6.0 開始)。
process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mac_mdio else
mac_mdio end if
end process;
mdio_oe test_out mii_mdio
如果mac_mdio是訊號,而mii_mdio是雙向埠,上面的最後一個作業是方向性。書面來說,資料不可能 從 mii_mdio傳輸 到 mac_mdio。從 6.0 版本開始,Quartus II 軟體在mac_mdio和mii_mdio之間插入緩衝區,強化了此 VHDL 作業的方向性。此緩衝區出現在 RTL Viewer 中,作為三狀態緩衝區系列中的方向緩衝區,而預期的雙向針腳 (mii_mdio) 僅作為輸出進行合成。
Quartus II 軟體的早期版本無法強制執行這些作業類型的方向性,將上述代碼合成為雙向針腳。
若要符合 VHDL 標準,請移除上述範例中的最後一個訊號分配聲明,並寫下下列代碼:
process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mii_mdio else
mii_mdio end if;
end process;
mdio_oe test_out