用戶編程控制的FPGA 是通過加載比特位流配置內部的存儲單元實現的。該存儲單元就是所謂的配置單元,它必須在器件上電后進行配置,從而設置查找表(LUT)的屬性、連線方式、IOB 電壓標準和其它的用戶設計。
1.配置幀
以Xilinx 公司的Virtex-II 系列為例,配置數據是以配置幀(Frame)為配置單元進行讀寫的。每一幀以一個比特為寬度,從器件的最頂端一直延伸到最底端。
不同器件型號的尺寸和容量不同,所以,對應的幀長也不同。但在同一器件中,所有類型的幀,其長度一致。
下表列出不同型號的幀長度以及總的幀數,單位為32bit 字。
2.配置列
多個配置幀構成了更大的配置單位稱為配置列(Column)。以配置列為單位,可以將FPGA 資源分成三類:類一,CLB 列、IOB 列、IOI 列、GCLK 列;類二,BRAM 列;類三,BRAM Interconnect 列。下圖展示了三類資源在FPGA 上的物理映射。
在Virtex-II 系列FPGA 中,IOB、IOI 和GCLK 列數是一致的,而CLB、BRAM和BRAM Interconnect 的列數則是根據器件的尺寸有所差異。對于不同類別的列所含有的幀數以及不同器件型號所含有的列數由下表所示。
IOB 列:配置器件最左和最右兩端的I/O 電平標準;
IOI 列:配置乘法器、器件最左端和最右端IOB 中的三態緩沖、IOB 中的寄存器;
CLB 列:配置CLB 單元、布線、大部分的內連和器件最上端和最下端IOB;
BRAM 列:配置在BRAM 中的用戶存儲空間屬性;
BRAM Interconnect 列:配置除了用戶存儲空間以外的BRAM 空間以及乘法器的屬性;
GCLK 列:配置大部分的全局時鐘資源,包括時鐘緩沖和數字時鐘管理器(DCM)。
3.配置單元的尋址
在整個配置過程中,每個配置幀都有唯一的32 位地址與之相對應。該地址由塊地址(Block Address,BA)、主地址(Major Address,MJA)、次地址(Minor Address,MNA)和字節數(Byte number)組成。其中,字節數為全‘0’,它是在配置過程中,自動為器件中的幀長計數器所使用,用戶不能夠對其進行設置。下表說明了地址的組成。
根據塊地址(BA),可以將地址劃分為三類(BA00,BA01,BA10),對應著FPGA 三類的內部資源:
BA00 包括了所有的CLB 列、IOB 列、IOI 列、GCLK 列;
BA01 包括了所有的BRAM 列;
BA10 包括了所有的BRAM Interconnect 列。
主地址(MJA)指定了一列在某塊中的位置,次地址(MNA)則是說明一幀在某一列中的次序。下圖說明了幀地址的映射,需要注意的是,幀的排列并不是硬件上的映射,而是邏輯上的映射。在配置過程中,幀地址會自動累加,即:幀的配置順序在下圖中是從左到右的一個配置過程。
4.比特流的組成
配置 Virtex-II 的比特流由同步字和大量的數據包組成,其長度均為以32bit 字為單位。同步字(0xAA995566)對配置邏輯進行同步,當FPGA 接收到這一同步字后,數據通道打開,開始以32bit 字為基本單位進行數據包的接收。在比特文件中的位置由下圖所示。
而數據包則是先指定相應寄存器然后再對其進行配置,它是由包頭和不定長的實體構成,其仍然以32bit 字進行基本的操作。
數據包的包頭分為兩種類型:TYPE1 和TYPE2。
TYPE1的包頭如下表所示,在TYPE1 包頭中,“WR”或“RD”指定了讀寫操作,“Register Address”指定配置寄存器的地址,“Word Count”指定了跟在TYPE1 包頭后面的32bit 字的字數,對應需要配置到“Register Address”所指定的寄存器。
TYPE2的包頭如下表所示。
通常,TYPE1 用于比較小的包的配置,例如對地址寄存器(FAR)的配置。而TYPE2 則是用于較大包的配置,例如對FPGA 三類資源的配置。
但在全比特位流中,通常是兩種類型的包頭結合使用,組織形式為“TYPE1+TYPE2”,形式如下圖所示。
5.配置控制邏輯
Virtex-II FPGA 的配置控制邏輯是由包處理器、一系列的配置寄存器及其控制的全局信號組成。其中,包處理器將從數據通道進來的數據流配置到相應的寄存器,而配置寄存器則是根據不同的值進行配置過程中的相應操作。
5.1包處理器
上電后,識別到同步字后,包處理器開始等待有效的包頭。接收到有效包頭后,包處理器就會將包頭后的數據配置到其所指定的寄存器中,直至包頭中的字計數器(Word Count)減到零,才會去等待下一個有效的包頭。數據通道的數據流在進入包處理器之前都會經過一個64bit 的緩沖單元,如下圖所示。
包處理器本身則是以32bit 字為基本單位去識別所有的指令。所以,在比特流中配置指令的結束位置必須有至少2 個32bit 的無效字,如下表所示,從而將還位于緩沖區的的指令送至包處理器中
5.2配置寄存器
FPGA 配置的實現過程也是所有配置指令的執行過程。根據寫入配置寄存器不同的值,就可以執行相應的操作。下表就給出了FPGA 一些關鍵的內部配置寄存器及其對應的地址。
?學習例程
我給小白們準備了一份禮物,下面是我精心整理的n多verilog代碼。幫助小白們由淺至深的“模仿”。在模仿的過程中能夠進一步的鞏固之前了解的語法知識。
這些Verilog例程基本涵蓋了以后可能遇到的所有用法,參考這些代碼,可以做出你想要的任何設計。
當你想要用Verilog編寫一段代碼實現某個功能時,如果你能夠想到參考哪段代碼能夠實現你的設計,那么恭喜你,你已經入門了!!!
所有示例代碼,點擊鏈接獲取。
01-鎖存器、觸發器、寄存器、移位寄存器等
【免費】VerilogHDL示例代碼之01-鎖存器、觸發器、寄存器、移位寄存器等資源-CSDN文庫
02-邏輯門、三態門、mux等
【免費】VerilogHDL示例代碼之02-邏輯門、三態門、mux等資源-CSDN文庫
03-各種計數器
【免費】VerilogHDL示例代碼之03-各種計數器資源-CSDN文庫
04-各類加法器
【免費】VerilogHDL示例代碼之04-各類加法器資源-CSDN文庫
05-乘法器
【免費】VerilogHDL示例代碼之05-乘法器資源-CSDN文庫
06-異步復位同步釋放
【免費】VerilogHDL示例代碼之06-異步復位同步釋放資源-CSDN文庫
07-分頻
【免費】VerilogHDL示例代碼之07-分頻資源-CSDN文庫
08-語法語句
【免費】VerilogHDL示例代碼之08-語法語句資源-CSDN文庫
09-串并轉換
【免費】VerilogHDL示例代碼之09-串并轉換資源-CSDN文庫
10-狀態機設計
【免費】VerilogHDL示例代碼之10-狀態機設計資源-CSDN文庫
11-編解碼應用
【免費】VerilogHDL示例代碼之11-編解碼應用資源-CSDN文庫
12-仿真語法舉例
【免費】VerilogHDL示例代碼之12-仿真語法舉例資源-CSDN文庫
13-進階設計
【免費】VerilogHDL示例代碼之13-進階設計資源-CSDN文庫
我將Verilog的語法進行了總結,寫了13篇文章,讓小白“快速見識豬如何跑”,每一篇講解一類語法,結合正確的示例代碼和錯誤的示例代碼,有的章節對個別語法進行了歸納總結,幫助初學者加深理解。詳情點擊 ? ? ? ? ? ? ? ? ? ??
小白如何快速入門Verilog?-CSDN博客
Verilog語法之〇:Verilog HDL簡介/Verilog語法介紹-CSDN博客
Verilog語法之一:簡單的Verilog HDL模塊-CSDN博客
Verilog語法之二:常量-CSDN博客
Verilog語法之三:變量-CSDN博客
Verilog語法之四:運算符-CSDN博客
。。。。。。
更多課程,敬請期待