欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

基于FPGA的高速ADC接口設(shè)計

FPGA設(shè)計論壇 ? 來源:未知 ? 2023-08-28 14:30 ? 次閱讀

點擊上方藍(lán)字關(guān)注我們

ADC硬件特性分析

首先必須通過datasheet分析其核心參數(shù)接口定義和時序要求。ADC9481的采樣率為250MSPS,精度8bit。其原理結(jié)構(gòu)圖如下:

主要引腳說明:

CLK+-:差分時鐘輸入,信號頻率為250MHz

VIN+-:模擬信號輸入,范圍是1Vpp

VREF:電壓參考輸入/輸出,這里使用內(nèi)部固定參考電壓模式

SENSE:參考模式選擇

D7A~D0A:通道A數(shù)字信號輸出

D7B~D0B:通道B數(shù)字信號輸出

DCO+-:數(shù)字差分時鐘輸出,信號頻率為125MHz

S1:數(shù)據(jù)格式選擇,該接口電壓決定數(shù)格式時原碼還是補碼

PDWN:低功耗選通

接下來看看接口時序:

很容易看出A和B兩個數(shù)字輸出通道是交替輸出的,通道A在DCO+上升沿輸出,B在DCO-上升沿輸出。DCO+-的頻率僅是采樣率250MHz的一半,也就是降低了對數(shù)字系統(tǒng)處理速率的要求。

ADC接口設(shè)計

根據(jù)上述時序關(guān)系可知,FPGA端需要在DCO+上升沿采集通道B數(shù)據(jù),在DCO-上升沿采集通道A數(shù)據(jù)。并且由于在DCO+-同一變化沿時刻,通道A為前一個數(shù)據(jù),因此要注意數(shù)據(jù)的采集順序。這類數(shù)據(jù)采集的普遍做法是將數(shù)據(jù)存入到RAM中,然后利用本地時鐘同步。具體方法是:按照兩通道的數(shù)據(jù)順序?qū)?shù)據(jù)進(jìn)行拼接,之后緩存到異步FIFO中。本地PLL生成的125MHz時鐘作為讀側(cè)和后續(xù)處理時鐘信號。這里就要利用Xilinx FPGA的“原語”中的IBUFDS+BUFG,依次是差分輸入緩沖器和全局緩沖器。前者可將差分信號轉(zhuǎn)變?yōu)閱味诵盘?,后者則可讓時鐘信號到達(dá)FPGA內(nèi)部邏輯引腳的時延和抖動最小。綜上,ADC接口硬件架構(gòu)如圖:

HDL代碼編寫

根據(jù)前文所述的硬件架構(gòu),ADC接口HDL代碼如下:

  1 `timescale 1ns / 1ps
2
3 module adc_interface#(parameter WIDTH = 8,
4 FRAME_LEN = 512
5 //WAIT_CYC = 125_000_000//1s = 1000_000_000ns 1000_000_000/8 = 125_000_000
6 )
7 (
8 input clk0, //125MHZ
9 input clk1,
10
11 input [WIDTH-1:0] da,
12 input [WIDTH-1:0] db,
13 output adc_pd,//省電模式選擇
14
15 output pll_ce,
16 output pll_rst_n,
17 output pen,
18
19 input user_clk,//125MHZ
20 input rst_n,
21 input en,
22 output reg [WIDTH*2-1:0] dout = 0,
23 output reg dout_vld = 0
24 );
25
26 function integer clogb2 (input integer bit_depth);
27 begin
28 for(clogb2=0; bit_depth>0; clogb2=clogb2+1)
29 bit_depth = bit_depth >> 1;
30 end
31 endfunction
32
33 localparam DATA_CNT_W = clogb2(FRAME_LEN-1);
34
35 (*DONT_TOUCH = "true"*)reg setup_flag = 0;
36 reg [WIDTH-1:0] data_a = 0,data_b = 0;
37 reg data_a_vld = 0,data_b_vld = 0;
38 reg wr_en = 0;
39 reg [WIDTH*2-1:0] wr_data = 0;
40 reg rd_en = 0;
41 wire empty;
42 wire full;
43 wire [WIDTH*2-1:0] rd_data;
44 (*DONT_TOUCH = "true"*)wire en_pos;
45 (*DONT_TOUCH = "true"*)reg [ (DATA_CNT_W-1):0] data_cnt =0 ;
46 wire add_data_cnt ;
47 wire end_data_cnt ;
48 reg en_r0 = 0,en_r1 = 0,en_r2 = 0,en_r3 = 0;
49
50 assign pll_ce = 1'b1;
51 assign pll_rst_n = 1'b1;
52 assign adc_pd = 1'b0;
53 assign pen = 1'b1;
54
55 /***************************采集觸發(fā)**************************************/
56 //異步處理
57 always@(posedge clk0)begin
58 en_r0 <= en;
59 en_r1 <= en_r0;
60 en_r2 <= en_r1;
61 en_r3 <= en_r2;
62 end
63
64 assign en_pos = en_r2 == 1'b1 && en_r3 == 1'b0;
65
66 always @(posedge clk0 or negedge rst_n)begin
67 if(rst_n==1'b0)begin
68 setup_flag <= 0;
69 end
70 else if(end_data_cnt)
71 setup_flag <= 0;
72 else if(en_pos)begin
73 setup_flag <= 1'b1;
74 end
75 end
76
77 always @(posedge clk0 or negedge rst_n) begin
78 if (rst_n==0) begin
79 data_cnt <= 0;
80 end
81 else if(add_data_cnt) begin
82 if(end_data_cnt)
83 data_cnt <= 0;
84 else
85 data_cnt <= data_cnt+1 ;
86 end
87 end
88 assign add_data_cnt = (setup_flag);
89 assign end_data_cnt = add_data_cnt && data_cnt == (FRAME_LEN)-1 ;
90
91
92 /***************************clk0(dco_p)采集DB**************************************/
93 always@(posedge clk0 or negedge rst_n)begin
94 if(rst_n == 0)
95 data_b <= 0;
96 else
97 data_b <= db;
98 end
99
100 always@(posedge clk0 or negedge rst_n)begin
101 if(rst_n == 0)
102 data_b_vld <= 0;
103 else if(setup_flag)
104 data_b_vld <= 1'b1;
105 else
106 data_b_vld <= 0;
107 end
108
109 /****************************clk1(dco_n)采集DA**************************************/
110 always @(negedge clk0 or negedge rst_n)begin
111 if(rst_n==1'b0)begin
112 data_a <= 0;
113 end
114 else begin
115 data_a <= da;
116 end
117 end
118
119 always@(negedge clk0 or negedge rst_n)begin
120 if(rst_n == 0)begin
121 data_a_vld <= 0;
122 end
123 else if(setup_flag)begin
124 data_a_vld <= 1'b1;
125 end
126 else
127 data_a_vld <= 0;
128 end
129 /****************************FIFO寫邏輯**************************************/
130 //FIFO:width 16bit depth 16 async
131
132 always @(negedge clk0 or negedge rst_n)begin
133 if(rst_n==1'b0)begin
134 wr_en <= 0;
135 end
136 else if(data_a_vld & data_b_vld)begin
137 wr_en <= 1'b1;
138 end
139 else
140 wr_en <= 0;
141 end
142
143 always @(negedge clk0 or negedge rst_n)begin
144 if(rst_n==1'b0)begin
145 wr_data <= 0;
146 end
147 else begin
148 wr_data <= {data_b,data_a};//高字節(jié)為后一個數(shù)據(jù)
149 end
150 end
151
152 /****************************FIFO讀側(cè)邏輯**************************************/
153 //非空即讀
154 always@(*)begin
155 if(~empty)
156 rd_en = 1'b1;
157 else
158 rd_en = 0;
159 end
160
161 always @(posedge user_clk or negedge rst_n)begin
162 if(rst_n == 0)
163 dout <= 0;
164 else
165 dout <= rd_data;
166 end
167
168 always @(posedge user_clk or negedge rst_n)begin
169 if(rst_n == 0)
170 dout_vld <= 0;
171 else if(rd_en)begin
172 dout_vld <= 1'b1;
173 end
174 else
175 dout_vld <= 0;
176 end
177
178
179 //FIFO instance
180 fifo_generator_2 interface_fifo (
181 .wr_clk(~clk0), // input wire wr_clk
182 .rd_clk(user_clk), // input wire rd_clk
183 .din(wr_data), // input wire [15 : 0] din
184 .wr_en(wr_en), // input wire wr_en
185 .rd_en(rd_en), // input wire rd_en
186 .dout(rd_data), // output wire [15 : 0] dout
187 .full(full), // output wire full
188 .empty(empty), // output wire empty
189 .rd_data_count(rd_data_count), // output wire [3 : 0] rd_data_count
190 .wr_data_count(wr_data_count) // output wire [3 : 0] wr_data_count
191 );
192
193
194 endmodule

頂層模塊代碼:

  1 `timescale 1ns / 1ps
2
3 module top#(parameter DATA_W = 8,//改動參數(shù)需要重新配置IP核
4 CHANNEL_NUM = 2)
5 (
6 input dco_p,//125MHZ
7 input dco_n,
8 input [DATA_W-1:0] adc_p1,//通道A
9 input [DATA_W-1:0] adc_p2,//通道B
10 output adc_pd,
11 output pll_ce,
12 output pll_rst_n,
13 output pen,
14
15 //user interface signals
16
17 input clk,//100M
18 input rst_n,
19 input en//上升沿有效 有效一次則將之后采集到的一幀數(shù)據(jù)寫入到FFT模塊進(jìn)行運算
20 );
21 /*********************************parameters*******************************************/
22 function integer clogb2 (input integer bit_depth);
23 begin
24 for(clogb2=0; bit_depth>0; clogb2=clogb2+1)
25 bit_depth = bit_depth >> 1;
26 end
27 endfunction
28
29 localparam FFT_W = 20,
30 FFT_N = 1024,
31 DATA_EACH_CHANNEL = FFT_N/CHANNEL_NUM;
32
33 //log2
34 localparam DECH_W = clogb2(DATA_EACH_CHANNEL-1);
35
36
37 /*********************************variables*******************************************/
38 genvar ii;
39 wire clk_out0,locked0;
40 reg locked0_r0 = 0,locked0_r1 = 0;
41 wire clk_user;
42 wire dco;
43 wire dco_bufg;
44
45 wire [DATA_W*2-1:0] data_adc;
46 wire data_adc_vld;
47 (*DONT_TOUCH = "true"*)wire [DATA_W*2-1:0] din;
48 (*DONT_TOUCH = "true"*)wire din_vld;
49 wire din_sop,din_eop;
50 reg [ (DECH_W-1):0] data_cnt =0 ;
51 wire add_data_cnt ;
52 wire end_data_cnt ;
53
54 /******************************clock generators****************************************/
55
56 //user clock generator
57 clk_wiz_0 user_clock_gen
58 (
59 // Clock out ports
60 .clk_out1(clk_out0), // output clk_out0 125MHZ
61 // Status and control signals
62 .locked(locked0), // output locked
63 // Clock in ports
64 .clk_in1(clk)); // input clk_in1 100MHZ
65
66 //pll lock信號同步
67 always@(posedge clk_out0)begin
68 locked0_r0 <= locked0;
69 locked0_r1 <= locked0_r0;
70 end
71
72 assign clk_user = clk_out0 & locked0_r1;
73
74
75 // ADC clock generator
76 IBUFDS #(
77 .DIFF_TERM("FALSE"),
78 .IBUF_LOW_PWR("FALSE"),
79 .IOSTANDARD("DEFAULT")
80 ) IBUFDS_inst (
81 .O(dco),
82 .I(dco_p),
83 .IB(dco_n)
84 );
85
86 BUFG BUFG_inst(
87 .O(dco_bufg),
88 .I(dco)
89 );
90
91 /**********************************ADC interface module***********************************/
92 adc_interface#(.WIDTH(DATA_W),
93 .FRAME_LEN(DATA_EACH_CHANNEL))
94 u_adc_interface
95 (
96 //adc -> fpga
97 . clk0 (dco_bufg) , //125MHZ 與dco_p同相
98 . clk1 (~dco_bufg), //125MHZ 與dco_n反相
99 . da (adc_p1) ,
100 . db (adc_p2) ,
101 //fpga -> adc
102 . adc_pd (adc_pd) ,//省點模式選擇
103 . pll_ce (pll_ce) ,
104 . pll_rst_n (pll_rst_n) ,
105 . pen (pen),
106 //user
107 . user_clk (clk_user),//125MHZ
108 . rst_n (rst_n),
109 . dout (data_adc),//debug
110 . dout_vld (data_adc_vld),
111 . en (en)//上升沿有效
112 );
113 //data counter
114 always @(posedge clk_user or negedge rst_n) begin
115 if (rst_n==0) begin
116 data_cnt <= 0;
117 end
118 else if(add_data_cnt) begin
119 if(end_data_cnt)
120 data_cnt <= 0;
121 else
122 data_cnt <= data_cnt+1 ;
123 end
124 end
125
126 assign add_data_cnt = data_adc_vld ;
127 assign end_data_cnt = add_data_cnt && data_cnt == (DATA_EACH_CHANNEL)-1 ;
128
129 //input data to the user defined logic
130 assign din_sop = add_data_cnt && data_cnt == 0;
131 assign din_eop = end_data_cnt;
132 assign din = data_adc;
133 assign din_vld = data_adc_vld;
134
135
136 //user logic end
137
138 endmodule

上述代碼是之前做ADC采集信號頻譜分析的部分代碼,因此adc_interface模塊中每觸發(fā)一次則連續(xù)采集一幀數(shù)據(jù)長度,用于FFT運算。用戶可以根據(jù)項目需求自行改動。頂層模塊中則例化IBUFDS+BUFG原語,以及后續(xù)的自定義處理模塊。

板級調(diào)試

行為仿真是FPGA開發(fā)中必不可少的重要環(huán)節(jié),通過充分測試可節(jié)省很多調(diào)試時間,這里僅給出板級調(diào)試結(jié)果。信號發(fā)生器產(chǎn)生三角波,利用ILA抓取芯片內(nèi)部實時數(shù)據(jù),并以模擬形式顯示:

由于在接口模塊中將兩通道輸入拼接為一個數(shù)據(jù),這里拆分后觀察數(shù)據(jù)數(shù)值。可見拼接后數(shù)據(jù)波形呈現(xiàn)三角波形狀,且幅值增大過程中高字節(jié)較大,幅值降低過程中高字節(jié)較小,說明數(shù)據(jù)拼接順序無誤,高字節(jié)為當(dāng)前節(jié)拍后一個采樣數(shù)據(jù)。兩路輸出數(shù)據(jù)最高位為0,證明輸出數(shù)據(jù)格式是自然二進(jìn)制數(shù)。

若想細(xì)致地觀察數(shù)據(jù)的模擬形狀,可以通過靈活的TCL腳本將ILA抓取數(shù)據(jù)導(dǎo)出,并在MATLAB中查看。TCL命令為:

write_hw_ila_data E:/fpga_files/wave_file.csv [upload_hw_ila_data hw_ila_1] -csv_file –forcewave

命令格式是:write_hw_ila_data <文件路徑及文件名> [upload_hw_ila_data ] -csv_file -forcewave。鍵入該命令后,指定路徑下會產(chǎn)生CSV文件。如讓信號發(fā)生器產(chǎn)生頻率為1MHz,峰峰值是1Vpp,偏移幅值是0.7V的正弦波。導(dǎo)出ILA抓取數(shù)據(jù),并在MATLAB中繪制曲線如圖:



有你想看的精彩



至芯科技FPGA就業(yè)培訓(xùn)班——助你步入成功之路、8月12號西安中心開課、歡迎咨詢!
基于FPGA的CNN加速項目案例解析
FPGA高級設(shè)計之實現(xiàn)功耗優(yōu)化





掃碼加微信邀請您加入FPGA學(xué)習(xí)交流群




歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!


點個在看你最好看





原文標(biāo)題:基于FPGA的高速ADC接口設(shè)計

文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    1630

    文章

    21800

    瀏覽量

    606276

原文標(biāo)題:基于FPGA的高速ADC接口設(shè)計

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    JESD204B有專用于ADC/DAC和FPGA或ASIC的接口嗎?

    請問各位大俠:JESD204B專用于ADC/DAC和FPGA或ASIC的接口嗎,該接口同Rapid/PCIe的物理層Serdes接口有何區(qū)
    發(fā)表于 02-08 09:10

    請教ADC12D1800RFRBEVM板問題

    FPGA我們有,它和AD接口是FMC,你們ADC12D1800RFRB上也有FMC接口,二者是否能銜接將高速數(shù)據(jù)直接給我的
    發(fā)表于 01-21 07:43

    高速ADC、DAC與處理器之間是怎么通信的呢?

    一般低速的ADC、DAC通過串行通信接口,比如SPI與處理器/DSP通信,但高速ADC、DAC與處理器之間是怎么通信的呢
    發(fā)表于 01-10 08:30

    AN-813: ADSP-BF533/ADSP-BF561 Blackfin處理器與高速并行ADC接口

    電子發(fā)燒友網(wǎng)站提供《AN-813: ADSP-BF533/ADSP-BF561 Blackfin處理器與高速并行ADC接口.pdf》資料免費下載
    發(fā)表于 01-06 14:36 ?0次下載
    AN-813: ADSP-BF533/ADSP-BF561 Blackfin處理器與<b class='flag-5'>高速</b>并行<b class='flag-5'>ADC</b><b class='flag-5'>接口</b>

    ADC07D1520評估板的FMC接口是HPC的對嗎?

    您好,ADC07D1520評估板的FMC接口是HPC的對嗎?可以連接具有LPC接口FPGA板子嗎?
    發(fā)表于 12-13 14:56

    ADC3663輸出SLVDS差分電壓超過FPGA接口LVDS接口的輸入電壓范圍,如何處理?

    根據(jù)ADC3663手冊,輸出格式為SLVDS,VCM=1.0V, VOD=500mV(min),700mV(typ), 850mV(max). 而FPGA通常LVDS接口(輸入)VIDIFF最大
    發(fā)表于 11-27 06:23

    高速adc與低功耗adc的區(qū)別

    在現(xiàn)代電子系統(tǒng)中,模數(shù)轉(zhuǎn)換器(ADC)是將模擬信號轉(zhuǎn)換為數(shù)字信號的關(guān)鍵組件。隨著技術(shù)的發(fā)展,對ADC的需求也在不斷變化。一方面,高速ADC能夠快速處理信號,適用于需要快速響應(yīng)的應(yīng)用;另
    的頭像 發(fā)表于 11-19 16:10 ?645次閱讀

    高速ADCFPGA的LVDS數(shù)據(jù)接口中避免時序誤差的設(shè)計考慮

    電子發(fā)燒友網(wǎng)站提供《高速ADCFPGA的LVDS數(shù)據(jù)接口中避免時序誤差的設(shè)計考慮.pdf》資料免費下載
    發(fā)表于 10-15 09:50 ?6次下載
    <b class='flag-5'>高速</b><b class='flag-5'>ADC</b>與<b class='flag-5'>FPGA</b>的LVDS數(shù)據(jù)<b class='flag-5'>接口</b>中避免時序誤差的設(shè)計考慮

    同步與多個FPGA接口的千兆樣本ADC

    電子發(fā)燒友網(wǎng)站提供《同步與多個FPGA接口的千兆樣本ADC.pdf》資料免費下載
    發(fā)表于 10-10 11:32 ?0次下載
    同步與多個<b class='flag-5'>FPGA</b><b class='flag-5'>接口</b>的千兆樣本<b class='flag-5'>ADC</b>

    高速數(shù)據(jù)接口適用于半導(dǎo)體測試中的精密高速ADC

    電子發(fā)燒友網(wǎng)站提供《高速數(shù)據(jù)接口適用于半導(dǎo)體測試中的精密高速ADC.pdf》資料免費下載
    發(fā)表于 09-07 11:07 ?0次下載
    <b class='flag-5'>高速</b>數(shù)據(jù)<b class='flag-5'>接口</b>適用于半導(dǎo)體測試中的精密<b class='flag-5'>高速</b><b class='flag-5'>ADC</b>

    FPGA的sata接口設(shè)計時需要注意哪些問題

    FPGA的SATA接口設(shè)計時,需要注意以下幾個方面的問題,以確保設(shè)計的穩(wěn)定性和性能: 接口版本和速度 : SATA有三代標(biāo)準(zhǔn),分別為SATA I(1.5 Gb/s)、SATA II(3.0 Gb
    發(fā)表于 05-27 16:20

    FPGA的PCIE接口應(yīng)用需要注意哪些問題

    的交互。 熱設(shè)計功率(TDP)和電源管理 : 在FPGA上運行高速PCIe接口會產(chǎn)生相當(dāng)?shù)臒崃?,需要適當(dāng)?shù)纳岽胧﹣肀3中阅堋_^熱可能導(dǎo)致設(shè)備性能下降甚至損壞。同時,FPGA和連接的
    發(fā)表于 05-27 16:17

    FPGA高速接口應(yīng)用注意事項

    FPGA高速接口應(yīng)用注意事項主要包括以下幾個方面: 信號完整性與電磁兼容性(EMC) : 在設(shè)計FPGA高速
    發(fā)表于 05-27 16:02

    紫光的FPGA哪些系列支持高速接口?

    紫光的FPGA哪些系列支持高速接口?相關(guān)接口有哪些免費的IP可以使用呢?性能怎么樣?
    發(fā)表于 03-20 16:58

    如何使用FPGA驅(qū)動并行ADC和并行DAC芯片?

    ADC和DAC是FPGA與外部信號的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口高速的并行
    的頭像 發(fā)表于 02-22 16:15 ?4123次閱讀
    如何使用<b class='flag-5'>FPGA</b>驅(qū)動并行<b class='flag-5'>ADC</b>和并行DAC芯片?