Hızlı hızlı veri satın alma, uzay telemetrisinden tıbbi görüntüleme ve bilimsel araçlama için çeşitli alanlarda temel bir gerekliliktir. Özel ASICs veya yazılım tabanlı rekorlar gibi geleneksel çözümler, gerçek zamanlı transaript, esneklik ve düşük gecikmeli sistemlerle talep edilen alanlardan elde edilen temel bilgileri kullanarak, dijital mantığı kullanarak bu boşluğu mümkün kılar - bu verileri konservekil-per-saniye dışı oranlarına adapte etmek için tasarım ilkelerine göre optimize eder.

Neden Yüksek Hızlı Veri Kaydı için FPGAs

Paralellik ve Deterministic Latency

Mikroişlemci veya DSP'lerin aksine, talimatları yerine getirir, FPGA'lar gerçek paralel donanımda veri işleme işlemi verileri aynı anda birden yüksek hızlı kanaldan elde edebilirsiniz, önceden işleme (filtre, decimasyon veya format), sonuçları ve bunları depolamaya dönüştürür - CPU'da her işlem aynı anda çalışır.

Interface Flexability

Yüksek hızlı veri kayıtları çeşitli kaynaklarla arayüze ihtiyaç duyuyor: analog-to-dijital dönüştürücüler (ADCs) LVDS veya JESD204B, yüksek çözünürlüklü multimedya arayüzleri (HDMI), kamera bağlantıları veya özel sensör hatları, veya özel sensör hatları, geniş bir dizi I/OC'yi (LVDS, HSTL, SSTL, hiper-Vizeler (GTP, GTXition multimedya arayüzlerini) kullanarak, GTH (GTP, GTH) çok-gigabit'yi ikinci fiyatlara sahip.In VHDL, size özel IP çekirdeklerini (LVDS, LVDS, HSTL, LVizex) kontrol edebilirsiniz.

In-Flight Reurability

Birçok kayıt uygulaması, farklı veri oranlarına adapte olmak için sistem gerektirir, kanal sayıları veya kodlama programları donanım değişiklikleri olmadan. FPGAs kısmen veya tamamen bir PCIe bağlantısı, Ethernet veya özel bir yapılandırma arayüzü oluşturabilir. Bu yetenek, tek bir kayıt kurulunun birden fazla görev yapmasına izin verir - örneğin, 4 kanal 12bit 1 GSPS radar konfigürasyonu ve 2 kanallı 16-bit 500 MSPS yazılım- tanımlanmış radyo (SDR) kayıt modu kaydı modu.

Anahtar Tasarım Tahminleri ve Ticaret-Resimleri

Tartışma ve Hafıza Mimarisi

Bir kayıtta veri akışı üç faktörle sınırlıdır: giriş yakalama oranı, iç tamponlama kapasitesi ve çıkış depolama ortamına (örneğin, SSD serisi, DRAM veya akış bağlantı) yazılması gerekir.

  • [FONT=0)On-çip blok RAM (BRAM): ) Hızlı, dual-port, ancak kapasitede sınırlı (özellikle modern FPGA'larda birkaç Mbits). küçük FFO'lar, line tamponlar veya kat depolama için kullanılır.
  • [DDR3/DDR4/LPDDR4): ) Yüksek kapasite (multiple GB) ancak geç saatlerde ve bant kısıtlamaları ile birlikte iyi tasarlanmış bir şekilde tasarlanmış bir bilgisayar kontrol cihazı (çok kanallıklı bir IP) ile bir araya gelerek, on bir GB / akustik bant genişliği sağlayabilir.
  • [FONT=0)Dönetici: [DRAM'dan düşük gecikmeliliğe sahip olmak gerekirse; en derin FIFO'lar için deterministik erişim süresi gerekli.
  • [FONT=0) Yüksek hızlı seri depolama:[Dönem:[Dönemli bellek için NVMe veya özel bir köprü aracılığıyla (örneğin Xilinx QDMA IP) Bu yükleri büyük veri taşımaz, ancak bu diski aşırı yüklemeyi önlemek için dikkatli bir akış kontrolü gerektirir.

VHDL'de, bu hatıraları diziler veya anlık satıcılar ilkeller olarak modelleyebilirsiniz. Örneğin, BRAM'ı kullanan bir genel FIFO, bir zaman içinde bir derinlik parametresi olabilirken, bir Prat-backed buffer AXI4 hafıza-mapped motoru aracılığıyla arayüze sahip olacaktır.

Saat Domainler ve Metastability

Yüksek hızlı veri kayıtları doğal olarak birden fazla saat domaini kapsar: ADC örneği saat (potansiyel olarak > 1 GHz), FPGA kumaş saat (transkript referansı) ve sistem arayüzü saatlerini doğru şekilde kullanarak, ancak birçok mühendis kendi gri kodlayıcılarını ve çift-portajlı DVD oynatıcılarını kullanarak kendi başına yazmalarını seçebilirler.

Saat-bölge geçişi için kullanılan yüzyüzlülük, iki veya daha fazla senkronizasyon kaydı kullanarak azaltılabilir. ortak bir VHDL modelidir:

signal async_sig, sync1, sync2 : std_logic;
begin
 process(clk) begin
 if rising_edge(clk) then
 sync1 <= async_sig;
 sync2 <= sync1;
 end if;
 end process;

Veri otobüsleri için, bir elhakk protokolü veya birden fazla tek-bit senkroniz yerine bir FIFO kullanmak daha güvenlidir.

Yüksek Frequencies'da Timing Closure at High Frequencies

FPGA, veri oranlarının birkaç yüz MHz üzerindeki hedef almayı hedeflemek ve zaman kısıtlamaları tutmak gerekir. Zavallı yapılandırılmış VHDL - derinden nested kombinasyonel mantık, geniş birdenxers veya görevlerin süreç bloklarının içinde tutulması gibi - kapanış zamanlaması ihlallerine yol açma için Anahtar uygulamaları engellemeye yardımcı olun:

  • [FONT:0)Pipe Aşamaları:[Dönemli aşamalar) yüksek-fanout veya uzun veri yollarında kayıt yaptırmalıdır. Örneğin, bir cumulator döngüsü içinde 64-bit eker hem giriş hem de çıktı üzerinde kayıt altına alınmalıdır.
  • [FONT:0)Clock Gating ve Saat Enable:[Dönemli sinyalleri kullanarak, mantığı değiştirmek için saat boyunca ayarlandığından ziyade saat boyunca kullanın; kapılı saatler zaman kaybı yaratır ve skew katkıda bulunur.
  • [FONT:0]Synthesis Attributes:) Satıcıya özel yönergeler (örneğin, tutun, sin preserve ve max fanout) araçlara kılavuzluk etmek için genellikle eklenmiştir: ).
  • [FONT:0]Floorplanning: [Dönetici: [Dönetici: [Dönetici: 0] Grup, FPGA'nın özel bölgelerine bağlantı gecikmelerini azaltmak için yüksek hızlı bir mantık.

Tipik Yüksek Hızlı Rekorer Sistem Mimarisi

Giriş Front-Bit-Bit-

Verilerdeki ilk modül, dış kaynaktan verileri yakalar. JESD204B ADCs için, bu, Xilinx'de bir JESD204B transceiver IP (genellikle FPGA satıcısı tarafından sağlanan) ve kablo senkronizasyonu, paklama ve hata algılaması içerir.

Data Preprocessing and Formatting

Raw yakalama verileri depolamadan önce gerçek zamanlı işlemleri gerektirebilir:

  • [FONT=0)DÜŞÜNÜSÜŞÜNÜ: 0[DÜDÜDÜSTRİYE:0)DÜŞÜNÜŞÜNÜye/GÜNÜye Olmayanlar: [DÜye Olmayanlar İçin Veri oranını Azçaklı Tümleştirici Faktörler (CIC) filtreler veya FIR filtreler, çarpık (MAC) bloklar olarak uygulandı.
  • [FONT=0) Standart Biçime Dönüştürme:[Dönetici:[Dönlendirme:0)Döneticileri, kanal kimlikleri ve hata kontrol kelimeleri (örneğin, CRC) Bu basitleştirme işlemi veya kodlama analizi.
  • [FONT:0)Zero Overhead:[[Dönem:[Dönümüzde 1 ) Patlama modunda, depolama arayüzünden sürekli biraz akış korumak için sıfırlar veya sıfırlar eklemeniz gerekebilir.

Tüm işleme modülleri geç kalmışlığı düşük tutmak için boru hattı olmalıdır. Örneğin, polifaksiyon filtre kayıtlı veri yollarıyla bağlantılı bir liküllü DSP dilimleri olarak yapılandırılabilir.

Buffering ve Flow Control

Bir elastik tampon (FIFO) depolama saat domaini yakalama saat domainini depolama alanı ile birleştirir. FIFO derinlikleri, genel verileri destekleyen ve derinlikte bir gelişmiş tasarım için gereken en kötü şekilde kullanılan bir FIFO kullanmak olmalıdır.

Depolama Interface

Son aşama, kalıcı bir ortaya buffered verileri yazar. Seçenekler şunları içerir:

  • [FONT=0)PCIe DMA to Host RAM or SSD: Bir DMA motoru kullanarak (örneğin, Xilinx QDMA veya Intel P-Tile DMA) verileri doğrudan sistem hafızaya veya NVMe sürüşüne transfer etmek için. FPGA bir PCIe uç noktası olarak davranır ve sürücü buffer halkaları yönetir.
  • [FONT=0)Direct Drive of Flash Memory:[Dönetici için], NAND flaş veya eMMC ile VHDL'de uygulanan bir kontrol cihazı kullanarak arayüze ulaşabilirsiniz. Bu daha karmaşıktır, ancak tamamen gömülü bir çözüm sunar.
  • [FONT=0) Yüksek hızlı Seri Linkler (örneğin, Aurora, GDS): Uzak bir sunucuya veya başka bir FPGA kartına akış için.

Her arayüzün kendi protokolü ve akış kontrol mekanizması vardır. Örneğin, bir PCIe tabanlı bir kayıt cihazı hafızaya veya akış tabanlı DMA tanımlayıcı zincir kullanır; VHDL işlem isteklerini, tamamlanmayı ve kredi bazlı akış kontrolünü yönetmek zorundadır.

VHDL'de Uygulama Adımları

Top-Level Entity ve Ports'ı Tanımlayın

Tüm dış arabirimleri listelemeye başlayın: saat girişleri (bir PLL'den gelen saatler ve kumaş saati), ADC'lerden veri girişi, yapılandırma sinyalleri ve depolama arabirimleri (örneğin, PCIe diferansiyel çiftler için genel parametreler kullanın).

entity high_speed_recorder is
 generic (
 ADC_CHANNELS : integer := 2;
 DATA_WIDTH : integer := 16;
 FIFO_DEPTH : integer := 1024
 );
 port (
 ref_clk_p, ref_clk_n : in std_logic; -- differential reference
 adc_data : in std_logic_vector(ADC_CHANNELS * DATA_WIDTH - 1 downto 0);
 adc_clk : in std_logic; -- sample clock
 pcie_tx_p, pcie_tx_n : out std_logic_vector(3 downto 0);
 pcie_rx_p, pcie_rx_n : in std_logic_vector(3 downto 0);
 -- more ports...
 );
end entity;

Anında Satış veya Saat ve I /O Primitives

Zaman için satıcıya özel ilkeller kullanın (örneğin, Xilinx MMCM / PLL) ve yüksek hızlı I / O (ISERDES, OSERDES, veya transceiver sarmalayıcılar). VHDL, bu genellikle bir bileşen anlık olarak adlandırılır. Örneğin, bir Xilinx MMCM dinamik faz ile anlık olarak, yazabilirsiniz:

mmcm_inst : entity work.mmcm_wrapper
 generic map (
 MULT => 8.0,
 DIV => 1
 )
 port map (
 clkin1 => ref_clk,
 clkout0 => fabric_clk,
 clkout1 => transceiver_clk,
 locked => pll_locked
 );

Data Path Oluştur

Kontrol mantığını, veri girişinin test edilmesi ile ilgili verileri doğrulayıcı bir protokole yazın: her işlevsel blok (deserializer, FIFO, veri formatter) ayrı bir VHDL varlığıdır. Sinyal otobüsleri ile bağlayın (std logic vector dizileri)

-- Producer side
if rising_edge(clk) then
 if ready = '1' and valid = '1' then
 -- data transferred
 end if;
end if;
-- Consumer side
if rising_edge(clk) then
 if valid = '1' and ready = '1' then
 -- consume data
 end if;
end if;

Bu protokol, satıcı kütüphaneleri tarafından yaygın olarak desteklenen AXI4-Stream'ın temelidir.

FIFO Uygulama Detayları

Aşağıda, iki saat FIFO'nun jenerik parametrelerle geliştirilmiş bir versiyonu ve neredeyse tamamen / neredeyse tamamen boş bayraklar. Orijinal parçaları aksine, bu sürüm tam bir arithmetic for counter and pointer management, ve adresi geçiş için gri kodu kullanır: Çokbit senkronizasyon hataları önlemek için. gerçek bir tasarım satıcı ilkelleri kullanır (örneğin, Xilin FIFO Jeneratörleri)

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity dual_clock_fifo is
 generic (
 DATA_WIDTH : integer := 64;
 ADDR_WIDTH : integer := 10 -- depth = 2^ADDR_WIDTH
 );
 port (
 wr_clk : in std_logic;
 wr_rst : in std_logic;
 wr_en : in std_logic;
 wr_data : in std_logic_vector(DATA_WIDTH-1 downto 0);
 full : out std_logic;
 almost_full : out std_logic;

 rd_clk : in std_logic;
 rd_rst : in std_logic;
 rd_en : in std_logic;
 rd_data : out std_logic_vector(DATA_WIDTH-1 downto 0);
 empty : out std_logic;
 almost_empty: out std_logic
 );
end entity;

architecture rtl of dual_clock_fifo is
 type memory_t is array (0 to (2**ADDR_WIDTH)-1) of std_logic_vector(DATA_WIDTH-1 downto 0);
 signal mem : memory_t;

 signal wr_ptr, rd_ptr : unsigned(ADDR_WIDTH-1 downto 0);
 signal wr_gray, rd_gray : unsigned(ADDR_WIDTH-1 downto 0);
 signal wr_count, rd_count : unsigned(ADDR_WIDTH downto 0); -- include overflow bit
 signal sync_wr_ptr, sync_rd_ptr : unsigned(ADDR_WIDTH-1 downto 0);
 signal sync_wr_count, sync_rd_count : unsigned(ADDR_WIDTH downto 0);
begin
 -- Write pointer and memory write
 process(wr_clk) begin
 if rising_edge(wr_clk) then
 if wr_rst = '1' then
 wr_ptr <= (others => '0');
 wr_count <= (others => '0');
 elsif wr_en = '1' and full = '0' then
 mem(to_integer(wr_ptr)) <= wr_data;
 wr_ptr <= wr_ptr + 1;
 wr_count <= wr_count + 1;
 end if;
 wr_gray <= (wr_ptr srl 1) xor wr_ptr; -- binary to gray
 end if;
 end process;

 -- Read pointer and memory read
 process(rd_clk) begin
 if rising_edge(rd_clk) then
 if rd_rst = '1' then
 rd_ptr <= (others => '0');
 rd_count <= (others => '0');
 elsif rd_en = '1' and empty = '0' then
 rd_count <= rd_count + 1;
 rd_ptr <= rd_ptr + 1;
 end if;
 rd_gray <= (rd_ptr srl 1) xor rd_ptr;
 end if;
 end process;

 -- Synchronize write pointer to read clock domain
 process(rd_clk) begin
 if rising_edge(rd_clk) then
 sync_wr_ptr <= wr_gray;
 end if;
 end process;

 -- Synchronize read pointer to write clock domain
 process(wr_clk) begin
 if rising_edge(wr_clk) then
 sync_rd_ptr <= rd_gray;
 end if;
 end process;

 -- Full and empty detection using gray-code pointers (simplified)
 -- Full when (wr_gray ~ sync_rd_ptr) and top two bits differ
 full <= '1' when (wr_gray(ADDR_WIDTH-1) /= sync_rd_ptr(ADDR_WIDTH-1) and
 wr_gray(ADDR_WIDTH-2 downto 0) = sync_rd_ptr(ADDR_WIDTH-2 downto 0)) else '0';
 empty <= '1' when (rd_gray = sync_wr_ptr) else '0';

 -- Almost flags (threshold defined by constants)
 almost_full <= '1' when wr_count >= 2**ADDR_WIDTH - 8 else '0';
 almost_empty <= '1' when rd_count <= 8 else '0';

 rd_data <= mem(to_integer(rd_ptr));
end rtl;

Bütünleşme ve Top-Level Wiring

Üst düzey mimaride, PLL, deserializer, FIFO ve depolama arayüzünü anında yapılandırın, sonra onları kutuplaşmaları ve saat yönlendirmesini kullanmaya dikkat edin.En iyi bir uygulama, ilgili alan saatlerine yollanan senkronizasyonu, asynchronous deassertleştiri, metastability kullanarak.

Test ve Doğrulama Strateji

Testbenches ile Simülasyon

Her modülü bağımsız olarak kullanın: FIFO'yu doğru okuma / yazma dizileri, akış / geçiş koşulları ve depolama noktası için bir bellek modeli oluşturmak için doğrulayın.*[Dönetici verileri ve tam sistem için çıktıyı doğrulayın.)

Timing Closure and Post-Placement Verification

sentez ve uygulamadan sonra, tüm saat domainleri boyunca statik zamanlama analizlerini çalıştırın.Çok döngüsüne özel dikkat edin (örneğin, bir saat döngüsünden sonra tamamlanmış olan bellek işlemleri) ve yanlış yollar (örneğin,Board-Level Signal Analysis-domain senkronize veya çekleri kullanarak satıcı raporları kullanın.

Donanım Geçerliliği

Benzer kaynaklarla FPGA geliştirme kurulunda (örneğin, Xilinx Kintex-7, Virtex-7 veya AMD Zynq UltraScale+) İndüktif test desenleri (örneğin, tekrarlanan bir rampa veya PRBS sıra) ADC girişi ve alınan verileri depolamadan sonra veya okumadan sonra test eder.

Uygulamaları ve Gerçek Dünya Örnekleri

  • [FONT:0)Radar ve Lidar Systems:[Dönetici:[Dönetici:0) Rekor ham I/Q verileri birkaç GHz örnekleme sonrası hedef algılama ve sınıflandırma için birkaç kanaldan elde edilen veriler. FPGAs gerçek zamanlı dijital alt-konksiyonu ve verileri SSD'lere geri getiriyor.
  • [FONT:0)Software-Defined Radio (SDR): [DFLT:1), Yüksek hızlı kayıtçılar geniş bant spektrumu (örneğin, 400 MHz anlık bant genişliği) yakalamak için daha sonraki müdahale modellerinin veya sinyal istihbarat analizleri için.
  • [FONT:0) Yüksek Enerji Fiziği: [DÜDÜT:1] CERN'de veya benzer tesislerde deneylerde, binlerce dektör kanalından veriler kısa patlamalar için kaydedilmelidir. FPGAs verileri toplar, zaman zamanlar toplar ve depolama sunucularına gitmeden önce DRAM'a yazılmalıdır.
  • [FONT:0)Medical Ultrasound:[Dönetici:[Dönetici:0) Gerçek zamanlı kirişli ve yüksek çözünürlüklü görüntü formlarının kanal başına on bir çok transdüser kanal yakalaması gerekir. FPGA- bazlı kayıt cihazı ham kanal verileri çevrimdışı rekon algoritmaları için.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Bir FPGA tabanlı yüksek hızlı veri kaydı, dijital tasarım, saat yönetimi, hafıza hiyerarşileri ve arayüz protokollerinin ayrıntılı bir şekilde kapatılmasını gerektiren sofistike bir mühendislik görevidir. VHDL, donanımın sınırlarında yeniden tasarlanabilir, herhangi bir yüksek hızlı satın alma yoluyla onlara stratejik yatırım ekosisteminde stratejik bir yatırım yaparak, en zorlu uygulamalarla ilgili kayıtları yaptırabilir.

Daha fazla okuma için, [[Dönetici:0)Xilinx Memory Resources Guide[Döneticiler için CFLT:2)Intel FPGA Yüksek Hızlı I/O Tasarım Kılavuzu[Döneticileri için [Döneticiler için [Döneticiler için [Döneticiler için)[Döneticiler için [Döneticiler için)[Döneticileri için)