FPGA實現對USB2.0的同步數據傳輸及USB2.0固件配置(2)


      USB2.0的開發與設置主要包括三部分,第一:基於keil 的USB2.0的固件開發,這里主要是借用黑金開發板516上面自帶的固件進行相關的設置預配置:第二:是基於C# 或者C++對於USB2.0的上位機的開發;第三:主要是基於FPGA的對於USB2.0的同步傳輸。

      首先,通過固件修改將USB2.0配置為同步傳輸模式,這里用到的是EZ-USB,板載芯片是Cypress68013A。黑金開發板默認的是異步傳輸。

      

  將固件中的IFCONFIG 寄存器配置成為0xE3,即配置成了同步模式,即圖示位置

將改好后的固件編譯后,同過黑金提供的上位機,將生成的HEX文件或者IIC文件下載到USB2.0中,重新上電即可,如下圖所示DONWLOAD是用來下載HEX文件,掉電丟失;LG EEPROM是用來下載IIC文件時機哦保存在RRPROm中的。

固件配置好后就是 FPGA  Verilog 程序設計了;在本次測試中實現的是FPGA想USB中寫數據,在PC端通過上位機顯示出來。代碼很少;

 1 module  top(
 2         // system signals
 3         input                   s_rst_n                 ,       
 4         // system signals
 5         input                   usb_ifclk               ,       
 6         input                   usb_full                ,       
 7         input                   usb_empty               ,       
 8         output  wire            usb_slcs                ,       
 9         output  wire            usb_slwr                ,       
10         output  wire            usb_slrd                ,       
11         output  wire            usb_sloe                ,       
12         output  wire    [ 1:0]  usb_fifoadr             ,
13         output  reg     [15:0]  usb_fdata
14 );
15 
16 //========================================================================\
17 // =========== Define Parameter and Internal signals =========== 
18 //========================================================================/
19 
20 reg                             usb_slwr_reg                    ;       
21 
22 //=============================================================================
23 //**************    Main Code   **************
24 //=============================================================================
25 assign  usb_slcs        =       1'b0;
26 assign  usb_slwr        =       (usb_full == 1'b1 && usb_slwr_reg == 1'b0) ? 1'b0 : 1'b1;
27 assign  usb_slrd        =       1'b1;
28 assign  usb_sloe        =       1'b1;
29 assign  usb_fifoadr     =       2'b10;  // 2,4,6,8
30 
31 
32 always  @(posedge usb_ifclk or negedge s_rst_n) begin
33         if(s_rst_n == 1'b0)
34                 usb_slwr_reg    <=      1'b1;
35         else if(usb_full == 1'b1)
36                 usb_slwr_reg    <=      1'b0;
37         else 
38                 usb_slwr_reg    <=      1'b1;
39 end
40 
41 
42 always  @(posedge usb_ifclk or negedge s_rst_n) begin
43         if(s_rst_n == 1'b0)
44                 usb_fdata       <=      'd0;
45         else if(usb_slwr == 1'b0)
46                 usb_fdata       <=      usb_fdata + 1'b1;
47 end
48 
49 
50 endmodule

介紹一下端口的設計:usb_ifclk :是輸入時鍾這是針對於FPGA來說,數據的輸出和時鍾都是基於此時鍾,同步寫數據的時候。

                                     usb_full:寫滿標志,因為我們設置的是slave FIFO模式。高電平表示為寫滿,拉低的是后標志寫滿。

                                      usb_empty:讀空標志,高電平表示沒有讀空,拉低表示讀空。

                                     usb_scls:片選信號

                                      usb_sloe:輸出使能信號,

                                      usb_slrd:;讀觸發信號

                                     usb_slwr:寫出發信號

                                     usb_fifoadr[1:0]:表示你要操作那個FIFO

                                     usb_fifodata[15:0]:表示傳輸的數據位。

在數據手冊中我們可以總結出的信號連接圖在SlaveFIFO方式下,FPGA與FX2的連接信號圖如圖:

在數據手冊中各個管腳的作用:

下面是信號線的說明。

IFCLK:FX2輸出的時鍾,可作為通信的同步時鍾。

FLAGA、FLAGB、FLAGC、FLAGD:FX2輸出的FIFO狀態信息,如滿、空等。

SLCS:FIFO的片選信號,外部邏輯控制,當SLCS輸出高時,不可進行數據傳輸。

SLOE:FIFO輸出使能,外部邏輯控制,當SLOE無效時,數據線不輸出有效數據。

SLRD:FIFO讀信號,外部邏輯控制,同步讀時,FIFO指針在SLRD有效時的每個IFCLK的上升沿遞增,異步讀時,FIFO讀指針在SLRD的每個有效至無效的跳變沿時遞增。

SLWR:FIFO寫信號,外部邏輯控制,同步寫時,在SLWR有效時的每個IFCLK的上升沿時數據被寫入,FIFO指針遞增,異步寫時,在SLWR的每個有效至無效的跳變沿時數據被寫入,FIFO寫指針遞增。

PKTEND:包結束信號,外部邏輯控制,在正常情況下,外部邏輯向FX2的FIFO中寫數,當寫入FIFO端點的字節數等於FX2固件設定的包大小時,數據將自動被打成一包進行傳輸,但有時外部邏輯可能需要傳輸一個字節數小於FX2固件設定的包大小的包,這時,它只需在寫入一定數目的字節后,聲明此信號,此時FX2硬件不管外部邏輯寫入了多少字節,都自動將之打成一包進行傳輸。

FD[15:0]:數據線。

FIFOADR[1:0]:選擇4個FIFO端點的地址線,外部邏輯控制。

邏輯思維梳理:

當按照以上所述的模式設置時。USB與PC端通信可以理解為以下模式:

官方同步寫數據的時序圖:

可以理解為以下時序圖:

 

后續》》》》》

 

 

 

 

 

 

 

 

 

                                          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM