Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Впервые собираю большой проект. Есть вопросы...
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
_Ivan_33
Всем привет.

Впервые собираю большой проект на ПЛИС, который будет использоваться для злых условий применения и поэтому хотелось сделать все нормально.
RTL модель что я написал будет использоваться на альтере и на ксайлинксе, но для начала я хочу сделать все нормально на ксайлинксе в силу некоторых причин...

Вопросы таковы:
1) Прочитал документ Synthesis and simulation design guide - ug626. Правильно ли я понимаю, что для определения правильности работы моего HDL описания устройства нужно провести 3 теста - функциональное моделирование(что есть правильность поведения моей модели без учета временных характеристик схемы, на которой она сделана - т.е. обыкновенный тестбенч), static timing analysis, но уже после place and route и определения ограничений проекта на частоты, входные и выходные задержки, false_paths и так далее, а также timing analysis, где мне нужно убедиться, что синтезатор мне синтезировал схему, которая подходит мне по времянкам и поведению и ничего не рушит. Т.е. я беру тестбенч из первого теста для всего проекта и завожу его на результат place and route в каком-нибудь isim or modelsim? Открыв вкладку процессов для исходника, я что то не нашел, как сделать этот тест?

2) В моем дизайне есть интерфесы i2c, spi как мастера. Точно знаю что нужно обконстрейнить их выходы и входы на задержки по клоку. Но генерируемый наружу клок он идет не напрямую с pll, а делается регистрами и еще не выходит через специальные пины кристалла для выхода клока. Это нормально или плохо? Нужно ли как-то сказать разводчику, чтобы он считал эти выходные клоки как клоки?

3) Clock domain crossing

Мне нужно передать слово из одного клокового домена с более медленным клоком в другое. Написал синхронизатор
CODE
module dac_synchronizer(
input clk_core,
input clk_dac,

input reset_n_core,
input reset_n_dac,


input [15:0] data_in,
input data_in_valid,

output [15:0] data_out,
output data_out_valid
);


reg [15:0] data_reg0;
reg [15:0] data_reg1;
reg [15:0] data_reg2;
reg data_valid_reg0;
reg data_valid_reg1;
reg data_valid_reg2;

reg fdbk_reg0;
reg fdbk_reg1;



always@(posedge clk_core)
begin
if(reset_n_core)
begin
if(data_in_valid)
begin
data_reg0 <= data_in;
data_valid_reg0 <= 1'b1;
end
else if(fdbk_reg1)
begin
data_valid_reg0 <= 1'b0;
end
end
else
begin
data_valid_reg0 <= 1'b0;
end
end


always@(posedge clk_core)
begin
if(reset_n_core)
begin
fdbk_reg0 <= data_valid_reg2;
fdbk_reg1 <= fdbk_reg0;
end
else
begin
fdbk_reg0 <= 1'b0;
fdbk_reg1 <= 1'b0;
end
end


always@(posedge clk_dac)
begin
data_reg1 <= data_reg0;
data_reg2 <= data_reg1;
end



always@(posedge clk_dac)
begin
if(reset_n_dac)
begin
data_valid_reg1 <= data_valid_reg0;
data_valid_reg2 <= data_valid_reg1;
end
else
begin
data_valid_reg1 <= 1'b0;
data_valid_reg2 <= 1'b0;
end
end

assign data_out = data_reg2;
assign data_out_valid = data_valid_reg2;


endmodule


Нормально, или еще что то добавить?

Чтобы не было ошибок в static timing analysis я должен использовать define_false_path
Там в хелпе написано, что нужно указать грубо говоря точку А и точку Б действия этого ограничения. Причем эти точки могут быть как и клоками, так и регистрами. Что туда указывать тогда?


Пока что все. Надеюсь на ваши советы, ибо спросить больше не у кого.
Спасибо!
tvcam
По третьему пункту не понятно:
data_reg1 <= data_reg0; один регистр на одной частоте второй на другой, если вы гарантируете что data_in_valid активна внутри clk_dac, т.е. когда активен сигнал data_in_valid не пройдёт изменения такта от clk_dac - тогда да работает.
Лучше обе частоты получить из pll или clk_dac получить из clk_core или через фифо.
Maverick
Цитата(_Ivan_33 @ Apr 17 2015, 12:03) *
Всем привет.
Спасибо!

чтобы убедиться в работоспособности описания достаточно промоделировать описание Вашей RTL схемы (без учета задержек в ПЛИС).
По поводу констрейнов у des00 в подписях есть статьи и там очень хорошо описаны задание констрейнов, правда для альтеры, но думаю если поймете, то для ксайлинса сделать будет не сложно.

iosifk
Цитата(_Ivan_33 @ Apr 17 2015, 12:03) *
Всем привет.

Впервые собираю большой проект на ПЛИС,
Нормально, или еще что то добавить?


Пока что все. Надеюсь на ваши советы, ибо спросить больше не у кого.
Спасибо!

Код написан как-то слишком витиевато... Никогда так не делаю... Так потом будет трудно сопровождать проект...
Надо строить описание проще и понятнее...
_Ivan_33
Цитата(tvcam @ Apr 17 2015, 13:30) *
По третьему пункту не понятно:
data_reg1 <= data_reg0; один регистр на одной частоте второй на другой, если вы гарантируете что data_in_valid активна внутри clk_dac, т.е. когда активен сигнал data_in_valid не пройдёт изменения такта от clk_dac - тогда да работает.
Лучше обе частоты получить из pll или clk_dac получить из clk_core или через фифо.


Так обе частоты у меня получаются через pll...
Такое я гарантировать не смогу...
Я читал книгу 100 power tips for fpga designers и там было вот это:

Нажмите для просмотра прикрепленного файла



Цитата(Maverick @ Apr 17 2015, 13:34) *
чтобы убедиться в работоспособности описания достаточно промоделировать описание Вашей RTL схемы (без учета задержек в ПЛИС).
По поводу констрейнов у des00 в подписях есть статьи и там очень хорошо описаны задание констрейнов, правда для альтеры, но думаю если поймете, то для ксайлинса сделать будет не сложно.


Работоспособность части кусков проверена даже в железе. Но ведь может такое быть, что синтезатор насинтезирует так, что все будет очень плохо...
Статьи посмотрю!


Цитата(iosifk @ Apr 17 2015, 13:51) *
Код написан как-то слишком витиевато... Никогда так не делаю... Так потом будет трудно сопровождать проект...
Надо строить описание проще и понятнее...


А можно вас попросить выложить какой-нибудь кусочек кода на верилог, дабы сравнить стили.
Вообще свой стиль я взял из книги Чу Понга по верилогу. Обычно пишу в одном блоке always все.
Как это можно изменить?
Jackov
Цитата(_Ivan_33 @ Apr 17 2015, 13:57) *
Работоспособность части кусков проверена даже в железе. Но ведь может такое быть, что синтезатор насинтезирует так, что все будет очень плохо...

Если функциональная модель работает, при этом после разводки все констрейны выдерживаются, то можно утверждать что проект будет рабочим.
dvladim
Цитата(Jackov @ Apr 17 2015, 17:37) *
Если функциональная модель работает, при этом после разводки все констрейны выдерживаются, то можно утверждать что проект будет рабочим.

Очень не сложно написать модель асинхронного FIFO, которая будет корректно моделироваться, проходить STA и при этом в железе работать далеко не всегда корректно (((
Это я к тому, что такие критерии ещё не гарантия.
Jackov
Цитата(dvladim @ Apr 17 2015, 21:11) *
Очень не сложно написать модель асинхронного FIFO, которая будет корректно моделироваться, проходить STA и при этом в железе работать далеко не всегда корректно (((
Это я к тому, что такие критерии ещё не гарантия.

Ну если какая-нибудь злая асинхронщина - то может быть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.