1、DDIO用法
2、時(shí)鐘輸出
3、Efinity處理三態(tài)端口問題
4、PLL的添加
5、HSIO的解串器用法
1、DDIO用法
對(duì)于輸入輸出IO很多時(shí)候會(huì)用到DDIO的用法。對(duì)于DDIO,就是時(shí)鐘的雙沿采集或者發(fā)送數(shù)據(jù),所以必須要用到寄存器。它的設(shè)置也比較簡(jiǎn)單,在intefaceDesigner中添加GPIO,并把register Option設(shè)置為register,另外要設(shè)置Double Data IO Option模式,分別為normal和resync。
下圖是易靈思的GPIO的結(jié)構(gòu)。
對(duì)應(yīng)上圖我們以O(shè)DDIO為例,分別標(biāo)出了reg1,reg2和reg3三個(gè)寄存 器。當(dāng)OUT0為上升沿的觸發(fā)信號(hào),即HI,OUT1為下降沿的觸發(fā)信號(hào),即LO。當(dāng)DDIO模式設(shè)置為Normal mode時(shí),OUT1經(jīng)過reg3輸出;當(dāng)設(shè)置為Resync mode時(shí)OUT1經(jīng)過了reg2和reg3,reg2用于對(duì)數(shù)據(jù)打一拍來對(duì)齊數(shù)據(jù),下面是數(shù)據(jù)的輸出波形。
我們只需要在top模塊中添加相應(yīng)信號(hào)即可以用于控制:
module DDIO_Test(
...
otuputoddio_HI,
output oddio_LO,
...
);
下圖為數(shù)據(jù)輸入時(shí)的波形,分別對(duì)應(yīng) Normal和Resync mode。
2、時(shí)鐘輸出
易靈思所有的GPIO都可以用作時(shí)鐘輸出。這里我們提供兩種時(shí)鐘輸出方式。
方法一:把時(shí)鐘設(shè)置為clkout模式。下圖選自鈦金系列ds上的IO框圖 。從圖片上可以看到OUTCLK的路徑。
在添加 GPIO時(shí),設(shè)置Mode為clkout,并在output Clock中輸入時(shí)鐘名。
這里需要 注意的是,時(shí)鐘名不能從core直接輸出,而只能使用interface中使用的時(shí)鐘,如PLL輸出的時(shí)鐘或者GCLK輸入的時(shí)鐘。比如我們?cè)诖a中定義了一個(gè)IO,如下:
module clk_test(
...
output clk_100m,
...
);
如果直接把代碼中定義的clk_100m直接配置給interface的GPIO,這時(shí)軟件會(huì)報(bào)錯(cuò)。
方法二:
通過DDIO的方式設(shè)置時(shí)鐘輸出。IO模式設(shè)置為output,并打開Register Option及Double Data I/O Option,并指定時(shí)鐘。
程序內(nèi)部分別對(duì)DDIO的高低位分部賦值為1或者0.
assign clk_out_inst_HI = 1'b1;
assign clk_out_inst_LO=1'b0;
對(duì)于兩種方式的使用,Trion有很大一部分的GPIO不支持DDIO,只能使用第一種方式,鈦金所有的GPIO都支持DDIO;另外在源同步時(shí)鐘數(shù)據(jù)輸出時(shí),DDIO的方式可以保證數(shù)據(jù)和時(shí)鐘的延時(shí)一致,所以易靈思推薦使用DDIO的方式。
3、Efinity處理三態(tài)端口問題
我們?cè)谔幚砣龖B(tài)門時(shí)一般都是用下面的語句;
inout bidr_pad;
wirein;
wire out;
wireo_oe;
assign bidr_pad= o_en ? out :z;
assignin=bidr_pad;
其實(shí)它對(duì)應(yīng)的硬件結(jié)構(gòu)就是下面的框圖。它涉及到3個(gè)信號(hào):in,out,o_en。
當(dāng)o_en = 1時(shí),out可以通過out buf輸出到pad上,同時(shí)會(huì)反饋到in;
當(dāng)o_en = 0時(shí),out buf就是高阻態(tài)。in的信號(hào)就是通過外部pad通過in buf輸入進(jìn)來。
最初使用Efinity,因?yàn)榧軜?gòu)差異,很多人被inout的使用難住了。這里來說明一下。在易靈思的產(chǎn)品架構(gòu)中,原有的rtl代碼都是針對(duì)fabric的,也就邏輯部分。而IO被認(rèn)為是外設(shè)。如下圖I/O Buffer部分相對(duì)于fabric是外設(shè),它是在Efinity的interface Designer中設(shè)置的。這樣在rtl只需要定義:
inputin;
outputout;
output o_oe;
有了上面的認(rèn)知,我們就容易理解在efinity中怎樣添加三態(tài)。
添加三態(tài)門的過程如下:
我們?cè)趇nterface中添加一個(gè)gpio,命名為sda,把Mode選擇為inout,
點(diǎn)擊show/Hide GPIO Resource Assigner,打開IO分配界面分配IO.
點(diǎn)擊保存和Generate Efintiy Constraint Files.
打開工程面板下面的Result下的xxx_template.v,可以看到里面添加了
Inputsda_IN,
output sda_OE,
output sda_OUT
三個(gè)信號(hào),把這三個(gè)信號(hào)復(fù)制到工程文件的頂層中去,這樣就定義好了一個(gè)inout,可以直接全用了。
另外如果要添加IO寄存可以根據(jù)實(shí)際需要去選擇,同時(shí)要注意為寄存器選擇準(zhǔn)確的時(shí)鐘。
這樣就不用再寫assign sda = oe ? sda_out :z; 這樣的語句,因?yàn)閛e就是sda_OE, sda_out對(duì)應(yīng)的就是接口生成的sda_OUT。
在Efinity的.v文件中不支持inout 雙向口的定義,另外Efinity也不支持‘z’這種定義。
4、PLL的添加
易靈思的FPGA在生成PLL的方式與別的廠家稍有區(qū)別,這與其的core和interface架構(gòu)是相對(duì)應(yīng)的。對(duì)于易靈思的FPGA來講,PLL,GPIO,MIPI,LVDS和DDR相對(duì)于core部分都是外設(shè)。而這些外設(shè)的設(shè)置都是在interface designer中的。下面以pll的添加為例,對(duì)于trion系列的設(shè)置簡(jiǎn)單說明。鈦金系列會(huì)稍微的區(qū)別,但是只要了解了一個(gè),另一個(gè)都是大同小異的。
一、PLL的添加
(1)打開interface desinger。
(2)選擇pll右擊選擇Createblock,就可以添加pll
(3)這里我們把pll的例化名修改為pll_inst,并且按回車(必須回車)。
PLL resource對(duì)應(yīng)PLL的位置,這也是易靈思的PLL使用與別家有區(qū)別的地方,必須要指定PLL的位置。
clock source是指pll參考時(shí)鐘的源來自哪里,包括外部和內(nèi)部。
External clock:指示參考時(shí)鐘的源,包括參考時(shí)鐘0,參考時(shí)鐘1。
(4)點(diǎn)擊Automated Clock Calculation打開時(shí)鐘設(shè)置界面。trion最多可以設(shè)置3個(gè)時(shí)鐘,紅包框中的箭頭和x可以用于打開和關(guān)閉相應(yīng)的時(shí)鐘。
(5)設(shè)置完成上面的操作之后,我們需要指定PLL的參考時(shí)鐘來源。從ds上我們可以看到PLL_BL0有兩個(gè)時(shí)鐘源,分別是REFCLK0和REFCLK1,分別對(duì)應(yīng)GPIOL_15_PLLIN0和GPIOL_19_PLLIN1。
然后再添加PLL的參考時(shí)鐘腳,這里我們例化為pll_ref_clk,并要把connection Type設(shè)置為pll_clkin。并分配到GPIOL_15_PLLIN0上,因?yàn)樯厦孢x擇了External Clock0。這樣PLL的設(shè)置就差不多了。
二、關(guān)于時(shí)鐘源
在選擇clock source時(shí),有三個(gè)選項(xiàng),分別是external, core和dynamic。
external好理解,就是參考時(shí)鐘從外部IO進(jìn)入的,上面的設(shè)置就是。
core是指時(shí)鐘從FPGA內(nèi)部給PLL的參考,比如一個(gè)PLL的輸出給另一個(gè)PLL做參考時(shí),第二個(gè)PLL的參考就是設(shè)置成core,或者從GCLK進(jìn)入FPGA再環(huán)到PLL的輸入。
至于Dynamic Clock就是動(dòng)態(tài)輸入選擇,支持多路選擇,如下圖,可以支持兩個(gè)core和兩個(gè)external時(shí)鐘。但是因?yàn)镻LL不支持動(dòng)態(tài)重配置,所以這個(gè)功能應(yīng)用有限。
三、PLL的反饋方式
PLL有三種反饋,core,Local和internal。
從下面的圖來看,不同的反饋位置是不一樣的。core的反饋路徑是從FPGA的core內(nèi)部來反饋,可以保證輸入時(shí)鐘與輸出時(shí)鐘同頻同相。這在源同步設(shè)計(jì)中是很有用的。而local和internal可以支持輸出更多的頻率,大家可以在操作中發(fā)現(xiàn)如果是core反饋的話,有些頻率是設(shè)置不出來的,而local和interanl卻可以。
上面描述其實(shí)描述相對(duì)粗糙,語句什么的也沒有太去考慮措辭,花半個(gè)小時(shí)BB下,能用起來就行,如果實(shí)在有看不懂的,歡迎留言。
5、HSIO的解串器用法
在interface中添加一個(gè)IO,注意要分給HSIO,HVIO是不支持4位解器的。這里我們定義一個(gè)iserdes3的GPIO,方向?yàn)檩斎搿?/p>
在GPIO的屬性中,打開register,再打開Enable Deserialization就打開了解串器。Serial Clock Pin Name和Clock分別對(duì)應(yīng)解串器的串行和并行時(shí)鐘,需要指出的是在使用解串器時(shí)不能打開DDIO功能,所以串行時(shí)鐘和并行時(shí)鐘的關(guān)系只是能是4倍關(guān)系。
假如串行時(shí)鐘是100MHz,那么轉(zhuǎn)換成的4位并行數(shù)據(jù)就降速到25MHz。
在設(shè)置對(duì)應(yīng)時(shí)鐘時(shí)會(huì)有相位的要求。如果同相位會(huì)提示錯(cuò)誤信息。
保存并點(diǎn)擊生成約束之后,在生成的template文件中就可以看到生成的IO端口已經(jīng)變成4位位寬。
(* syn_peri_port = 0 *) input [3:0] iserdes3,
-
Interface
+關(guān)注
關(guān)注
0文章
103瀏覽量
38613 -
desinger
+關(guān)注
關(guān)注
0文章
1瀏覽量
3426
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論