在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Xilinx原語OSERDESE2的使用和仿真詳解

C29F_xilinx_inc ? 來源:賽靈思 ? 作者:賽靈思 ? 2022-02-19 17:43 ? 次閱讀

1、介紹
隨著電子行業(yè)技術的發(fā)展,特別是在傳輸接口的發(fā)展上,IEEE1284被 USB 接口取代,PATA被 SATA 取代,PCI被 PCI-Express 所取代,無一不證明了傳統(tǒng)并行接口的速度已經(jīng)達到一個瓶頸了,取而代之的是速度更快的串行接口,于是原本用于光纖通信的SerDes 技術成為了為高速串行接口的主流。串行接口主要應用了差分信號傳輸技術,具有功耗低、抗干擾強,速度快的特點,理論上串行接口的最高傳輸速率可達到10Gbps 以上。

2、理論
Xilinx的原語OSERDESE2是一種專用的并-串轉換器,每個OSERDESE2模塊都包括一個專用串行化程序用于數(shù)據(jù)和3狀態(tài)控制。數(shù)據(jù)和3狀態(tài)序列化程序都可以工作在SDR和DDR模式。數(shù)據(jù)串行化的位寬可以達到8:1(如果使用原語模塊級聯(lián),則可以到10:1和14:1)。3狀態(tài)序列化最高可達14:1,有一個專用的DDR3模式可用于支持高速內(nèi)存應用程序。

OSERDESE2的框圖如下:

Xilinx原語OSERDESE2的使用和仿真詳解

OSERDESE2的端口說明如下:

Xilinx原語OSERDESE2的使用和仿真詳解

需要例化的一些可用屬性如下:

Xilinx原語OSERDESE2的使用和仿真詳解

TRISTATE_WIDTH的選取見下表:

Xilinx原語OSERDESE2的使用和仿真詳解

SDR、DDR輸出模式下位寬的選取有如下限制:

Xilinx原語OSERDESE2的使用和仿真詳解

輸出數(shù)據(jù)會有一些時鐘周期的延遲,具體見下表:

Xilinx原語OSERDESE2的使用和仿真詳解

3、8位數(shù)據(jù)的并串轉換
接下里例化一個原語來熟悉下用法,8位數(shù)據(jù)的并串轉換,采用DDR輸出。

官方手冊的8位DDR轉化時序圖如下:

Xilinx原語OSERDESE2的使用和仿真詳解

例化原語OSERDESE2(打開VIvado--Tools--Language Templates,搜索“OSERDESE2”,可以找到Xilinx提供的模板),與DDR、3態(tài)控制相關的端口,輸入全設置為0,輸出不關心,編寫Verilog如下:

//------------------------------------------------------------------------
//--OSERDESE2測試模塊
//------------------------------------------------------------------------

//--------------------------------------------------------
module serializer(
input clk_ser , //串行輸出時鐘,50M*4=200M
input clk_per , //并行輸入時鐘,50M
input rst_n , //復位信號,低電平有效
input [7:0] par_data , //并行輸入數(shù)據(jù)

output ser_data //串行輸出數(shù)據(jù)
);

//---------------------------------------------------------------
OSERDESE2 #(
.DATA_RATE_OQ ("DDR") , // DDR, SDR
.DATA_RATE_TQ ("SDR") , // 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 () , // 1-bit output: Feedback path for data
.OQ (ser_data) , // 1-bit output: Data path output
.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_ser) , // 1-bit input: High speed clock
.CLKDIV (clk_per) , // 1-bit input: Divided clock
.D1 (par_data[0]) ,
.D2 (par_data[1]) ,
.D3 (par_data[2]) ,
.D4 (par_data[3]) ,
.D5 (par_data[4]) ,
.D6 (par_data[5]) ,
.D7 (par_data[6]) ,
.D8 (par_data[7]) ,
.OCE (1'b1) , // 1-bit input: Output data clock enable
.RST (~rst_n) , // 1-bit input: Reset
.SHIFTIN1 () ,
.SHIFTIN2 () ,
.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

每隔20ns隨機生成1個8位2進制數(shù)據(jù)作為并行輸入,觀察串行輸出,Testbench如下:

//------------------------------------------------
//--OSERDESE2原語仿真
//------------------------------------------------

`timescale 1ns / 1ps //時間單位/精度

//----------------------------------------------------
module tb_serializer();

reg clk_per ;
reg clk_ser ;
reg rst_n ;
reg [7:0] par_data ;
wire ser_data ;

//----------------------------------------------------
initial begin
clk_per clk_ser rst_n par_data #180
rst_n end
//----------------------------------------------------------
always #10 clk_per = ~clk_per;
always #2.5 clk_ser = ~clk_ser;

always #20 par_data

//----------------------------------------------------
serializer serializer_inst(
.clk_per (clk_per) ,
.clk_ser (clk_ser) ,
.rst_n (rst_n) ,
.par_data (par_data) ,
.ser_data (ser_data)
);

endmodule

仿真結果如下:

Xilinx原語OSERDESE2的使用和仿真詳解

可以看出:

在第1條藍線處,是復位后并行時鐘的第1個上升沿,此時采集到的數(shù)據(jù)為0000_0001
在第2條藍線處,也就是4個串行時鐘的延遲后,串行輸出開始有數(shù)據(jù),分別為1-0-0-0-0-0-0-0,可以看出是第1個上升沿采集到的數(shù)據(jù)輸出(0000_0001從低位往高位輸出)
在第2條藍線處,是復位后并行時鐘的第2個上升沿,此時采集到的數(shù)據(jù)為0000_1101
在第3條藍線處,也就是4個串行時鐘的延遲后,串行輸出開始有數(shù)據(jù),分別為1-0-1-1-0-0-0-0,可以看出是第2個上升沿采集到的數(shù)據(jù)輸出(0000_1101從低位往高位輸出)

其他與上述相同,符合官方給出的時序圖

4、10位數(shù)據(jù)的并串轉換(級聯(lián))
OSERDESE2原語還支持例化兩次原語級聯(lián),以便實現(xiàn)10位、14位位寬的串行化轉換。下圖是10位位寬的級聯(lián)框圖,其中一個設置位MASTER,另一個設置為SLAVE,通過SHIFTIN與SHIFTOUT連接。

需要注意:數(shù)據(jù)的輸出從MASTER輸出,數(shù)據(jù)的高位輸入到SLAVE模塊時,需要從D3開始(只能使用D3~D8)

Xilinx原語OSERDESE2的使用和仿真詳解

接下里例化一個原語來實現(xiàn)10位數(shù)據(jù)的并串轉換,采用DDR輸出。

例化2個原語OSERDESE2級聯(lián)(打開VIvado--Tools--Language Templates,搜索“OSERDESE2”,可以找到Xilinx提供的模板),與DDR、3態(tài)控制相關的端口,輸入全設置為0,輸出不關心,編寫Verilog如下:

//------------------------------------------------------------------------
//--OSERDESE2測試模塊
//------------------------------------------------------------------------

//--------------------------------------------------------
module serializer(
input clk_ser , //串行輸出時鐘,50M*5=250M
input clk_per , //并行輸入時鐘,50M
input rst_n , //復位信號,低電平有效
input [9:0] par_data , //并行輸入數(shù)據(jù),位寬10

output ser_data //串行輸出數(shù)據(jù)
);
//------------------------------------------------------------------
wire shift1; //級聯(lián)線1
wire shift2; //級聯(lián)線2

//------------------------------------------------------------------

//例化主模塊MASTER
OSERDESE2 #(
.DATA_RATE_OQ ("DDR") , // DDR, SDR
.DATA_RATE_TQ ("SDR") , // DDR, BUF, SDR
.DATA_WIDTH (10) , // 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_inst1 (
.OFB () , // 1-bit output: Feedback path for data
.OQ (ser_data) , // 1-bit output: Data path output
.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_ser) , // 1-bit input: High speed clock
.CLKDIV (clk_per) , // 1-bit input: Divided clock
.D1 (par_data[0]) ,
.D2 (par_data[1]) ,
.D3 (par_data[2]) ,
.D4 (par_data[3]) ,
.D5 (par_data[4]) ,
.D6 (par_data[5]) ,
.D7 (par_data[6]) ,
.D8 (par_data[7]) ,
.OCE (1'b1) , // 1-bit input: Output data clock enable
.RST (~rst_n) , // 1-bit input: Reset
.SHIFTIN1 (shift1) ,
.SHIFTIN2 (shift2) ,
.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
);

//例化從模塊SLAVE
OSERDESE2 #(
.DATA_RATE_OQ ("DDR") , // DDR, SDR
.DATA_RATE_TQ ("SDR") , // DDR, BUF, SDR
.DATA_WIDTH (10) , // 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 ("SLAVE") , // 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_inst2 (
.OFB () , // 1-bit output: Feedback path for data
.OQ () , // 1-bit output: Data path output
.SHIFTOUT1 (shift1) ,
.SHIFTOUT2 (shift2) ,
.TBYTEOUT () , // 1-bit output: Byte group tristate
.TFB () , // 1-bit output: 3-state control
.TQ () , // 1-bit output: 3-state control
.CLK (clk_ser) , // 1-bit input: High speed clock
.CLKDIV (clk_per) , // 1-bit input: Divided clock
.D1 () ,
.D2 () ,
.D3 (par_data[8]) ,
.D4 (par_data[9]) ,
.D5 () ,
.D6 () ,
.D7 () ,
.D8 () ,
.OCE (1'b1) , // 1-bit input: Output data clock enable
.RST (~rst_n) , // 1-bit input: Reset
.SHIFTIN1 () ,
.SHIFTIN2 () ,
.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

每隔20ns隨機生成1個10位2進制數(shù)據(jù)作為并行輸入,觀察串行輸出,Testbench如下:

//------------------------------------------------
//--OSERDESE2原語仿真
//------------------------------------------------

`timescale 1ns / 1ps //時間單位/精度

//----------------------------------------------------
module tb_serializer();

reg clk_per ;
reg clk_ser ;
reg rst_n ;
reg [9:0] par_data ;
wire ser_data ;

//----------------------------------------------------
initial begin
clk_per clk_ser rst_n par_data #180
rst_n end
//----------------------------------------------------------
always #10 clk_per = ~clk_per;
always #2 clk_ser = ~clk_ser;

always #20 par_data

//----------------------------------------------------
serializer serializer_inst(
.clk_per (clk_per) ,
.clk_ser (clk_ser) ,
.rst_n (rst_n) ,
.par_data (par_data) ,
.ser_data (ser_data)
);

endmodule

仿真結果如下:

Xilinx原語OSERDESE2的使用和仿真詳解

可以看出:

在第1條藍線處,是復位后并行時鐘的第1個上升沿,此時采集到的數(shù)據(jù)為11000_00001
在第2條藍線處,也就是4個串行時鐘的延遲后,串行輸出開始有數(shù)據(jù),分別為1-0-0-0-0-0-0-0-1-1,可以看出是第1個上升沿采集到的數(shù)據(jù)輸出(11000_00001從低位往高位輸出)
在第2條藍線處,是復位后并行時鐘的第2個上升沿,此時采集到的數(shù)據(jù)為01000_01101
在第3條藍線處,也就是4個串行時鐘的延遲后,串行輸出開始有數(shù)據(jù),分別為1-0-1-1-0-0-0-0-1-0,可以看出是第2個上升沿采集到的數(shù)據(jù)輸出(01000_01101從低位往高位輸出)
其他與上述相同。

這里官方手冊沒有給出10bitDDR輸出的時序圖,輸出延遲給出的表如下圖:

Xilinx原語OSERDESE2的使用和仿真詳解

可以看到這里10:1的輸出延遲應該是5個時鐘周期,但是我上面仿真的卻是4個時鐘周期,一開始我還以為是哪里錯了,搞得我重復仿真了好幾遍,后面又看了一下手冊,終于在延遲表的下面發(fā)現(xiàn)了這句話(上圖標紅):CLK、CLKDIV的時鐘沿通常不是相位一致的。當這兩個時鐘的時鐘沿相位一致時,延遲會存在一個周期的差異。

這樣的話,仿真結果應該是沒有問題。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 轉換器
    +關注

    關注

    27

    文章

    8962

    瀏覽量

    150788
  • Xilinx
    +關注

    關注

    73

    文章

    2182

    瀏覽量

    124387
  • 仿真
    +關注

    關注

    51

    文章

    4241

    瀏覽量

    135334
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    詳解ADC電路的靜態(tài)仿真和動態(tài)仿真

    ADC電路主要存在靜態(tài)仿真和動態(tài)仿真兩類仿真,針對兩種不同的仿真,我們存在不同的輸入信號和不同的數(shù)據(jù)采樣,因此靜態(tài)仿真和動態(tài)
    的頭像 發(fā)表于 06-05 10:19 ?352次閱讀
    <b class='flag-5'>詳解</b>ADC電路的靜態(tài)<b class='flag-5'>仿真</b>和動態(tài)<b class='flag-5'>仿真</b>

    基于AD9613與Xilinx MPSoC平臺的高速AD/DA案例分享

    本文主要介紹基于Xilinx UltraScale+MPSoC XCZU7EV的高速AD采集與高速DA輸出案例
    的頭像 發(fā)表于 06-03 14:22 ?77次閱讀
    基于AD9613與<b class='flag-5'>Xilinx</b> MPSoC平臺的高速AD/DA案例分享

    詳解Xilinx的10G PCS PMA IP

    如果要在Xilinx的FPGA上使用萬兆以太網(wǎng)通信,大致有三種方法構建協(xié)議棧。第一種使用GTX等Serdes作為底層的PHY,上層通過HDL實現(xiàn)構建MAC和IP層,這種方式難度會比較大,底層需要完成PHY層的設計,最終我想通過這種方式實現(xiàn)萬兆以太網(wǎng)的搭建。
    的頭像 發(fā)表于 04-18 15:16 ?667次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>Xilinx</b>的10G PCS PMA IP

    ISERDESE2原語端口及參數(shù)介紹

    前面在講解HDMI接口之前,講解過IDDR、ODDR、OSERDESE2、IBUF等原語,之后一直有讀者在問什么時候更新ISERDESE2這個原語。前文講解過這些
    的頭像 發(fā)表于 03-17 10:52 ?1056次閱讀
    ISERDESE<b class='flag-5'>2</b><b class='flag-5'>原語</b>端口及參數(shù)介紹

    車聯(lián)網(wǎng)HIL仿真測試解決方案

    經(jīng)緯恒潤結合硬件在環(huán)技術、通信信息、云平臺、場景仿真、車載單元仿真技術,開發(fā)了針對車聯(lián)網(wǎng)V2N測試&V2X應用場景測試的仿真系統(tǒng),實
    的頭像 發(fā)表于 12-24 14:24 ?612次閱讀
    車聯(lián)網(wǎng)HIL<b class='flag-5'>仿真</b>測試解決方案

    調(diào)試Xilinx Zynq + ADS58C48,ADC使用的是LVDS模式,ADC不能正常工作怎么解決?

    我正在調(diào)試Xilinx Zynq + ADS58C48,ADC使用的是LVDS模式,ADC不能正常工作。有以下幾點問題: 1)通過Xilinx FPGA差分原語輸給ADC一個10MHz的差分時
    發(fā)表于 12-10 07:34

    BTB擴展接口:LCD、Camera、UART、I2C等|詳解

    今天我們來學習的是BTB擴展接口的LCD、Camera、UART、I2C詳解,特別分享Air201硬件BTB擴展接口相關內(nèi)容。
    的頭像 發(fā)表于 11-30 09:39 ?963次閱讀
    BTB擴展接口:LCD、Camera、UART、I<b class='flag-5'>2</b>C等|<b class='flag-5'>詳解</b>篇

    ADC3583怎么用Xilinx的ISERDESE2采集信號?

    我看datasheet上3種模式2-wire/1-wire/1/2-wireSLDVS都是9位或者18位的,我用xilinx的fpga中的ISERDESE2的DDR模式只支持4-,6
    發(fā)表于 11-21 07:12

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發(fā)表于 11-11 11:10 ?573次閱讀

    如何申請xilinx IP核的license

    在使用FPGA的時候,有些IP核是需要申請后才能使用的,本文介紹如何申請xilinx IP核的license。
    的頭像 發(fā)表于 10-25 16:48 ?1195次閱讀
    如何申請<b class='flag-5'>xilinx</b> IP核的license

    Xilinx ZYNQ 7000系列SoC的功能特性

    本文介紹下Xilinx ZYNQ 7000系列SoC的功能特性、資源特性、封裝兼容性以及如何訂購器件。
    的頭像 發(fā)表于 10-24 15:04 ?2481次閱讀
    <b class='flag-5'>Xilinx</b> ZYNQ 7000系列SoC的功能特性

    設計仿真 | 基于VTD的V2X仿真應用

    基于VTD的V2X仿真測試系統(tǒng),采用VTD軟件的數(shù)據(jù)開放性特點,將軟件仿真的數(shù)據(jù)作為V2X中的數(shù)據(jù)源。本方案直接采用VTD的傳感器來充當路測設備和車載終端。
    的頭像 發(fā)表于 10-14 12:17 ?1203次閱讀
    設計<b class='flag-5'>仿真</b> | 基于VTD的V<b class='flag-5'>2</b>X<b class='flag-5'>仿真</b>應用

    TINA-TI瞬態(tài)仿真模式如何選擇?

    Tina-TI 做瞬態(tài)仿真時,如下圈出來的Calculate operating point ~Zero initial values 3個模式詳解下~仿真時該如何選擇~
    發(fā)表于 08-05 06:10

    如何在ModelSim中添加Xilinx仿真

    今天給大俠帶來在FPGA設計應用中如何在ModelSim中添加Xilinx仿真庫,話不多說,上貨。 注意:ModelSim一定要安裝在不帶空格的目錄下,即不要安裝在“Program
    發(fā)表于 07-03 18:16

    FPGA | Xilinx ISE14.7 LVDS應用

    利用FPGA內(nèi)部自帶的SelectIO資源,利用ISERDESE2OSERDESE2,實現(xiàn)串-并,并-串的轉換,理論速度可達到750Mbs, 參考資料:Spartan-6 FPGA Data
    發(fā)表于 06-13 16:28
    主站蜘蛛池模板: 福利视频免费观看 | 国产午夜亚洲精品 | 国产免费一区二区三区最新 | 欧美淫| 欧美一级视频在线高清观看 | 老色批在线播放视频网站免费 | 最近新韩国hd视频 | 69xxxxx日本护士 | 亚洲综合色在线 | 久久久黄色片 | 中文字幕亚洲一区二区三区 | 第九色 | 亚洲免费视频观看 | 天天色天天草 | 亚洲成人高清 | 99久久国产免费福利 | 一级视频在线观看 | 特黄一级真人毛片 | 一级做a爱片就在线看 | 亚洲成a人不卡在线观看 | 久久51| 日本高清视频色视频kk266 | 亚洲视频1 | 亚洲欧美国产视频 | 女色专区 | 日本成人小视频 | 日日噜噜夜夜狠狠tv视频免费 | 久久国产香蕉一区精品 | 最新国产在线播放 | 在线视频永久在线视频 | 激情九月| 国产精品主播在线观看 | 五月婷色 | 荡女妇边被c边呻吟久久 | 最新版天堂资源中文官网 | 欧美一卡二三卡四卡不卡 | 日本黄色小说视频 | 在线观看黄的网站 | 奇米影视777四色米奇影院 | 国内一国产农村妇女一级毛片 | 午夜爱爱网站 |