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

 
 
 
Reply to this topicStart new topic
> Как правильно записать констрейны интерфейса АЦП с ПЛИС
limbast
сообщение Jul 6 2018, 10:56
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 28-01-05
Пользователь №: 2 252



Здравствуйте.
Делаю проект чтения данных с АЦП ADS9110 плиской MAX10.
Входные сигналы АЦП: CNVST, CS, SCLK, SDO и SDI.
Один модуль сначала конфигурирует АЦП, формируя сигналы CS, SCLK и SDI (выходной сигнал для ПЛИС), после этого начинает работать постоянно модуль чтения данных, формируя CNVST (2МГц), CS (2Мгц), SCLK (50МГц) и считывая данные по линиям SDO. Сигналы CS и SCLK объединяются по И и выдаются на пин mosi_ADS9110.
Как теперь это всё хозяйство описать констрейнами?
Т.к. сигнал SCLK формируется из основного клока ПЛИС, то его описание не вызывает вопросов. Так же нет вопросов при описании выходного сигнала SDI для АЦП (mosi_ADS9110), задержки указаны в datasheet.
tsu_CKDI - Setup time: SDI data valid to the SCLK capture edge - 1.2ns
tht_CKDI - Hold time: SCLK capture edge to (previous) data valid on SDI - 0.65ns

create_clock -period 20.000 -name {clk_50MHz_in} [get_ports {clk_50MHz_in}]
create_generated_clock -source {generator|altpll_component|auto_generated|pll1|inclk[0]} -multiply_by 2 -duty_cycle 50.00 -name CLK_100MHz {generator|altpll_component|auto_generated|pll1|clk[0]}
derive_clock_uncertainty
create_generated_clock -source {generator|altpll_component|auto_generated|pll1|clk[0]} -divide_by 2 -name ADC_CONF_CLK {adc_config:adc_conf|sck} #клок модуля конфигурирования
create_generated_clock -source {generator|altpll_component|auto_generated|pll1|clk[0]} -divide_by 2 -name ADC_MEAS_CLK {adc_read_quadSPI:adc_meas|sck} #клок модуля чтения
set_output_delay -clock [get_clocks {adc_config:adc_conf|sck}] -max 1.2 [get_ports {mosi_ADS9110}]
set_output_delay -clock [get_clocks {adc_config:adc_conf|sck}] -min -0.65 [get_ports {mosi_ADS9110}]


Теперь нужно как то описать минимальные задержки от спада CS до первого фронта SCLK и данных, и так же для фронта CS.
Т.е. в этом случае, в моем понимании, CS является клоком для сигнала SCLK и данных. Вот тут я не понимаю правильно ли я думаю. Если правильно, то создать виртуальный клок и описать задержки.

Сообщение отредактировал limbast - Jul 6 2018, 10:57
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 6 2018, 10:59
Сообщение #2


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

Группа: Свой
Сообщений: 1 959
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



deleted
Go to the top of the page
 
+Quote Post
limbast
сообщение Jul 6 2018, 11:01
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 28-01-05
Пользователь №: 2 252



Конечно. Но то ли АЦП не такие, то ли в поиске я полный профан
Реализация интерфейса у меня не вызывает вопросов, вызывает вопросы описание констрейнов этого интерфейса. TimeQuest сигнализирует о unconstrained входах, выходах и путях:
Illegal Clocks - 0
Unconstrained Clocks - 0
Unconstrained Input Ports - 1
Unconstrained Input Port Paths - 1
Unconstrained Output Ports - 7
Unconstrained Output Port Paths - 17

Хотелось бы все сделать по уму.

Сообщение отредактировал limbast - Jul 6 2018, 11:13
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 6 2018, 11:46
Сообщение #4


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

Группа: Свой
Сообщений: 1 959
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(limbast @ Jul 6 2018, 14:01) *
Хотелось бы все сделать по уму.
Жедание разделить конфигурацию и чтение данных понятно, но оно выливается в мультиплексирование сигналов и пляску с констейнами.
Если всё делается на одном клоке, то проблема непонятна. Сделайте так, чтобы были задействованы триггеры в IOB для всех выходных сигналов. Тогда их констрейнить не придётся.
Go to the top of the page
 
+Quote Post
limbast
сообщение Jul 9 2018, 06:17
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 28-01-05
Пользователь №: 2 252



Цитата(andrew_b @ Jul 6 2018, 14:46) *
Желание разделить конфигурацию и чтение данных понятно, но оно выливается в мультиплексирование сигналов и пляску с констрейнами.

Все делается в одном клоке 100МГц.
CODE

module adc_read_quadSPI(clk,start,rstb,done,sck,din,cs,dout);

input clk; //входные тактовые импульсы
input start; //запуск передачи
input rstb; //отмена передачи
output done;//флаг завершения приема
output sck; //выходные тактовые импульсы,0-исхдное состояние,переход 0->1 запись данных в АЦП
input[3:0] din; //входные данные
output cs; //1-исходное состояние,0-активный уровень
output[17:0] dout; //выходные данные

reg[19:0] rreg; //20 битный регистр данных
reg[2:0] cur,nxt; //регистры состояний
reg[2:0] nbit;
reg clr,shift;
reg cs,done,sck;
wire[3:0] din;

wire signed[17:0] dout;

assign dout[17:0]=$signed(rreg[19:2]);

parameter idle=3'b000,send=3'b001,finish=3'b010,done_state=3'b011,cs_set=3'b100;

//STATE MACHINE:
//state transistion
always@(negedge clk or posedge rstb)
begin
if(rstb==1'b1)
cur=finish;
else
cur=nxt;
end

//FSM I/O
//always @(start or cur or nbit)
always @(*)
begin
nxt=cur;
clr=0;
shift=0;
done=0;
cs=1;
case(cur)
idle:
begin
if(start==1'b1)
begin
cs=0;
shift=1;
nxt=send;
end
end //idle
send:
begin
cs=0;
if(nbit!=3'd5)
shift=1;
else
nxt=done_state;
end//send
done_state:
begin
clr=1;
cs=0;
nxt=cs_set;
end
cs_set:
begin
nxt=finish;
done=1;
clr=1;
end
finish:
begin
clr=1;
nxt=idle;
end//finish
default
nxt=finish;
endcase
end//always

//CLOCK GENERATOR BLOCK:
always@(negedge clk or posedge clr)
begin
if(clr==1'b1)
sck=0;
else
begin
if(shift==1'b1)
sck=~sck;
end //rst
end

always@(posedge sck or posedge clr)
begin
if(clr==1'b1)
nbit<=0;
else
begin
nbit<=nbit+1'd1;
rreg<={rreg[15:0],din[3],din[2],din[1],din[0]};
end
end
endmodule

Даже если я оставляю один любой блок, убрав мультиплексирование, TimeQuest ругается на те же самые неконстрейненные выводы. Дело не в мультиплексировании, нужно описать констрейны выводов.
Как описать задержки от спада CS до первого фронта SCLK и MOSI, и так же от спада последнего импульса SCLK и удержание данный MOSI до фронта CS.
Цитата(andrew_b @ Jul 6 2018, 14:46) *
Сделайте так, чтобы были задействованы триггеры в IOB для всех выходных сигналов. Тогда их констрейнить не придётся.

А вот про это поподробней можно? Где это делается? В Assignment Editor только вижу Fast Output (Enable) Register. Его включение вопрос не решило.

Сообщение отредактировал limbast - Jul 9 2018, 06:54
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 9 2018, 06:40
Сообщение #6


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

Группа: Свой
Сообщений: 1 959
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(limbast @ Jul 9 2018, 09:17) *
Все делается в одном клоке 100МГц.
Вы экономите на пробелах? Это читать больно. К тому же кщё и Верилог (но это личное).
Цитата
А вот про это поподробней можно? Где это делается? В Assignment Editor только вижу Fast Output (Enable) Register.
Да, это оно.
Цитата
Его включение вопрос не решило.
Смотря какой вопрос. Чтобы этот триггер был задействован, надо выполнить определённые условия. У Альтеры были рекомендации, как писать код для этого.
Если вы этот триггер таки задействовали, то там в принципе нечего констрейнить. Вам мозолят глаза варниги? Забейте. Триггер вы всё равно никуда не сдвинете.
Go to the top of the page
 
+Quote Post
limbast
сообщение Jul 9 2018, 07:11
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 28-01-05
Пользователь №: 2 252



Цитата(andrew_b @ Jul 9 2018, 09:40) *
Вы экономите на пробелах? Это читать больно.

Поправил немного.

Цитата(andrew_b @ Jul 9 2018, 09:40) *
Если вы этот триггер таки задействовали, то там в принципе нечего констрейнить. Вам мозолят глаза варниги? Забейте. Триггер вы всё равно никуда не сдвинете.

После добавления этих строк с Fast Output Register unconstrained в TimeQuest количество output не изменилось. Значит этого мало.
На варнинги я бы может и забил, но проект работает на тактовой частоте 50МГц, а вот на частоте 100МГц АЦП уже чушь меряет. Частота SPI при этом 50МГц, хотя АЦП до 75МГц работает, и хотя осциллограф 160МГц, все равно на таких частотах уже наносекунды не выловить. Поэтому рассчитываю, что описав констрейны я увижу где косяк.

Сообщение отредактировал limbast - Jul 9 2018, 07:11
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th August 2018 - 13:40
Рейтинг@Mail.ru


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