Xilinx原语
原語,即primitive。不同的廠商,原語不同;同一家的FPGA,不同型號的芯片,可以也不一樣;原語類似最底層的描述方法。使用原語的好處,可以直接例化使用,不用定制IP;即可通過復制原語的語句,然后例化IP,就可使用;Xilinx是通過直接修改原語中的參數再例化IP來使用;Xilinx公司的原語分為10類,包括:計算組件,IO端口組件,寄存器/鎖存器,時鐘組件,處理器組件,移位寄存器,配置和檢測組件,RAM/ROM組件,Slice/CLB組件,G-tranceiver。下圖所示為UG799中對原語的分類列表。
項目中實際用到了串并轉換,時鐘BUFF,因此選擇部分重點講解,具體可以參考UG799和對于手冊,如IO可以參考UG471。
1.串并轉換 OSERDESE2
OSERDES 7系列設備專用于并行串行轉換器,具有特定的時鐘和邏輯資源,旨在促進高速資源同步接口的實現。每個OSERDES模塊都包含用于數據和三態控制的專用序列化器。可以采用單數據率(SDR)和雙數據率(DDR)模式進行配置。數據串行化可以達到8:1(如果使用OSERDESWidthExpansion,則可以達到10:1或14:1)。3-state序列器可以達到4:1。具體實現10bit轉串行數據:
在Language Templates ----->Verilog里面可以搜索對應原語;
下圖描述TRISTATE_WIDTH的選取:
與10bit并轉串代碼段中還應添加OSERDESE2_inst2,與此類似稍作修改即可,不再贅述。
2. 單端信號轉差分信號:OBUFDS
如果直接用下面的邏輯生成則會出現p端邏輯和n端邏輯差一個反相器,路徑延時不一致,指示差分結果出錯; assign diff_data_p = data_ser; assign diff_data_n = ~data_ser;同樣可以使用原語:OBUFDS
OBUFDS #(.IOSTANDARD("DEFAULT"), // Specify the output I/O standard.SLEW("SLOW") // Specify the output slew rate) OBUFDS_inst (.O(O), // Diff_p output (connect directly to top-level port).OB(OB), // Diff_n output (connect directly to top-level port).I(I) // Buffer input );3. IBUFG和IBUFGDS(IO)
IBUFG即輸入全局緩沖,是與專用全局時鐘輸入管腳相連接的首級全局緩沖。所有從全局時鐘管腳輸入的信號必須經過IBUF元,否則在布局布線時會報錯。 IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多種格式的IO標準。IBUFGDS是IBUFG的差分形式,當信號從一對差分全局時鐘管腳輸入時,必須使用IBUFGDS作為全局時鐘輸入緩沖。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多種格式的IO標準。舉例說明:差分時鐘芯片輸入的100MHz時鐘,作為FPGA的全局時鐘。
IBUFGDS #(.DIFF_TERM ("TRUE" ),.IBUF_LOW_PWR ("FALSE")) u_ibufg_clk_100 (.I (FP_CLK_100M_P),.IB (FP_CLK_100M_N),.O (clk_100m ));總結
- 上一篇: 物联网开发技术栈
- 下一篇: 计算机操作系统 汤子瀛(慕课版)