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

 
 
> Впервые собираю большой проект. Есть вопросы..., по 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



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

 


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


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