реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AD9254 и Cyclone IV
Grizzzly
сообщение Aug 9 2013, 12:01
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Не получается получить верные данные с АЦП AD9254. Отладочная плата Terasic.
На вход АЦП подаю синус частотой 10 МГц с внешнего генератора, данные с выхода АЦП передаю на ЦАП DAC5672. На спектроанализаторе смотрю данные с ЦАП.
Если входное напряжение маленькое (до 5 мВ), то присутствует пик на 10 МГц. При увеличении напряжения хотя бы на 1 мВ появляются паразитные гармоники на кратных частотах, т.е. 20, 30, ... МГц. На плате генератор 50 МГц, тактовая частота, на которой работают плата, ЦАП и АЦП, - 100 МГц. Получена с помощью PLL.
Файл .sdc:
CODE
create_clock -period 20 [get_ports OSC_50[0]]
create_clock -period 20 [get_ports OSC_50[1]]
create_clock -period 20 [get_ports OSC_50[2]]

create_clock -period 10 [get_ports ADA_DCO]
create_clock -period 10 [get_ports FPGA_CLK_A_P]
create_clock -period 10 [get_ports FPGA_CLK_A_N]
#**************************************************************
# Create Generated Clock
#**************************************************************
derive_pll_clocks

# Set Clock Uncertainty
#**************************************************************
derive_clock_uncertainty

Сам проект:
CODE
module adc
(
OSC_50,
ADA_DCO,
AD,
DA,
FPGA_CLK_A_N,
FPGA_CLK_A_P,
ADA_OE,
ADA_SPI_CS,
J1_152,
XT_IN_N,
XT_IN_P
);

input [2:0] OSC_50;
input ADA_DCO;
input [13:0] AD;
inout FPGA_CLK_A_N;
inout FPGA_CLK_A_P;
output ADA_OE;
output ADA_SPI_CS;


wire sys_clk;
wire sys_clk_90deg;
wire sys_clk_180deg;
wire sys_clk_270deg;
wire pll_locked;

reg [13:0] per_a2da_d;
reg [13:0] ddd;

assign ADA_OE = 1'b0; // enable ADA output

assign ADA_SPI_CS = 1'b1; // disable ADA_SPI_CS (CSB)

inout J1_152;
input XT_IN_N;
input XT_IN_P;

output [13:0] DA;
assign FPGA_CLK_A_N = ~sys_clk_180deg;
assign FPGA_CLK_A_P = sys_clk_180deg;
//assign FPGA_CLK_B_P = sys_clk_270deg;
//assign FPGA_CLK_B_N = ~sys_clk_270deg;

//--- pll
pll pll_inst(
.inclk0(OSC_50[0]),
.c0(sys_clk),
.c1(sys_clk_90deg),
.c2(sys_clk_180deg),
.c3(sys_clk_270deg),
.locked(pll_locked)
);

always @(posedge ADA_DCO)
begin
per_a2da_d <= AD;
end

assign DA = ddd;

always @(posedge sys_clk)
begin
ddd <= per_a2da_d;
end
endmodule

В даташите написано, что Vpp = 2 В, а у меня уже при 6 мВ появляются нелинейные искажения. Подскажите, пожалуйста, что я неверно делаю?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 9 2013, 13:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Посмотреть, что этих гармоник нет на выходе генератора.
Посмотреть соотношение фаз частот ADA_DCO и sys_clk.
Пропустить ADA_DCO через 1:1 PLL в source-synchronous режиме, ибо АЦП выдаёт клок одновременно с данными, а в FPGA у них пути совершенно разные, поэтому компенсация как минимум не повредит.
Я последнее: я у вас нигде что-то не вижу, где формируется тактовая частота DAC.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Aug 9 2013, 13:15
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Спасибо большое!
На выходе генератора этих гармоник нет. Проверялось. На АЦП и ЦАП подаются одинаковые частоты FPGA_CLK_A_P и FPGA_CLK_A_P. На дополнительной плате - data connection card - они подводятся сразу и к DAC, и к ADC. Да, с фазами надо будет разобраться. Буду внимательно смотреть на фазовые соотношения.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 9 2013, 14:13
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Grizzzly @ Aug 9 2013, 16:15) *
На АЦП и ЦАП подаются одинаковые частоты FPGA_CLK_A_P и FPGA_CLK_A_P.

Это тоже неправильно. Данные у вас выходят с регистра, клок - с выхода PLL, пути разные. Данные, которые захлопнуты фронтом клока выйдут на лапы совершенно необязательно одновременно с фронтом этого клока. Надо делать так: данные выпускать как у вас (только констрейнами загнать эти триггеры в лапы), а клок выдавать через DDR триггер, на который подан сам клок, на верхний триггер подана всегда 1, а на нижний - 0 (или наоборот, в зависимости от необходимой фазы). Таким образом времянка прохождения данных и клока становится строго одинаковой (и то, и то идёт с триггеров в лапах).
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Aug 11 2013, 19:42
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Спасибо огромное за помощь! К сожалению, у меня нет большого опыта работы с ПЛИС, только что институт закончил. Не понял про "триггеры в лапах" и DDR... Когда учился, работал на полставки, но там в основном генерировал VHDL/Verilog из MATLAB под Xilinx, а АЦП и ЦАП были другими.
Сейчас разбираюсь с примерами к отладочной плате. Этот SDC, частично изменив, брал оттуда. Значит, где-то ошибся.
Подскажите, пожалуйста, как это реализовать.
P. S. Реализую QPSK модулятор и демодулятор. По теории и алгоритмической реализации всё понятно. А вот с "железом" пока трудновато.

Сообщение отредактировал Grizzzly - Aug 11 2013, 19:47
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 12 2013, 06:52
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



DDR - это просто мегафункция, ddio_out. Реализует вывод по двум фронтам. Чтобы триггеры загнать в лапы - в Assignmebt Editor используйте Fast output trigger on. Ну и в документации почитайте, что это такое.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Aug 14 2013, 06:24
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Спасибо за помощь. Оказывается, основная проблема была в другом. АЦП выдает данные в формате signed, а ЦАП работает с unsigned данными. Нужно было инвертировать старший бит.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 02:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016