?? usbf_utmi_if.v
字號:
`include "usbf_defines.v"module usbf_utmi_if( // UTMI接口部分的端口定義 phy_clk, rst, DataOut, TxValid, TxReady, RxValid, RxActive, RxError, DataIn, XcvSelect, TermSel, SuspendM, LineState, OpMode, usb_vbus, // 內(nèi)部接口 rx_data, rx_valid, rx_active, rx_err, tx_data, tx_valid, tx_valid_last, tx_ready, tx_first, // 其他接口 mode_hs, usb_reset, usb_suspend, usb_attached, resume_req, suspend_clr);input phy_clk; //工作時鐘input rst; //復位output [7:0] DataOut; //輸出數(shù)據(jù)output TxValid; //有效的數(shù)據(jù)傳送input TxReady; //數(shù)據(jù)傳送就緒input [7:0] DataIn; //輸入數(shù)據(jù)input RxValid; //有效的接收input RxActive; //接收準備就緒input RxError; //接收出錯output XcvSelect; //通信模式選擇output TermSel; //通信模式操作output SuspendM; //掛起標志input [1:0] LineState; //節(jié)點連線狀態(tài)output [1:0] OpMode; //操作模式input usb_vbus; //USB總線狀態(tài)output [7:0] rx_data; //接收數(shù)據(jù)output rx_valid, rx_active, rx_err; //接收標志信號input [7:0] tx_data; //傳送數(shù)據(jù)input tx_valid; //本次傳送是否有效input tx_valid_last; //上一次傳送是否有效output tx_ready; //數(shù)據(jù)傳送就緒input tx_first; //第一次傳送數(shù)據(jù)output mode_hs; //高速模式output usb_reset; //USB復位output usb_suspend; //USB掛起output usb_attached; //設備連接至USBinput resume_req; //恢復請求output suspend_clr; //掛起狀態(tài)清除//模塊內(nèi)部連線與寄存器資源定義reg [7:0] rx_data; //接收數(shù)據(jù)字節(jié)寄存器reg rx_valid, rx_active, rx_err; //數(shù)據(jù)接收狀態(tài)寄存器reg [7:0] DataOut; //輸出數(shù)據(jù)字節(jié)寄存器reg tx_ready; //數(shù)據(jù)傳送就緒標志寄存器reg TxValid; //有效數(shù)據(jù)傳送標志寄存器wire drive_k; //強制輸出reg drive_k_r; //數(shù)據(jù)接收操作的輸入寄存器行為描述`ifdef USBF_ASYNC_RESETalways @(posedge phy_clk or negedge rst) `elsealways @(posedge phy_clk) //沒有復位信號`endif if(!rst) rx_valid <= 1'b0; //若發(fā)現(xiàn)復位信號,則數(shù)據(jù)接收無效 else rx_valid <= RxValid; //否則數(shù)據(jù)接收狀態(tài)與UTMI接口的狀態(tài)一致//數(shù)據(jù)接收狀態(tài)準備就緒,等待接收數(shù)據(jù)`ifdef USBF_ASYNC_RESETalways @(posedge phy_clk or negedge rst)`elsealways @(posedge phy_clk)`endif if(!rst) rx_active <= 1'b0; else rx_active <= RxActive;//數(shù)據(jù)接收出錯`ifdef USBF_ASYNC_RESETalways @(posedge phy_clk or negedge rst)`elsealways @(posedge phy_clk)`endif if(!rst) rx_err <= 1'b0; else rx_err <= RxError;//開始接收數(shù)據(jù)always @(posedge phy_clk) rx_data <= DataIn;//數(shù)據(jù)發(fā)送操作的輸出/輸入寄存器行為描述//是否開始輸出數(shù)據(jù)always @(posedge phy_clk) if(TxReady || tx_first) DataOut <= tx_data; else if(drive_k) DataOut <= 8'h00; //若強制輸出,則輸出0x00//數(shù)據(jù)發(fā)送就緒狀態(tài)與UTMI接口部分一致always @(posedge phy_clk) tx_ready <= TxReady;always @(posedge phy_clk) drive_k_r <= drive_k;//有效的數(shù)據(jù)發(fā)送標志信號`ifdef USBF_ASYNC_RESETalways @(posedge phy_clk or negedge rst)`elsealways @(posedge phy_clk)`endif if(!rst) TxValid <= 1'b0; else TxValid <= tx_valid | drive_k | tx_valid_last | (TxValid & !(TxReady | drive_k_r));// Line Status Signaling & Speed Negotiation Block//usbf_utmi_ls u0( .clk( phy_clk ), .rst( rst ), .resume_req( resume_req ), .rx_active( rx_active ), .tx_ready( tx_ready ), .drive_k( drive_k ), .XcvSelect( XcvSelect ), .TermSel( TermSel ), .SuspendM( SuspendM ), .LineState( LineState ), .OpMode( OpMode ), .usb_vbus( usb_vbus ), .mode_hs( mode_hs ), .usb_reset( usb_reset ), .usb_suspend( usb_suspend ), .usb_attached( usb_attached ), .suspend_clr( suspend_clr ) );endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -