Перейти к содержанию
    

Впервые собираю большой проект. Есть вопросы...

Всем привет.

 

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

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

 

Мне нужно передать слово из одного клокового домена с более медленным клоком в другое. Написал синхронизатор

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

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

 

 

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

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По третьему пункту не понятно:

data_reg1 <= data_reg0; один регистр на одной частоте второй на другой, если вы гарантируете что data_in_valid активна внутри clk_dac, т.е. когда активен сигнал data_in_valid не пройдёт изменения такта от clk_dac - тогда да работает.

Лучше обе частоты получить из pll или clk_dac получить из clk_core или через фифо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет.

Спасибо!

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет.

 

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

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

 

 

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

Спасибо!

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

Надо строить описание проще и понятнее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По третьему пункту не понятно:

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 и там было вот это:

 

post-36928-1429268169_thumb.png

 

 

 

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

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

 

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

Статьи посмотрю!

 

 

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

Надо строить описание проще и понятнее...

 

А можно вас попросить выложить какой-нибудь кусочек кода на верилог, дабы сравнить стили.

Вообще свой стиль я взял из книги Чу Понга по верилогу. Обычно пишу в одном блоке always все.

Как это можно изменить?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если функциональная модель работает, при этом после разводки все констрейны выдерживаются, то можно утверждать что проект будет рабочим.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если функциональная модель работает, при этом после разводки все констрейны выдерживаются, то можно утверждать что проект будет рабочим.

Очень не сложно написать модель асинхронного FIFO, которая будет корректно моделироваться, проходить STA и при этом в железе работать далеко не всегда корректно (((

Это я к тому, что такие критерии ещё не гарантия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень не сложно написать модель асинхронного FIFO, которая будет корректно моделироваться, проходить STA и при этом в железе работать далеко не всегда корректно (((

Это я к тому, что такие критерии ещё не гарантия.

Ну если какая-нибудь злая асинхронщина - то может быть.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...