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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Вопрос по TimeQuest
doom13
сообщение Jan 16 2018, 10:26
Сообщение #1


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую. Тестовый проект прикреплен ниже. Сам модуль:
CODE
module add_three_numbers
(
input clock,
input [7:0] A,
input [7:0] B,
input [7:0] C,
input [7:0] D,
output [7:0] sum
);

reg [7:0] reg_A, reg_B, reg_C, reg_D;
reg [7:0] reg_sum;

reg [7:0] sum1, sum2;
reg [7:0] sum3;


always@(posedge clock)begin
reg_A <= A;
reg_B <= B;
reg_C <= C;
reg_D <= D;
end

always@(posedge clock)begin
sum1 <= reg_A + reg_B;
sum2 <= reg_C + reg_D;
sum3 <= sum1 + sum2;
end


always@(posedge clock)begin
reg_sum <= sum3;
end

assign sum = reg_sum;

endmodule


SDC файл:

Код
create_clock -name {clock} -period 400Mhz [get_ports {clock}]


Входные/выходные порты идут на ножки FPGA. Ругается на путь от reg_B[7] до sum1[7], смотрю как разбросал все в ChipPlanner-e. Если в Chip Planner-e подвинуть reg_B[7] максимально близко к sum1[7] и применить изменения в нетлисте, то все тайминги соблюдаются. Вопрос - почему автоматом не хочет поставить ячейки в нужные места (куча свободных ресурсов), чтоб все тайминги соблюдались.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  test.rar ( 2.71 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 16 2018, 10:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 899
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(doom13 @ Jan 16 2018, 13:26) *
SDC файл:
Код
create_clock -name {clock} -period 400Mhz [get_ports {clock}]

Что-то, SDC файл через чур уж лаконичен.

Следует добавить:
Код
set_input_delay -clock clock -min 0.8 [get_ports {A[*]}]
set_input_delay -clock clock -max 1.6 [get_ports {A[*]}]
...
set_output_delay -clock clock -min 0.0 [get_ports {sum[*]}]
set_output_delay -clock clock -max 0.2 [get_ports {sum[*]}]
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 16 2018, 11:24
Сообщение #3


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Он-то локаничен, но почему есть возможность вручную подправить разводку, когда автоматом никак не хочет?

Что по умолчанию применяется для input_/output_delay?
Цитата
Следует добавить:
Код
set_input_delay -clock clock -min 0.8 [get_ports {A[*]}]
set_input_delay -clock clock -max 1.6 [get_ports {A[*]}]
...
set_output_delay -clock clock -min 0.0 [get_ports {sum[*]}]
set_output_delay -clock clock -max 0.2 [get_ports {sum[*]}]

Поясните - откуда значения задержек брать?

Код
create_clock -name {clock} -period 400Mhz [get_ports {clock}]

set_input_delay -clock [get_clocks clock] -min 0.8 [get_ports A[*]]
set_input_delay -clock [get_clocks clock] -max 1.6 [get_ports A[*]] -add_delay

set_input_delay -clock [get_clocks clock] -min 0.8 [get_ports B[*]]
set_input_delay -clock [get_clocks clock] -max 1.6 [get_ports B[*]] -add_delay

set_input_delay -clock [get_clocks clock] -min 0.8 [get_ports C[*]]
set_input_delay -clock [get_clocks clock] -max 1.6 [get_ports C[*]] -add_delay

set_input_delay -clock [get_clocks clock] -min 0.8 [get_ports D[*]]
set_input_delay -clock [get_clocks clock] -max 1.6 [get_ports D[*]] -add_delay

set_output_delay -clock [get_clocks clock] -min 0.0 [get_ports sum[*]]
set_output_delay -clock [get_clocks clock] -max 0.2 [get_ports sum[*]] -add_delay

derive_clock_uncertainty


Стало только хуже.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 16 2018, 11:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 899
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(doom13 @ Jan 16 2018, 14:13) *
Поясните - откуда значения задержек брать?

Читайте handbook Quartus'а или хотя бы an433.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 16 2018, 11:47
Сообщение #5


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Вопрос остался. Если убрать один регистр с выхода, то разведет все правильно (автоматом!!!)
CODE
module add_three_numbers
(
input clock,
input [7:0] A,
input [7:0] B,
input [7:0] C,
input [7:0] D,
output [7:0] sum
);

reg [7:0] reg_A, reg_B, reg_C, reg_D;
reg [7:0] reg_sum;

reg [7:0] sum1, sum2;
reg [7:0] sum3;


always@(posedge clock)begin
reg_A <= A;
reg_B <= B;
reg_C <= C;
reg_D <= D;
end

always@(posedge clock)begin
sum1 <= reg_A + reg_B;
sum2 <= reg_C + reg_D;
sum3 <= sum1 + sum2;
end


// always@(posedge clock)begin
// reg_sum <= sum3;
// end

// assign sum = reg_sum;
assign sum = sum3;

endmodule


Тут в SDC определено только значение clock.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 16 2018, 11:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 899
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(doom13 @ Jan 16 2018, 14:47) *
Тут в SDC определено только значение clock.

Цитата
— Видишь суслика?
— Нет!
— И я не вижу. А он есть!
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 16 2018, 12:06
Сообщение #7


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

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



http://www.alterawiki.com/wiki/Timing_Constraints
+ статьи от des00 http://www.kit-e.ru/articles/plis/2010_9_51.php


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

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 16 2018, 12:18
Сообщение #8


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(blackfin @ Jan 16 2018, 14:26) *
— Видишь суслика?
— Нет!
— И я не вижу. А он есть!

Цитата
Нет...ну вот привязался...

Спасибо, гуглом я умею пользоваться. Вопрос в том, когда я не задаю вх/выходные задержки (только клок), QII применяет для них какие-то значения по умолчанию и разводит схему криво (!!!), но руками можно "довести её до ума" при тех же условиях, что мешает QII сделать это автоматом (если вручную можно - то должен быть способ сделать это автоматом!).
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 16 2018, 12:28
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 899
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(doom13 @ Jan 16 2018, 15:18) *
Вопрос в том, когда я не задаю вх/выходные задержки (только клок), ...

А что пишут в add_three_numbers.sta.rpt?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 16 2018, 12:32
Сообщение #10


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

Группа: Свой
Сообщений: 1 078
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(doom13 @ Jan 16 2018, 15:18) *
Спасибо, гуглом я умею пользоваться. Вопрос в том, когда я не задаю вх/выходные задержки (только клок), QII применяет для них какие-то значения по умолчанию и разводит схему криво (!!!), но руками можно "довести её до ума" при тех же условиях, что мешает QII сделать это автоматом (если вручную можно - то должен быть способ сделать это автоматом!).

1. Вы не привели настройки для квартуса(синтез/фиттер).Может автофит стоит.
2. Распиновка жесткая?
3. Если входы и выход на разных концах плисины стоят, то может и не вытянуть при заданной частоте.
4. У Вас есть уверенность, что клок пошел по клоковой дорожке, а не обычной линии? Ощущение возникло, что после добавления ограничений на входы/выходы клок пошел обычным путем, отсюда ухудшение разводки, но их в любом случае требуется задать и, возможно, изменить немного архитектуру - входы на fast input/output register по обычному клоку, а логику по частоте с выхода pll, но это уже по документации и примерам.
ЗЫ. У меня, к сожалению, нет возможности скачать Ваш проект.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 16 2018, 13:40
Сообщение #11


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(bogaev_roman @ Jan 16 2018, 15:32) *
1. Вы не привели настройки для квартуса(синтез/фиттер).Может автофит стоит.
2. Распиновка жесткая?


QSF-file:
CODE

# -------------------------------------------------------------------------- #
#
# Copyright © 2016 Intel Corporation. All rights reserved.
# Your use of Intel Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Intel Program License
# Subscription Agreement, the Intel Quartus Prime License Agreement,
# the Intel MegaCore Function License Agreement, or other
# applicable license agreement, including, without limitation,
# that your use is for the sole purpose of programming logic
# devices manufactured by Intel and sold by Intel or its
# authorized distributors. Please refer to the applicable
# agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus Prime
# Version 16.1.0 Build 196 10/24/2016 SJ Standard Edition
# Date created = 11:20:56 January 12, 2018
#
# -------------------------------------------------------------------------- #
#
# Notes:
#
# 1) The default values for assignments are stored in the file:
# test_00_assignment_defaults.qdf
# If this file doesn't exist, see file:
# assignment_defaults.qdf
#
# 2) Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus Prime software
# and any changes you make may be lost or overwritten.
#
# -------------------------------------------------------------------------- #


set_global_assignment -name FAMILY "Cyclone V"
set_global_assignment -name DEVICE 5CEBA4F17I7
set_global_assignment -name TOP_LEVEL_ENTITY add_three_numbers
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.0
set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:20:56 JANUARY 12, 2018"
set_global_assignment -name LAST_QUARTUS_VERSION "16.1.0 Standard Edition"
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 256
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
set_global_assignment -name VERILOG_FILE top.v
set_global_assignment -name SDC_FILE top.sdc
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_location_assignment PIN_A3 -to A[0]
set_location_assignment PIN_A4 -to A[1]
set_location_assignment PIN_A5 -to A[2]
set_location_assignment PIN_A7 -to A[3]
set_location_assignment PIN_A8 -to A[4]
set_location_assignment PIN_A9 -to A[5]
set_location_assignment PIN_B6 -to A[6]
set_location_assignment PIN_B7 -to A[7]
set_location_assignment PIN_B10 -to B[0]
set_location_assignment PIN_C9 -to B[1]
set_location_assignment PIN_C10 -to B[2]
set_location_assignment PIN_B11 -to B[3]
set_location_assignment PIN_C11 -to B[4]
set_location_assignment PIN_D11 -to B[5]
set_location_assignment PIN_A12 -to B[6]
set_location_assignment PIN_A13 -to B[7]
set_location_assignment PIN_B16 -to C[0]
set_location_assignment PIN_C16 -to C[1]
set_location_assignment PIN_D16 -to C[2]
set_location_assignment PIN_E16 -to C[3]
set_location_assignment PIN_C15 -to C[4]
set_location_assignment PIN_D14 -to C[5]
set_location_assignment PIN_D13 -to C[6]
set_location_assignment PIN_F15 -to C[7]
set_location_assignment PIN_G16 -to sum[0]
set_location_assignment PIN_H16 -to sum[1]
set_location_assignment PIN_J16 -to sum[2]
set_location_assignment PIN_G15 -to sum[3]
set_location_assignment PIN_K16 -to sum[4]
set_location_assignment PIN_K15 -to sum[5]
set_location_assignment PIN_L15 -to sum[6]
set_location_assignment PIN_L14 -to sum[7]
set_location_assignment PIN_J14 -to sum[8]
set_location_assignment PIN_J12 -to sum[9]
set_location_assignment PIN_F12 -to clock
set_location_assignment PIN_T15 -to D[0]
set_location_assignment PIN_T14 -to D[1]
set_location_assignment PIN_R16 -to D[2]
set_location_assignment PIN_R14 -to D[3]
set_location_assignment PIN_P16 -to D[4]
set_location_assignment PIN_P14 -to D[5]
set_location_assignment PIN_P13 -to D[6]
set_location_assignment PIN_M13 -to D[7]
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
set_global_assignment -name SMART_RECOMPILE ON
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top



Цитата(bogaev_roman @ Jan 16 2018, 15:32) *
3. Если входы и выход на разных концах плисины стоят, то может и не вытянуть при заданной частоте.

А почему же тогда ручками можно подправить один путь, чтоб вытянуло? Это больше всего смущает. Почему QII (такой умный) не смог заметить очевидное решение! Я понимаю, что не всё ему описал, но он уже тут накосячил, зачем ещё что-то "ограничивать".

Цитата(bogaev_roman @ Jan 16 2018, 15:32) *
4. У Вас есть уверенность, что клок пошел по клоковой дорожке, а не обычной линии? Ощущение возникло, что после добавления ограничений на входы/выходы клок пошел обычным путем, отсюда ухудшение разводки, но их в любом случае требуется задать и, возможно, изменить немного архитектуру - входы на fast input/output register по обычному клоку, а логику по частоте с выхода pll, но это уже по документации и примерам.

На глобальной линии сидит (см. рис.).


Цитата(blackfin @ Jan 16 2018, 15:28) *
А что пишут в add_three_numbers.sta.rpt?

Добавил файлик.
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  test_00.sta.rpt.txt ( 67.63 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 16 2018, 13:54
Сообщение #12


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

Группа: Свой
Сообщений: 1 078
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(doom13 @ Jan 16 2018, 16:40) *
QSF-file:

Не увидел настроек Fitter_effort и optimization_technique. Не знаю, каким образом может повлиять настройка smart_recompile, если менять только ограничения, по идее - никак.
Цитата
На глобальной линии сидит (см. рис.).

Значит с этим все в порядке.
Цитата
А почему же тогда ручками можно подправить один путь, чтоб вытянуло? Это больше всего смущает. Почему QII (такой умный) не смог заметить очевидное решение! Я понимаю, что не всё ему описал, но он уже тут накосячил, зачем ещё что-то "ограничивать".

Если речь идет о пути сигнала reg_B->sum1, то есть еще путь от B до reg_B - о нем мне ничего не известно - укорачивая путь описанным образом от reg_B до sum1 Вы удлиняете путь от B до reg_B.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 16 2018, 13:55
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 899
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(doom13 @ Jan 16 2018, 16:40) *
Добавил файлик.

Из которого следует, что на 400 МГц этот проект работать не будет. biggrin.gif
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 16 2018, 14:18
Сообщение #14


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

Группа: Свой
Сообщений: 1 384
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(blackfin @ Jan 16 2018, 16:55) *
Из которого следует, что на 400 МГц этот проект работать не будет. biggrin.gif

Да не будет, но после правки руками говорит, что будет работать!? Врёт?
И даже говорит что будет на 446 МГц работать (после замены местоположения одного регистра)!
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 16 2018, 14:23
Сообщение #15


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

Группа: Свой
Сообщений: 1 078
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(blackfin @ Jan 16 2018, 16:55) *
Из которого следует, что на 400 МГц этот проект работать не будет. biggrin.gif

А что Вы хотели увидеть, это отчет из поста 3 с Вашими ограничениями.
Go to the top of the page
 
+Quote Post

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

 


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


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