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

 
 
 
Reply to this topicStart new topic
> Впервые собираю большой проект. Есть вопросы..., по workflow, constraints, cdc...
_Ivan_33
сообщение Apr 17 2015, 09:03
Сообщение #1


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



Всем привет.

Впервые собираю большой проект на ПЛИС, который будет использоваться для злых условий применения и поэтому хотелось сделать все нормально.
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
Там в хелпе написано, что нужно указать грубо говоря точку А и точку Б действия этого ограничения. Причем эти точки могут быть как и клоками, так и регистрами. Что туда указывать тогда?


Пока что все. Надеюсь на ваши советы, ибо спросить больше не у кого.
Спасибо!
Причина редактирования: Используйте codebox для оформления больших сегментов кода (с) модератор


--------------------
Go to the top of the page
 
+Quote Post
tvcam
сообщение Apr 17 2015, 09:30
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 10-12-04
Из: spb
Пользователь №: 1 435



По третьему пункту не понятно:
data_reg1 <= data_reg0; один регистр на одной частоте второй на другой, если вы гарантируете что data_in_valid активна внутри clk_dac, т.е. когда активен сигнал data_in_valid не пройдёт изменения такта от clk_dac - тогда да работает.
Лучше обе частоты получить из pll или clk_dac получить из clk_core или через фифо.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Apr 17 2015, 09:34
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



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

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



--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 17 2015, 09:51
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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

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


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

Код написан как-то слишком витиевато... Никогда так не делаю... Так потом будет трудно сопровождать проект...
Надо строить описание проще и понятнее...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
_Ivan_33
сообщение Apr 17 2015, 10:57
Сообщение #5


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



Цитата(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 все.
Как это можно изменить?


--------------------
Go to the top of the page
 
+Quote Post
Jackov
сообщение Apr 17 2015, 14:37
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(_Ivan_33 @ Apr 17 2015, 13:57) *
Работоспособность части кусков проверена даже в железе. Но ведь может такое быть, что синтезатор насинтезирует так, что все будет очень плохо...

Если функциональная модель работает, при этом после разводки все констрейны выдерживаются, то можно утверждать что проект будет рабочим.
Go to the top of the page
 
+Quote Post
dvladim
сообщение Apr 17 2015, 18:11
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



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

Очень не сложно написать модель асинхронного FIFO, которая будет корректно моделироваться, проходить STA и при этом в железе работать далеко не всегда корректно (((
Это я к тому, что такие критерии ещё не гарантия.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Apr 17 2015, 18:35
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



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

Ну если какая-нибудь злая асинхронщина - то может быть.
Go to the top of the page
 
+Quote Post

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

 


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


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