FPGA上電後IO的預設狀態

2021-10-23 07:37:15 字數 3562 閱讀 6331

概述

在進行fpga硬體設計時,引腳分配是非常重要的乙個環節,特別是在硬體電路上需要與其他晶元通行的引腳。xilinx fpga從上電之後到正常工作整個過程中各個階段引腳的狀態,會對硬體設計、引腳分配產生非常重要的影響。這篇專題就針對fpga從上電開始 ,配置程式,到正常工作整個過程中所有io的狀態進行分析。

從時間階段可以分為兩部分,第一階段是從fpga上電開始直到配置(configuration)完成之前。第二個階段是配置完成之後,fpga開始正常工作開始。

fpga io的基本結構

在《io輸入輸出的各種模式》介紹了處理器io的各種輸入輸出模式以及原理,那麼fpga的io是什麼樣的結構和原理?圖 1為xilinx文件中提供的iob的內部結構,可以看出:

在fpga iob內部,pad輸出之前,內建上下拉電阻。且可以通過passive pull-up/pull-down模組控制兩個mos管的導通與否來控制是否使能上下拉電阻。

內部連線pad的分別有乙個input buffer和output buffer。其中input buffer對外應該始終呈現高阻狀態,同時可以將pad上的電平通過input buffer傳到i1和i2,或者是下部的ff。output buffer有兩個控制訊號,分別是slew rate control,用來控制輸出訊號的slew rate;另乙個是三態控制訊號t,可以控制output buffer輸出高阻。

內部輸出訊號out,可以通過上半部分的ff,經output clock同步後打出,也可以直接連線到output buffer的輸入端,直接輸出。

同樣input buffer的輸出,可以直接連線到i1和i2,也可以經過下半部分的ff,經過input clock的同步之後輸出到內部匯流排上。

上下兩個mos並不是推挽輸出的兩個mos管,因為並不受到互補訊號的控制,並不一定乙個導通另乙個閉合。

圖 1這裡介紹一下輸入快取器的結構和原理,其結構如圖 2所示,其原理與推挽輸出電路非常類似,只是輸入端訊號作為了兩個互補mos管的控制端,控制著輸出端的電平。由於輸入緩衝器有自己的供電電壓,所以輸入電平必須與緩衝器的電源電壓相匹配。d1和d2兩個鉗位二極體用於防治輸入電壓過低或者過高,損壞輸入緩衝器。

圖 2該封裝中所有的通用io引腳。

當前所選擇的模式下沒有使用到的所有功能復用管腳。

在spartan6系列以及之前的器件中這些引腳的狀態是根據hswapen的狀態決定的。

圖 3在7系列以後的器件,包括ultrascale器件中,這些引腳的狀態是根據pudc_b(pull-up during configuration)引腳

圖 4這兩個引腳的功能是相似的,都是用來控制在configuration完成之前,所有普通io的上拉電阻是否使能的。對應到圖 1中,即output buffer輸出高阻,input buffer對外始終為高阻,此時選擇是否連線上拉電阻。

配置完成之後

在配置完成之後,fpga就進入正常工作的模式了。在配置完成之後,普通引腳可以分為以下兩種:

工程設計中使用的io,即在ucf或者xdc中有明確約束的io。

其餘沒有使用,也沒有約束的io。(稱為unassigned pins)

首先,對於第一種情況,由於已經在設計中明確設定了這些引腳的設定,包括方向、電平、驅動能力等等,所以在配置完成之後,這些引腳的狀態已經被設定為了預設的狀態。

對於沒有約束的io,又複雜一些了。在ise開發環境下,工程完成implement之後,在processà process properties àconfiguration options中有"-g unusedpin unused iob pins"屬性,可以選擇pull down、pull up或者floating。預設狀態是pull-down。對應到圖 1中,是高阻輸出,導通下拉電阻。另兩個設定就是高阻加上上拉電阻或者只是上下拉電阻均不導通。

在vivado中也有相同的設定,必須在實現完成之後,開啟implementation design之後選擇bitstream settings,其中在"configure additional bitstream settings"中的configuration欄中,有如下屬性選擇項。

圖 5專用io

所有的專用配置引腳全部位於bank0,包括cfgbvs、m[2:0]、tck、tms、tdi、tdo、proram_b、init_b、done以及cclk。專用引腳的含義就是無論在配置過程中還是配置完成之後,這些引腳無論在什麼階段都只用於配置。

所以對於這些引腳考慮相對比較簡單,分為輸入訊號和輸出訊號。輸入訊號的狀態始終保持lvcmos電平標準,電壓值為vcco(輸入訊號為什麼也有電平標準要求,需要與input buffer的供電電壓相匹配,見圖 2)。輸出訊號的狀態始終保持lvcmos電平標準,電壓為vcco,12ma drive,fast slew rate。

功能復用io

相比於其他引腳,功能復用引腳的情況是最複雜的,這些管腳包括與配置相關的pudc_b、emcclk、csi_b、cso_b、dout、rdwr_b、d00_mosi、d01_din、d[00-31]、a[00-28]、fcs_b、foe_b、few_b、adv_b、rs0以及rs1;以及與system monitor相關的ad0p至ad15p、ad0n至ad15n,i2c_sda以及i2c_sclk。

為了說清楚功能復用管腳在不同階段的狀態,將復用管腳分為以下幾類:

在當前所選擇的功能中使用到的功能復用管腳,例如在選擇bpi配置時的d[00-31]和a[00-28]。

在當前所選擇的功能中沒有使用到的功能復用管腳。例如在選擇spi配置時的d[00-31]和a[00-28]。

在完成配置之前需要作為輸出或者雙向,總之有可能向外輸出訊號的管腳,例如i2c_sda和i2c_sclk。

配置完成之前

在fpga上電至配置完成之前的這段時間內,前面列出的第一類引腳,即在當前所選擇的功能中使用到的功能復用管腳,狀態等同於專用配置io管腳。輸入訊號的狀態始終保持lvcmos電平標準,電壓值為vcco。輸出訊號的狀態始終保持lvcmos電平標準,電壓為vcco,12ma drive,fast slew rate。

前面列出的第二類引腳,即在當前所選擇的功能中沒有使用到的功能復用管腳,視同於普通io,其狀態受到hswapen或者pudc_b訊號的控制,決定是高阻還是連線弱上拉電阻。

第三類引腳的情況比較複雜,目前所知的只有i2c_sda和i2c_sclk,這兩個訊號會在配置完成前出現一些不確定的狀態。所以如果fpga的io還有富餘,並且要求所有連線到外部的引腳有確定的狀態,那麼最好不要使用這兩個引腳作為連線外設的io。

配置完成之後

在fpga配置完成之後,前面提到的三種引腳會被分成另外三類:

第一類是在使用者設計中明確配置了需要保留的功能引腳,例如對於配置相關的引腳設定了persist option屬性,這種情況下這些引腳會繼續保持之前與配置相關的功能,其狀態為輸入訊號的狀態始終保持lvcmos電平標準,電壓值為vcco。輸出訊號的狀態始終保持lvcmos電平標準,電壓為vcco,12ma drive,slow slew rate。再例如設計中使用了sysmon,i2c_sda和i2c_sclk引腳則繼續保持drp i2c的功能。

第二類是在使用者設計配置中沒有要求保留其特殊功能,這些引腳在配置完成之後會變成普通io,且在使用者設計中沒有使用到的io。這些io相當於unassigned io,如前所述,這些io在配置完成之後的狀態受到相應設定的影響,可以是上拉、下拉或者floating。

FPGA上電後IO的預設狀態

在進行fpga硬體設計時,引腳分配是非常重要的乙個環節,特別是在硬體電路上需要與其他晶元通行的引腳。xilinx fpga從上電之後到正常工作整個過程中各個階段引腳的狀態,會對硬體設計 引腳分配產生非常重要的影響。這篇專題就針對fpga從上電開始 配置程式,到正常工作整個過程中所有io的狀態進行分析...

關於GPIO的上電復位後預設輸出電平的影響

關於gpio的上電復位後預設輸出電平的影響 如果需要gpio對某個模組的控制,比如振動馬達的震動使能控制,lcd的背光使能控制,閃光燈的使能控制,耳機和喇叭功率放大器的輸出控制。這些模組都比較敏感。如果gpio的選擇不恰當就會引起上電的時候,cpu復位後 還沒有執行到gpio的初始化模組的前面一段時...

51系列微控制器IO引腳的驅動能力與上拉電阻分析

微控制器輸出低電平時,將允許外部器件,向微控制器引腳內灌入電流,這個電流,稱為 灌電流 外部電路稱為 灌電流負載 微控制器輸出高電平時,則允許外部器件,從微控制器的引腳,拉出電流,這個電流,稱為 拉電流 外部電路稱為 拉電流負載 這些電流一般是多少?最大限度是多少?這就是常見的微控制器輸出驅動能力的...