來(lái)源:數(shù)字站
前面在講解HDMI接口之前,講解過(guò)IDDR、ODDR、OSERDESE2、IBUF等原語(yǔ),之后一直有讀者在問(wèn)什么時(shí)候更新ISERDESE2這個(gè)原語(yǔ)。前文講解過(guò)這些原語(yǔ)都在HDMI或者RGMII中使用過(guò),但是ISERDESE2這個(gè)原語(yǔ)目前我的板子除了HDMI輸入,其余并不會(huì)使用到,所以當(dāng)時(shí)就沒(méi)有出。
最近在網(wǎng)上看并沒(méi)有用戶對(duì)ISERDESE2的使用講解的很清晰,所以本文就通過(guò)手冊(cè)、仿真和ILA去講解一下這個(gè)原語(yǔ)的使用方式,希望對(duì)大家的使用有所幫助。
01ISERDESE2的功能
ISERDESE2就是一個(gè)串并轉(zhuǎn)換的模塊,支持單沿或者雙沿傳輸數(shù)據(jù),其實(shí)ISERDESE2和IDDR使用的是同一個(gè)器件,所以均有雙沿轉(zhuǎn)單沿的功能,這可以在vivado綜合后的布局布線中查看,也是同一管腳輸入的信號(hào)不能同時(shí)使用IDDR和ISERDESE2的原因。
理想情況如下圖所示,并行輸出的數(shù)據(jù)就剛好被ISERDESE2采集,進(jìn)而完成串并轉(zhuǎn)換,然而真實(shí)情況是這樣嗎?
圖1 理想情況串并轉(zhuǎn)換
由于器件上電和初始化等等原因,實(shí)際的情況更可能如下圖所示,并串轉(zhuǎn)換模塊工作時(shí),串并轉(zhuǎn)換模塊還沒(méi)有工作,導(dǎo)致并串轉(zhuǎn)換模塊輸出的前幾個(gè)數(shù)據(jù)丟失,下圖中前面黑框中三個(gè)串行數(shù)據(jù)丟失。
此時(shí)串并轉(zhuǎn)換模塊就只能從后面黃色框中依次取八個(gè)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,由此轉(zhuǎn)換出的數(shù)據(jù)會(huì)是正常的數(shù)據(jù)?
顯然不是,因此在串并轉(zhuǎn)換模塊正常工作的初期,往往需要對(duì)轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行判斷,如果轉(zhuǎn)換后的數(shù)據(jù)不對(duì),則需要將ISERDESE2轉(zhuǎn)換的起始位置更改,直到轉(zhuǎn)換后的數(shù)據(jù)正確為止,之后數(shù)據(jù)的數(shù)據(jù)才是有效的。
這個(gè)校準(zhǔn)的過(guò)程需要用戶通過(guò)ISERDESE2的BITSLIP引腳去完成,在校準(zhǔn)的過(guò)程中,輸入端必須一直循環(huán)輸入一個(gè)校準(zhǔn)序列,就像下圖中一直輸入8’h5c和8’h82組成的序列一樣,這是相對(duì)于其他原語(yǔ)會(huì)難一點(diǎn)的地方。
圖2 真實(shí)情況串并轉(zhuǎn)換
通過(guò)上面知道了ISERDESE2原語(yǔ)需要解決的問(wèn)題后,下面就通過(guò)手冊(cè)講解原語(yǔ)的各個(gè)端口以及參數(shù),后面通過(guò)仿真驗(yàn)證前面所說(shuō)的原因。
02 ISERDESE2原語(yǔ)端口及參數(shù)
PART2.1
ISERDESE2端口信號(hào)
下圖是ISERDESE2的框圖。
圖3 ISERDESE2框圖
Q1~Q8:ISERDESE2模塊的并行輸出數(shù)據(jù),其中Q8是最先輸入的串行數(shù)據(jù)位。一個(gè)ISERDESE2塊最多輸出8位并行數(shù)據(jù),在DDR雙沿采樣模式下,兩個(gè)ISERDESE2塊級(jí)聯(lián)可以輸出10位和14位并行數(shù)據(jù)。
Q8是接收到的最低位數(shù)據(jù),如下圖所示,OSERDESE2將8位從高到低為HGFEDCBA的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出,最先輸出最低位D1的值A(chǔ)。當(dāng)ISERDESE2塊接收串行數(shù)據(jù)時(shí),Q1出現(xiàn)最高位,Q8出現(xiàn)最低位。
圖4 ISERDESE2接收數(shù)據(jù)
端口O:由圖3知,該端口直接連接到串行輸入的幾個(gè)端口,并沒(méi)有經(jīng)過(guò)ISERDESE2核心邏輯,可以把D或DDLY的數(shù)據(jù)直接輸出。
SHIFTIN1、SHIFTIN2、SHIFTOUT1和SHIFTOUT2與OSERDESE2中該信號(hào)的原理一致,都是在兩個(gè)OSERDESE2級(jí)聯(lián)的時(shí)候,把從OSERDESE2的SHIFTOUT與主OSERDESE2的SHIFTIN連接。
ISERDESE2的輸入可以來(lái)自FPGA的管腳,即D端輸入信號(hào)。也可以來(lái)自IDELAYE2的輸出,即DDLY端口作為輸入。還可以來(lái)自O(shè)SERDESE2的輸出,即OFB作為輸入,與OSERDESE2連接方式如下所示,兩個(gè)器件的OFB信號(hào)相連即可。
圖5 ISERDESE2與OSERDESE2連接
ISERDESE2與OSERDESE2連接時(shí)需要添加“OFB_USED = TRUE ”屬性,并且ISERDESE2和OSERDESE2的DATA_RATE、DATA_WIDTH參數(shù)必須設(shè)置一致。
高速時(shí)鐘輸入CLK,與串行數(shù)據(jù)流對(duì)齊。
輔助時(shí)鐘輸入CLKB,在MEMORY_QDR模式下,CLKB應(yīng)連接到唯一的相移時(shí)鐘,其余模式下,CLKB連接到CLK取反信號(hào)。
分頻時(shí)鐘CLKDIV,用于驅(qū)動(dòng)串并轉(zhuǎn)換器、Bitslip子模塊和CE模塊的輸出,與輸出的并行數(shù)據(jù)對(duì)齊。
在SDR模式下,如果輸出的X位并行數(shù)據(jù),那么CLKDIV的頻率是CLK頻率的1/X,如果是DDR模式,則CLKDIV的頻率是CLK頻率的2/X。
手冊(cè)要求CLK和CLKDIV的相位必須對(duì)齊,一般推薦兩種連接方式,一種如下所示,時(shí)鐘輸入管腳通過(guò)BUFIO之后直接作為串行輸入數(shù)據(jù)的時(shí)鐘信號(hào),BUFIO優(yōu)點(diǎn)就是路徑短,延時(shí)小,缺點(diǎn)就是只能驅(qū)動(dòng)當(dāng)前時(shí)鐘區(qū)域的IDDR和ISERDESE2的時(shí)鐘管腳。而并行時(shí)鐘需要通過(guò)BUFR進(jìn)行分頻,分頻系數(shù)根據(jù)并行數(shù)據(jù)位寬和工作模式確定。
關(guān)于BUFIO和BUFR的相關(guān)使用,可以查看前文關(guān)于時(shí)鐘資源相關(guān)原語(yǔ)的講解,清晰講解過(guò)BUFG、BUFIO、BUFR、BUFH、BUFMR的使用。
圖6 時(shí)鐘推薦
另一種就是通過(guò)同一個(gè)MMCM產(chǎn)生CLK和CLKDIV兩路時(shí)鐘信號(hào),這種方式更常用。原因是BUFIO和BUFR需要用戶提供高頻串行時(shí)鐘,如果需要幾百M(fèi)的串行時(shí)鐘,顯然用戶的外部晶振一般是無(wú)法提供的。
時(shí)鐘使能CE1和CE2,與參數(shù)NUM_CE的值有關(guān)。當(dāng)NUM_CE為1時(shí),使用CE1作為時(shí)鐘使能信號(hào)。當(dāng)NUM_CE為2時(shí),當(dāng)CLK_DIV為低電平時(shí),CE2作為時(shí)鐘使能信號(hào),當(dāng)CLK_DIV為高電平時(shí),CE1作為時(shí)鐘使能信號(hào),對(duì)應(yīng)真值表如下圖所示。
圖7 輸入時(shí)鐘使能模塊
BITSLIP引腳在高電平時(shí)執(zhí)行與CLKDIV同步的移位操作,后文詳解。
RST復(fù)位信號(hào),高電平有效,推薦退出復(fù)位時(shí)間與CLKDIV同步。
過(guò)采樣模式時(shí)鐘OCLK,僅當(dāng)INTERFACE_TYPE設(shè)置不為NETWORKING,才會(huì)使用OCLK時(shí)鐘。
PART2.2
ISERDESE2原語(yǔ)參數(shù)
上述就是ISERDESE2原語(yǔ)相關(guān)的端口信號(hào),下面講解ISERDESE2原語(yǔ)的參數(shù)。
DATA_RATE用于設(shè)置ISERDESE2工作模式,可選擇單沿工作模式(SDR)和雙沿工作模式(DDR),默認(rèn)DDR模式。
DATA_WIDTH用于設(shè)置輸出并行數(shù)據(jù)位寬,取決于DATA_RATE和INTERFACE_TYPE的設(shè)置。如下圖所示,SDR模式下可以設(shè)置為2、3、4、5、6、7、8。DDR模式下單個(gè)ISERDESE2塊只能設(shè)置為4、6、8,兩個(gè)ISERDESE2塊級(jí)聯(lián)可以設(shè)置為10、14。
圖8 支持的數(shù)據(jù)寬度
INTERFACE_TYPE參數(shù)決定ISERDESE2是配置為內(nèi)存模式還是網(wǎng)絡(luò)模式。可選的值有MEMORY、MEMORY_DDR3、MEMORY_QDR、OVERSAMPLE、NETWORKING,默認(rèn)模式是MEMORY,常用NETWORKING模式。
NUM_CE參數(shù)定義使用的時(shí)鐘使能(CE1和CE2)數(shù)量,可設(shè)為1和2(默認(rèn)值為2)。
OFB_USED參數(shù)使能從OSERDESE2的OFB引腳到ISERDESE2 OFB引腳的路徑,禁用外部管腳輸入D和IDELAYE2的輸入DLY。
當(dāng)使用DDR模式進(jìn)行10位或者14位并行數(shù)據(jù)轉(zhuǎn)換時(shí),需要將兩個(gè)模塊級(jí)聯(lián),此時(shí)需要通過(guò)參數(shù)SERDES_MODE確定哪個(gè)是主ISERDESE2,哪個(gè)是從ISERDESE2。
INIT_Qn用于設(shè)置第n個(gè)采樣寄存器的初始值,而SRVAL_Qn用于設(shè)置復(fù)位第n個(gè)采樣寄存器后的值。
由圖3知D和DDLY都是ISERDESE2的專用輸入,D直接連接到IOB(直接與管腳相連),DDLY直接連接到IDELAYE2(在ISERDESE2和管腳之間有IDELAYE2加入延遲)。
允許用戶把延遲或非延遲的外部管腳輸入信號(hào)作為ISERDESE2輸入,通過(guò)參數(shù)IOBDELAY確定D和DDLY哪個(gè)作為ISERDESE2的輸入,下圖是IOBDELAY參數(shù)與輸入信號(hào)的關(guān)系,經(jīng)常設(shè)置位NONE,將外部管腳信號(hào)作為ISERDESE2串行數(shù)據(jù)輸入。
圖9 IOBDELAY參數(shù)值
03位滑塊(BITSLIP)
這個(gè)信號(hào)就是進(jìn)行校準(zhǔn)的關(guān)鍵信號(hào),如果沒(méi)有這個(gè)信號(hào),那么ISERDESE2的輸出數(shù)據(jù)其實(shí)沒(méi)有意義,很大可能是錯(cuò)誤的。
通過(guò)拉高ISERDESE2模塊的Bitslip信號(hào),輸入的串行數(shù)據(jù)流在并行端重新排序,Bitslip與CLKDIV同步。
下圖說(shuō)明了SDR和DDR模式下位滑移操作對(duì)數(shù)據(jù)采樣的影響,ISERDESE2的數(shù)據(jù)寬度是八。在SDR模式下,每次Bitslip拉高都會(huì)導(dǎo)致輸出數(shù)據(jù)左移一位。在DDR模式下,每次Bitslip拉高都會(huì)導(dǎo)致輸出數(shù)據(jù)在右移1位和左移3位之間交替變化。
圖10 位滑移操作示例
上述操作其實(shí)可以看成下圖所示的操作,上電后因?yàn)槌跏蓟Y(jié)束比較晚等原因,ISERDESE2錯(cuò)過(guò)了下圖黑框中前三位數(shù)據(jù)的采集時(shí)刻,從紅框處開(kāi)始取數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
圖11 采集數(shù)據(jù)
轉(zhuǎn)換結(jié)果為8’he4,并不是8’h5c或者8’h82,此時(shí)將Bitslip拉高一個(gè)CLKDIV時(shí)鐘周期,則ISERDESE2會(huì)將下次采集數(shù)據(jù)的位置向后移動(dòng)一位,如下圖所示。
本來(lái)第二次轉(zhuǎn)換應(yīng)該從下圖中天藍(lán)色方框開(kāi)始,因?yàn)锽itslip拉高一個(gè)時(shí)鐘,就會(huì)將開(kāi)始位置向后移動(dòng)一位,從紅框處開(kāi)始轉(zhuǎn)換,轉(zhuǎn)換結(jié)果繼續(xù)與目標(biāo)結(jié)果對(duì)比,如果不是,則繼續(xù)拉高Bitslip,直到ISERDESE2的輸出是8’h5c或者8’h82為止。
圖12 采集數(shù)據(jù)
其實(shí)用戶并不需要關(guān)心Bitslip為高電平后,SDR和DDR模式下,輸出數(shù)據(jù)怎么移動(dòng),只需要在這段校準(zhǔn)的時(shí)間內(nèi)保證輸入串行數(shù)據(jù)一直都是8’h5c或者8’h82即可,然后去檢測(cè)ISERDESE2的輸出是不是8’h5c或者8’h82,不是則拉高Bitslip將轉(zhuǎn)換開(kāi)始的位置移動(dòng),直到找到開(kāi)始轉(zhuǎn)換的位置為止。
只有當(dāng)ISERDESE2處于網(wǎng)絡(luò)模式(NETWORKING)下,位滑塊(BITSLIP)才可用。Bitslip每次只能拉高一個(gè)CLKDIV周期,不能在兩個(gè)CLKDIV周期內(nèi)連續(xù)拉高Bitslip信號(hào)。
在SDR和DDR模式下,從ISERDESE2檢測(cè)到Bitslip的高電平開(kāi)始,到ISERDESE2把Bitslip移動(dòng)后的數(shù)據(jù)輸出到Q1–Q8引腳為止,延遲時(shí)間為兩個(gè)CLKDIV周期。
在分析接收到的數(shù)據(jù)模式并可能發(fā)出下一個(gè)Bitslip命令之前,用戶邏輯應(yīng)在SDR模式下等待至少兩個(gè)CLKDIV周期,在DDR模式下等待至少三個(gè)CLKDIV周期。
綜上Bitslip拉高后,需要等待至少三個(gè)時(shí)鐘周期,才能檢測(cè)并行輸出結(jié)果是否與預(yù)期一致,進(jìn)而確定是否通過(guò)拉高Bitslip信號(hào)繼續(xù)調(diào)整輸出。
下圖是4位并行數(shù)據(jù)的DDR模式下Bitslip的時(shí)序圖,數(shù)據(jù)(D)重復(fù)的4位串行數(shù)據(jù)ABCD。ABCD可能以四種方式出現(xiàn)在ISERDESE2的Q1–Q4并行輸出端:ABCD、BCDA、CDAB和DABC,只有ABCD才是正確的輸出。
拉高Bitslip信號(hào)選擇所需的對(duì)齊方式(ABCD),下圖顯示了Bitslip的時(shí)序以及ISERDESE2并行輸出Q1–Q4的校準(zhǔn)時(shí)序。
圖13 DDR Bitslip功能圖
注意上圖在Bitslip拉高后的第三個(gè)時(shí)鐘,Q4-Q1才輸出移位后的轉(zhuǎn)換結(jié)果,與前文的延時(shí)一致。
04代碼設(shè)計(jì)
本文利用OSERDESE2和ISERDESE2回環(huán),來(lái)驗(yàn)證前文所講ISERDESE2和Bitslip的功能。ISERDESE2采用網(wǎng)絡(luò)模式(NETWORKING),選擇DDR的串行采樣方式,并行數(shù)據(jù)位寬為8位。
OSERDESE2相關(guān)模塊如下圖所示,用于產(chǎn)生測(cè)試的并行數(shù)據(jù),然后轉(zhuǎn)換為串行數(shù)據(jù),對(duì)應(yīng)代碼如下所示。
通過(guò)一個(gè)計(jì)數(shù)器cnt,上電后前64個(gè)時(shí)鐘周期用于產(chǎn)生用于校準(zhǔn)的序列,為8’h5c和8’h82交替發(fā)送的串行序列。當(dāng)校準(zhǔn)序列發(fā)送完畢后,通過(guò)m序列生成偽隨機(jī)數(shù)據(jù)用于測(cè)試。
//--############################################################################################### //--# //--# File Name : oserdese2_ctrl //--# Designer : 數(shù)字站 //--# Tool : Vivado 2021.1 //--# Design Date : 2024.4.4 //--# Description : 并串轉(zhuǎn)換數(shù)據(jù)生成模塊; //--# Version : 0.0 //--# Coding scheme : GBK(If the Chinese comment of the file is garbled, please do not save it and check whether the file is opened in GBK encoding mode) //--# //--############################################################################################### module oserdese2_ctrl( input clk ,//系統(tǒng)時(shí)鐘信號(hào); input clk_div , input rst ,//系統(tǒng)復(fù)位信號(hào),高電平有效; output ofb //直連iserdese2的OFB管腳。 ); reg flag ;// reg [7:0] cnt ;// reg [7:0] din ;// //輔助生成測(cè)試信號(hào); always@(posedge clk_div)begin if(rst)begin//初始值為0; flag<=?1'b0; ? ? ? ? end ? ? ? ??else?begin ? ? ? ? ? ? flag?<=?~flag; ? ? ? ? end ? ? end ? ?? ? ??//用于對(duì)校準(zhǔn)序列個(gè)數(shù)進(jìn)行計(jì)數(shù)。 ? ? always@(posedge clk_div)begin ? ? ? ??if(rst)begin//初始值為0; ? ? ? ? ? ? cnt?<=?'d0; ? ? ? ? end ? ? ? ??else?if(&cnt)begin ? ? ? ? ? ? cnt?<=?cnt; ? ? ? ? end ? ? ? ??else?begin ? ? ? ? ? ? cnt?<=?cnt?+?1; ? ? ? ? end ? ? end ? ??//生成用于校準(zhǔn)的循環(huán)數(shù)據(jù); ? ? always@(posedge clk_div)begin ? ? ? ??if(rst)begin//初始值為0; ? ? ? ? ? ? din?<=?8'h82; ? ? ? ? end ? ? ? ??else?if(&cnt)begin//如果校準(zhǔn)序列發(fā)送完畢,則發(fā)送偽隨機(jī)信號(hào)用于測(cè)試。 ? ? ? ? ? ? din?<=?{(din[0]?^?din[4]?^?din[5]?^?din[6]),din[7:1]};//M序列公式為x^8+x^4+x^3+x^2+1。 ? ? ? ? end ? ? ? ??else?if(flag)begin//發(fā)送校準(zhǔn)序列8'h5c; ? ? ? ? ? ? din?<=?8'h5c; ? ? ? ? end ? ? ? ??else?begin//發(fā)送校準(zhǔn)序列8'h82. ? ? ? ? ? ? din?<=?8'h82; ? ? ? ? end ? ? end ? ??//例化主OSERDESE2原語(yǔ) ? ??OSERDESE2?#( ? ? ? ? .DATA_RATE_OQ? ?(?"DDR"? ? ?),// DDR, SDR ? ? ? ? .DATA_RATE_TQ? ?(?"DDR"? ? ?),// DDR, BUF, SDR ? ? ? ? .DATA_WIDTH? ? ?(?8? ? ? ? ?),// Parallel data width (2-8,10,14) ? ? ? ? .INIT_OQ? ? ? ? (?1'b0 ? ? ?),// Initial value of OQ output (1'b0,1'b1) ? ? ? ? .INIT_TQ? ? ? ? (?1'b0 ? ? ?),// Initial value of TQ output (1'b0,1'b1) ? ? ? ? .SERDES_MODE? ? (?"MASTER"? ),// MASTER, SLAVE ? ? ? ? .SRVAL_OQ? ? ? ?(?1'b0 ? ? ?),// OQ output value when SR is used (1'b0,1'b1) ? ? ? ? .SRVAL_TQ? ? ? ?(?1'b0 ? ? ?),// TQ output value when SR is used (1'b0,1'b1) ? ? ? ? .TBYTE_CTL? ? ? (?"FALSE"? ?),// Enable tristate byte operation (FALSE, TRUE) ? ? ? ? .TBYTE_SRC? ? ? (?"FALSE"? ?),// Tristate byte source (FALSE, TRUE) ? ? ? ? .TRISTATE_WIDTH?(?1? ? ? ? ?)?// 3-state converter width (1,4) ? ? ) ? ??OSERDESE2_inst?( ? ? ? ? .OFB? ? ? ? ( ofb ? ? ? ? ? ),// 1-bit output: Feedback path for data ? ? ? ? .OQ? ? ? ? ?( ? ? ? ? ? ? ? ),// 1-bit output: Data path output ? ? ? ??// SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each) ? ? ? ? .SHIFTOUT1? ( ? ? ? ? ? ? ? ), ? ? ? ? .SHIFTOUT2? ( ? ? ? ? ? ? ? ), ? ? ? ? .TBYTEOUT? ?( ? ? ? ? ? ? ? ),// 1-bit output: Byte group tristate ? ? ? ? .TFB? ? ? ? ( ? ? ? ? ? ? ? ),// 1-bit output: 3-state control ? ? ? ? .TQ? ? ? ? ?( ? ? ? ? ? ? ? ),// 1-bit output: 3-state control ? ? ? ? .CLK? ? ? ? ( clk ? ? ? ? ? ),// 1-bit input: High speed clock ? ? ? ? .CLKDIV? ? ?( clk_div ? ? ? ),// 1-bit input: Divided clock ? ? ? ??// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each) ? ? ? ? .D1? ? ? ? ?( din[0] ? ? ? ?), ? ? ? ? .D2? ? ? ? ?( din[1] ? ? ? ?), ? ? ? ? .D3? ? ? ? ?( din[2] ? ? ? ?), ? ? ? ? .D4? ? ? ? ?( din[3] ? ? ? ?), ? ? ? ? .D5? ? ? ? ?( din[4] ? ? ? ?), ? ? ? ? .D6? ? ? ? ?( din[5] ? ? ? ?), ? ? ? ? .D7? ? ? ? ?( din[6] ? ? ? ?), ? ? ? ? .D8? ? ? ? ?( din[7] ? ? ? ?), ? ? ? ? .OCE? ? ? ? (?1'b1 ? ? ? ? ?),// 1-bit input: Output data clock enable ? ? ? ? .RST? ? ? ? ( rst ? ? ? ? ? ),// 1-bit input: Reset ? ? ? ??// SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each) ? ? ? ? .SHIFTIN1? ?( ? ? ? ? ? ? ? ), ? ? ? ? .SHIFTIN2? ?( ? ? ? ? ? ? ? ), ? ? ? ??// T1 - T4: 1-bit (each) input: Parallel 3-state inputs ? ? ? ? .T1? ? ? ? ?(?1'b0 ? ? ? ? ?), ? ? ? ? .T2? ? ? ? ?(?1'b0 ? ? ? ? ?), ? ? ? ? .T3? ? ? ? ?(?1'b0 ? ? ? ? ?), ? ? ? ? .T4? ? ? ? ?(?1'b0 ? ? ? ? ?), ? ? ? ? .TBYTEIN? ? (?1'b0 ? ? ? ? ?),// 1-bit input: Byte group tristate ? ? ? ? .TCE? ? ? ? (?1'b0 ? ? ? ? ?) ?// 1-bit input: 3-state clock enable ? ? ); endmodule
為了方便后續(xù)上板測(cè)試,OSERDESE2的串行輸出信號(hào)和ISERDESE2串行輸入信號(hào)采用OFB直連,不需要經(jīng)過(guò)IOB,直接在芯片內(nèi)部進(jìn)行回環(huán)。
之后是ISERDESE2模塊,對(duì)應(yīng)的原語(yǔ)調(diào)用如下所示,采用DDR雙沿采集數(shù)據(jù)模式,啟用OFB作為串行輸入,將輸出Q8-Q1順序調(diào)換,使得ISERDESE2輸出并行數(shù)據(jù)與OSERDESE2并行輸入數(shù)據(jù)保持一致。
//例化主ISERDESE2原語(yǔ) ISERDESE2#( .DATA_RATE ("DDR" ),//DDR, SDR .DATA_WIDTH (8 ),//Parallel data width (2-8,10,14) .DYN_CLKDIV_INV_EN ("FALSE" ),//Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE) .DYN_CLK_INV_EN ("FALSE" ),//Enable DYNCLKINVSEL inversion (FALSE, TRUE) .INIT_Q1 (1'b0 ),// INIT_Q1 : Initial value on the Q outputs (0/1) .INIT_Q2 ( 1'b0 ),//INIT_Q2 : Initial value on the Q outputs (0/1) .INIT_Q3 (1'b0 ),// INIT_Q3 : Initial value on the Q outputs (0/1) .INIT_Q4 ( 1'b0 ),//INIT_Q4 : Initial value on the Q outputs (0/1) .INTERFACE_TYPE ("NETWORKING" ),//MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE .IOBDELAY ("NONE" ),//NONE, BOTH, IBUF, IFD .NUM_CE (2 ),//Number of clock enables (1,2) .OFB_USED ("TRUE" ),//Select OFB path (FALSE, TRUE) .SERDES_MODE ("MASTER" ),//MASTER, SLAVE .SRVAL_Q1 (1'b0 ),// SRVAL_Q1 : Q output values when SR is used (0/1) .SRVAL_Q2 ( 1'b0 ),//SRVAL_Q2 : Q outputvalueswhenSR is used (0/1) .SRVAL_Q3 (1'b0 ),// SRVAL_Q3 : Q output values when SR is used (0/1) .SRVAL_Q4 ( 1'b0 ) // SRVAL_Q4 : Q outputvalueswhenSR is used (0/1) ) ISERDESE2_inst ( .O ( ),//1-bit output: Combinatorial output .Q1 (q[7] ),//Q1 - Q8:1-bit (each) output: Registered data outputs .Q2 (q[6] ), .Q3 (q[5] ), .Q4 (q[4] ), .Q5 (q[3] ), .Q6 (q[2] ), .Q7 (q[1] ), .Q8 (q[0] ), .SHIFTOUT1 ( ),//SHIFTOUT1 :1-bit (each) output: Data width expansion output ports .SHIFTOUT2 ( ),//SHIFTOUT2 :1-bit (each) output: Data width expansion output ports .BITSLIP ( bitslip ),//1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to // CLKDIVwhenasserted (active High). Subsequently, the data seen on the Q1 // to Q8 output ports willshift, as in a barrel-shifter operation, one // position everytimeBitslip is invoked (DDR operation is different from SDR). .CE1 (1'b1 ),// CE1: 1-bit (each) input: Data register clock enable inputs .CE2 ( 1'b1 ),//CE2:1-bit (each) input: Data register clock enable inputs .CLKDIVP (1'b0 ),// 1-bit input: TBD // Clocks: 1-bit (each) input: ISERDESE2 clock input ports .CLK ( clk ),// 1-bit input: High-speed clock .CLKB ( ~clk ),// 1-bit input: High-speed secondary clock .CLKDIV ( clk_div ),// 1-bit input: Divided clock .OCLK ( 1'b0 ),//1-bit input: High speed output clock usedwhenINTERFACE_TYPE="MEMORY" // Dynamic Clock Inversions:1-bit (each) input: Dynamic clock inversion pins to switch clock polarity .DYNCLKDIVSEL(1'b0 ),// 1-bit input: Dynamic CLKDIV inversion .DYNCLKSEL ( 1'b0 ),//1-bit input: Dynamic CLK/CLKB inversion // Input Data:1-bit (each) input: ISERDESE2 data input ports .D (1'b0 ),// 1-bit input: Data input .DDLY ( 1'b0 ),//1-bit input: Serial data from IDELAYE2 .OFB ( ofb ),//1-bit input: Data feedback from OSERDESE2 .OCLKB (1'b0 ),// 1-bit input: High speed negative edge output clock .RST ( rst ),// 1-bit input: Active high asynchronous reset // SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports .SHIFTIN1 ( ), .SHIFTIN2 ( ) );之后需要對(duì)ISERDESE2并行輸出進(jìn)行校準(zhǔn),OSERDESE2產(chǎn)生的校準(zhǔn)序列是8’h5c和8’h82交替串行序列,因此ISERDESE2轉(zhuǎn)換結(jié)果也應(yīng)該是8’h5c或者8’h82。如果轉(zhuǎn)換結(jié)果不是這兩個(gè)數(shù)據(jù),那么將bitslip拉高一個(gè)時(shí)鐘周期,對(duì)應(yīng)代碼如下所示。
//當(dāng)沒(méi)有完成校準(zhǔn)時(shí),如果檢測(cè)到轉(zhuǎn)換結(jié)果與要求不一致,則把該信號(hào)拉高。 always@(posedge clk_div)begin if(rst)begin//初始值為0; bitslip<=?1'b0; ? ? ? ? end//當(dāng)沒(méi)有校準(zhǔn),且沒(méi)有處于校準(zhǔn)階段時(shí)檢測(cè)到串并轉(zhuǎn)換結(jié)果不為8'h5c或者8'h82時(shí)拉高; ? ? ? ? else if(((q != 8'h5c)?&&?(q?!=?8'h82)) && (~slip_flag) && (~bitslip) && (~dout_vld))begin ? ? ? ? ? ? bitslip <= 1'b1; ? ? ? ??end ? ? ? ??else?begin//其余時(shí)間拉低; ? ? ? ? ? ? bitslip?<=?1'b0; ? ? ? ? end ? ? end
Bitslip拉高之后,ISERDESE2輸出數(shù)據(jù)不是立即有效的,需要經(jīng)過(guò)幾個(gè)時(shí)鐘的轉(zhuǎn)換時(shí)鐘,手冊(cè)中說(shuō)SDR模式需要消耗2個(gè)時(shí)鐘,而DDR模式需要消耗三個(gè)時(shí)鐘。
為了方便設(shè)計(jì),此處直接使用一個(gè)位寬為2的計(jì)數(shù)器,每次bitslip拉高之后,等待4個(gè)時(shí)鐘,之后才對(duì)ISERDESE2的并行數(shù)據(jù)進(jìn)行檢測(cè),確定是否滿足要求,bitslip還是否需要拉高。
//滑塊計(jì)數(shù)器,因?yàn)閎itslip拉高后,輸出需要經(jīng)過(guò)一段時(shí)間才會(huì)有效,因此這段時(shí)間不能對(duì)輸出數(shù)據(jù)進(jìn)行讀取判斷。 always@(posedge clk_div)begin if(rst)begin//初始值為0; slip_cnt<=?'d0; ? ? ? ? end ? ? ? ? else if(slip_flag)begin//對(duì)bitslip拉高后的時(shí)鐘計(jì)數(shù)。 ? ? ? ? ? ? slip_cnt <= slip_cnt + 'd1; ? ? ? ??end ? ??end ? ?? ? ??//bitslip拉高后的標(biāo)志信號(hào),初始值為0,當(dāng)bitslip拉高時(shí)拉高,當(dāng)slip_cnt計(jì)數(shù)器計(jì)數(shù)到最大值時(shí)清零。 ? ? always@(posedge clk_div)begin ? ? ? ? if(rst)begin//初始值為0; ? ? ? ? ? ? slip_flag?<=?1'b0; ? ? ? ? end ? ? ? ? else if(&slip_cnt)begin ? ? ? ? ? ? slip_flag <= 1'b0; ? ? ? ??end ? ? ? ??else?if(bitslip)begin ? ? ? ? ? ? slip_flag?<=?1'b1; ? ? ? ? end ? ? end
在校準(zhǔn)階段ISERDESE2輸出可能會(huì)出現(xiàn)偶然結(jié)果,導(dǎo)致沒(méi)有校準(zhǔn)情況下,輸出的部分并行數(shù)據(jù)與校準(zhǔn)序列一致。為了避免這種情況,應(yīng)該多次檢測(cè)連續(xù)輸出數(shù)據(jù)均與校驗(yàn)數(shù)據(jù)一致時(shí),才認(rèn)為校準(zhǔn)完成。
因此需要一個(gè)計(jì)數(shù)器,對(duì)ISERDESE2輸出的正確數(shù)據(jù)進(jìn)行計(jì)數(shù),當(dāng)bitslip拉高或者處于拉高后的一段時(shí)間時(shí),證明前面檢測(cè)到的數(shù)據(jù)錯(cuò)誤,將計(jì)數(shù)器清零。
當(dāng)連續(xù)檢測(cè)CNT_NUM個(gè)數(shù)據(jù)均正確時(shí),認(rèn)為校準(zhǔn)完成,將計(jì)數(shù)器置為最大值,之后一直保持不變。
//轉(zhuǎn)換成功計(jì)數(shù)器,用于記錄校準(zhǔn)階段,當(dāng)校準(zhǔn)階段檢測(cè)到固定個(gè)連續(xù)有效數(shù)據(jù)時(shí),認(rèn)為校準(zhǔn)成功。 always@(posedge clk_div)begin if(rst)begin// cnt<=?0; ? ? ? ??end//當(dāng)在校準(zhǔn)階段時(shí),當(dāng)bitslip有效時(shí)拉高; ? ? ? ??else?if((slip_flag?||?bitslip)?&&?(~dout_vld))begin ? ? ? ? ? ? cnt?<=?0; ? ? ? ??end ? ? ? ??else?if(cnt?==?CNT_NUM?-?1)begin//當(dāng)檢測(cè)到固定校準(zhǔn)數(shù)據(jù)時(shí),計(jì)數(shù)器保持該數(shù)值。 ? ? ? ? ? ? cnt?<=?CNT_NUM?-?1; ? ? ? ??end ? ? ? ??else?if(add_cnt)begin ? ? ? ? ? ? cnt?<=?cnt?+?1; ? ? ? ??end ? ??end ? ?? ? ??//當(dāng)不處于移動(dòng)滑塊狀態(tài)且檢測(cè)到輸出數(shù)據(jù)為規(guī)定數(shù)據(jù)時(shí)加1. ? ? assign add_cnt?=?((q?==?8'h5c) || (q == 8'h82))?&&?(~slip_flag)?&&?(~bitslip); ? ?? ? ??//將轉(zhuǎn)換后的數(shù)據(jù)輸出,只有當(dāng)校準(zhǔn)完成后,輸出有效指示信號(hào)磁能拉高,表示輸出的數(shù)據(jù)有效。 ? ? always@(posedge clk_div)begin ? ? ? ? dout?<=?q; ? ? ? ? dout_vld?<=?(cnt?==?CNT_NUM?-?1); ? ??end
之后是頂層模塊的處理,對(duì)于串行時(shí)鐘和并行時(shí)鐘的處理方式有如下兩種,第一種是本時(shí)鐘區(qū)域的外部時(shí)鐘管腳輸入串行時(shí)鐘信號(hào),之后通過(guò)BUFIO作為ISERDESE2和OSERDESE2的串行時(shí)鐘信號(hào)。通過(guò)BUFR分頻輸出的時(shí)鐘作為ISERDESE2和OSERDESE2的并行數(shù)據(jù)時(shí)鐘信號(hào),對(duì)應(yīng)代碼如下所示。
但是這種方式仿真會(huì)出現(xiàn)錯(cuò)誤,OSERDESE2輸出的數(shù)據(jù)始終是不定態(tài),不知道為什么。另外要求輸入串行時(shí)鐘,然而串行時(shí)鐘一般頻率很高,用戶的晶振一般是提供不了的,因此這種方式不太常用。
//調(diào)用BUFIO; /*BUFIO u_BUFIO ( .O ( o_clk ),//1-bit output: Clock output (connectto I/O clock loads). .I ( clk ) //1-bit input: Clock input (connectto an IBUForBUFMR). ); //調(diào)用BUFR對(duì)時(shí)鐘進(jìn)行分頻; BUFR#( .BUFR_DIVIDE ("4" ),//Values:"BYPASS, 1, 2, 3, 4, 5, 6, 7, 8" .SIM_DEVICE ("7SERIES" ) //Must be set to"7SERIES" ) u_BUFR ( .O ( clk_div ),//1-bit output: Clock output port .CE (1'b1 ),//1-bit input: Active high, clock enable (Divided modes only) .CLR ( 1'b0 ),//1-bit input: Active high, asynchronous clear (Divided modes only) .I ( clk ) );*/另一種時(shí)鐘處理方式是使用同一個(gè)MMCM,生成串行時(shí)鐘和并行時(shí)鐘,對(duì)于輸入時(shí)鐘頻率沒(méi)有太大要求。本文外部輸入100MHz時(shí)鐘信號(hào)作為ISERDESE2和OSERDESE2的并行時(shí)鐘信號(hào),通過(guò)MMCM生成400MHz作為串行時(shí)鐘信號(hào)。對(duì)應(yīng)代碼如下所示:
clk_wiz_0u_clk_wiz_0( .clk_out1 ( clk_div_o ),//output clk_out1 .clk_out2 (clk ),//output clk_out2 .reset (rst ),//input reset .clk_in1 (clk_div )//input clk_in1 );
MMCM的輸出配置如下所示:
圖14 MMCM輸出配置
之后頂層模塊需要例化前面兩個(gè)模塊,對(duì)應(yīng)的完整代碼如下所示。
//例化并串轉(zhuǎn)換原語(yǔ); oserdese2_ctrlu_oserdese2_ctrl( .clk ( clk ),//系統(tǒng)時(shí)鐘信號(hào); .clk_div (clk_div_o ), .rst (rst ),//系統(tǒng)復(fù)位信號(hào),高電平有效; .ofb (oserdese_ofb ) ); //例化串并轉(zhuǎn)換原語(yǔ); iserdese2_ctrlu_iserdese2_ctrl( .clk ( clk ),//系統(tǒng)時(shí)鐘信號(hào); .clk_div (clk_div_o ), .rst (rst ),//系統(tǒng)復(fù)位信號(hào),高電平有效; .ofb (oserdese_ofb ), .dout (o_iserdese2 ),//輸出數(shù)據(jù) .dout_vld (o_iserdese2_vld )//輸出數(shù)據(jù)有效指示信號(hào); ); //例化ILA ila_0u_ila_0( .clk ( clk_div_o ),//input wire clk; .probe0(u_oserdese2_ctrl.din ),//input wire [7:0] probe0; .probe1(u_iserdese2_ctrl.q ),//input wire [7:0] probe1; .probe2(u_iserdese2_ctrl.dout ),//input wire [7:0] probe2; .probe3(u_iserdese2_ctrl.cnt ),//input wire [3:0] probe3; .probe4(u_iserdese2_ctrl.slip_cnt),//input wire [1:0] probe4; .probe5(u_iserdese2_ctrl.bitslip ),//input wire [0:0] probe5; .probe6(u_iserdese2_ctrl.slip_flag),//input wire [0:0] probe6; .probe7(u_iserdese2_ctrl.add_cnt ),//input wire [0:0] probe7; .probe8(u_iserdese2_ctrl.dout_vld)//input wire [0:0] probe8; );
頂層模塊對(duì)應(yīng)的RTL視圖如下所示:
圖15 頂層模塊RTL
05工程仿真
對(duì)應(yīng)的TestBench很簡(jiǎn)單,只需要提供時(shí)鐘和復(fù)位信號(hào)即可,如下所示:
//--############################################################################################### //--# //--# File Name : testBench //--# Designer : 數(shù)字站 //--# Tool : Vivado 2021.1 //--# Design Date : 2024.4.4 //--# Description : 測(cè)試串并轉(zhuǎn)換原語(yǔ) //--# Version : 0.0 //--# Coding scheme : GBK(If the Chinese comment of the file is garbled, please do not save it and check whether the file is opened in GBK encoding mode) //--# //--############################################################################################### `timescale1ns /1ps moduletest(); localparam CYCLE = 10 ;//系統(tǒng)時(shí)鐘周期,單位ns,默認(rèn)10ns; localparam RST_TIME = 10 ;//系統(tǒng)復(fù)位持續(xù)時(shí)間,默認(rèn)10個(gè)系統(tǒng)時(shí)鐘周期; reg clk ;//系統(tǒng)時(shí)鐘,默認(rèn)100MHz; reg rst_n ;//系統(tǒng)復(fù)位,默認(rèn)低電平有效; wire [7:0] o_iserdese2 ; wire o_iserdese2_vld ; topu_top( .clk_div ( clk ),//系統(tǒng)時(shí)鐘信號(hào); .rst_n (rst_n ),//系統(tǒng)復(fù)位信號(hào),低電平有效; .o_iserdese2 (o_iserdese2 ), .o_iserdese2_vld (o_iserdese2_vld ) ); //生成周期為CYCLE數(shù)值的系統(tǒng)時(shí)鐘; initial begin clk =0; forever#(CYCLE/2) clk = ~clk; end //生成復(fù)位信號(hào); initial begin rst_n =1; #2; rst_n =0;//開(kāi)始時(shí)復(fù)位10個(gè)時(shí)鐘; #(RST_TIME*CYCLE); rst_n =1; @(posedge o_iserdese2_vld);//校準(zhǔn)完成; repeat(400)@(posedge clk); $stop;//停止仿真; end endmodule
之后運(yùn)行vivado仿真,下圖是OSERDESE2的時(shí)序圖,將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出,串行數(shù)據(jù)與時(shí)鐘clk的雙沿對(duì)齊。
圖16 OSERDESE2時(shí)序
之后查看ISERDESE2時(shí)序,如下圖所示,在校準(zhǔn)開(kāi)始階段,ISERDESE2輸出數(shù)據(jù)Q為8’h20,并不是校準(zhǔn)序列8’h5c或者8’h82,所以將bitslip拉高一個(gè)clk_div時(shí)鐘寬度。
等待四個(gè)clk_div時(shí)鐘周期后,再次檢測(cè)ISERDESE2輸出并行數(shù)據(jù),依舊不是規(guī)定數(shù)值,繼續(xù)拉高bitslip進(jìn)行調(diào)整。
圖17 OSERDESE2時(shí)序
直到某次調(diào)整之后,ISERDESE2輸出的并行數(shù)據(jù)序列均為8’h5c或8’h82,如下圖所示,此時(shí)就可以拉高bitslip了。
圖18 OSERDESE2時(shí)序
之后檢測(cè)連續(xù)16個(gè)ISERDESE2并行輸出數(shù)據(jù),如果均為規(guī)定序列,沒(méi)有問(wèn)題,則將dout_vld拉高,表示輸出數(shù)據(jù)已經(jīng)對(duì)齊,是有效數(shù)據(jù)。
如果檢測(cè)過(guò)程中出現(xiàn)錯(cuò)誤,則計(jì)數(shù)器清零,bitslip拉高繼續(xù)調(diào)整,直到滿足要求即可。
圖19 計(jì)數(shù)器對(duì)校準(zhǔn)序列計(jì)數(shù)下面是截取當(dāng)轉(zhuǎn)換完成后,發(fā)送端校驗(yàn)數(shù)據(jù)發(fā)送完成之后,發(fā)送偽隨機(jī)的測(cè)試數(shù)據(jù),ISERDESE2的輸出依舊是正確的,證明前文的校準(zhǔn)方式?jīng)]有問(wèn)題。
圖20 接收偽隨機(jī)序列
上述仿真就沒(méi)有問(wèn)題了,之后上板通過(guò)ila抓取相關(guān)信號(hào),查看結(jié)果是否正確。
06上板測(cè)試
至于在使用OFB回環(huán)時(shí),為什么不能使用D管腳,如下圖所示,ISERDESE2和OSERDESE2會(huì)使用掉一個(gè)管腳的ILOGIC和OLOGIC資源,導(dǎo)致這個(gè)IOB管腳不能使用,ISERDESE2的D管腳就不能使用了。
下圖中白色走線就是ISERDESE2和OSERDESE2的OFB回環(huán)走線。
圖21 IO資源分布
工程綜合完畢之后,將代碼下載到開(kāi)發(fā)板中,之后把dout_vld的上升沿作為ILA的觸發(fā)條件。由于該條件在復(fù)位之后只會(huì)觸發(fā)一次,因此在ILA啟動(dòng)之后,需要按一下開(kāi)發(fā)板的復(fù)位引腳,才能夠觸發(fā)條件,對(duì)應(yīng)截圖如下所示。
圖22 ILA的觸發(fā)條件設(shè)置
如下圖所示,開(kāi)始校準(zhǔn)時(shí),ISERDESE2輸出并行數(shù)據(jù)并不是校準(zhǔn)序列的8’h5c或者8’h82。之后把bitslip拉高一個(gè)時(shí)鐘,調(diào)整串并轉(zhuǎn)換的起始位置,下圖只調(diào)整了兩次,ISERDESE2就輸出了正確數(shù)據(jù)。
圖23 校準(zhǔn)時(shí)序
計(jì)數(shù)器cnt對(duì)ISERDESE2輸出的正確數(shù)據(jù)進(jìn)行計(jì)數(shù),當(dāng)ISERDESE2連續(xù)輸出16個(gè)正確數(shù)據(jù)時(shí),認(rèn)為校準(zhǔn)成功,如果覺(jué)得16個(gè)太少,在校準(zhǔn)的時(shí)候可以設(shè)置更大的數(shù)據(jù)。
圖24 校準(zhǔn)計(jì)數(shù)器
最后就是對(duì)比校準(zhǔn)后偽隨機(jī)序列的轉(zhuǎn)換了,din是OSERDESE2并串轉(zhuǎn)換的輸入數(shù)據(jù),而dout是ISERDESE2串并轉(zhuǎn)換的輸出結(jié)果,下圖中兩圖的數(shù)據(jù)相等,證明校準(zhǔn)電路和串并轉(zhuǎn)換均沒(méi)有問(wèn)題。
din和dout有延時(shí)是正常現(xiàn)象,因?yàn)閮烧咧虚g有很多電路和觸發(fā)器嘛,延時(shí)是正常的。
圖25 轉(zhuǎn)換數(shù)據(jù)
關(guān)于ISERDESE2的講解到此結(jié)束了,本文雖然只是講解了DDR模式的使用,但SDR原理也是類似的,只不過(guò)是單沿轉(zhuǎn)換數(shù)據(jù),兩個(gè)時(shí)鐘頻率的比值不一樣罷了。
主要理解bitslip的使用,才能夠真正的了解該模塊,不必在意bitslip拉高后,數(shù)據(jù)該怎么移動(dòng),只需要關(guān)注ISERDESE2輸出是不是需要的輸出,不是就繼續(xù)通過(guò)bitslip調(diào)整ISERDESE2輸出。這個(gè)校準(zhǔn)的過(guò)程需要輸入一直連續(xù)輸入固定序列,不然無(wú)法校準(zhǔn)。
需要本工程的在公眾號(hào)后臺(tái)回復(fù)“ISERDESE2”(不包括引號(hào))即可,工程使用vivado2021.1,平臺(tái)是zynq-7030。
-
接口
+關(guān)注
關(guān)注
33文章
8782瀏覽量
152459 -
Xilinx
+關(guān)注
關(guān)注
72文章
2174瀏覽量
122946 -
仿真
+關(guān)注
關(guān)注
50文章
4161瀏覽量
134545
原文標(biāo)題:xilinx原語(yǔ)詳解及仿真—ISERDESE2
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何使用其gearbox功能來(lái)實(shí)現(xiàn)不同的比率的串并轉(zhuǎn)換功能

FPGA | Xilinx ISE14.7 LVDS應(yīng)用
ADC3583怎么用Xilinx的ISERDESE2采集信號(hào)?
請(qǐng)問(wèn)是否必須總是有一個(gè)訓(xùn)練模式來(lái)使用ISERDESE2?
請(qǐng)問(wèn)ISERDESE2原語(yǔ)支持多少位輸入?
如何正確配置ISERDESE2?
使用ISERDESE2 INTERFACE_TYPE設(shè)置為NETWORKING時(shí)收到警告的原因?
應(yīng)用程序中是否需要外部LVDS終端才能進(jìn)行此配置?
使用帶有XC7K160T的ISE 14.7在布局布線步驟中出現(xiàn)錯(cuò)誤的解決辦法?
二端口網(wǎng)絡(luò)參數(shù)_二端口網(wǎng)絡(luò)參數(shù)的測(cè)定

Xilinx FPGA常用原語(yǔ)介紹

Xilinx原語(yǔ)使用方法有哪些

Xilinx原語(yǔ)使用方法

《Xilinx—UG471中文翻譯》(2)ISERDESE2原語(yǔ)介紹

評(píng)論