Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по TimeQuest
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
doom13
Приветствую. Тестовый проект прикреплен ниже. Сам модуль:
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] и применить изменения в нетлисте, то все тайминги соблюдаются. Вопрос - почему автоматом не хочет поставить ячейки в нужные места (куча свободных ресурсов), чтоб все тайминги соблюдались.
blackfin
Цитата(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[*]}]
doom13
Он-то локаничен, но почему есть возможность вручную подправить разводку, когда автоматом никак не хочет?

Что по умолчанию применяется для 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


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

Читайте handbook Quartus'а или хотя бы an433.
doom13
Вопрос остался. Если убрать один регистр с выхода, то разведет все правильно (автоматом!!!)
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.
blackfin
Цитата(doom13 @ Jan 16 2018, 14:47) *
Тут в SDC определено только значение clock.

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

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

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

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

1. Вы не привели настройки для квартуса(синтез/фиттер).Может автофит стоит.
2. Распиновка жесткая?
3. Если входы и выход на разных концах плисины стоят, то может и не вытянуть при заданной частоте.
4. У Вас есть уверенность, что клок пошел по клоковой дорожке, а не обычной линии? Ощущение возникло, что после добавления ограничений на входы/выходы клок пошел обычным путем, отсюда ухудшение разводки, но их в любом случае требуется задать и, возможно, изменить немного архитектуру - входы на fast input/output register по обычному клоку, а логику по частоте с выхода pll, но это уже по документации и примерам.
ЗЫ. У меня, к сожалению, нет возможности скачать Ваш проект.
doom13
Цитата(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?

Добавил файлик.
bogaev_roman
Цитата(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.
blackfin
Цитата(doom13 @ Jan 16 2018, 16:40) *
Добавил файлик.

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

Да не будет, но после правки руками говорит, что будет работать!? Врёт?
И даже говорит что будет на 446 МГц работать (после замены местоположения одного регистра)!
bogaev_roman
Цитата(blackfin @ Jan 16 2018, 16:55) *
Из которого следует, что на 400 МГц этот проект работать не будет. biggrin.gif

А что Вы хотели увидеть, это отчет из поста 3 с Вашими ограничениями.
doom13
Цитата(bogaev_roman @ Jan 16 2018, 17:23) *
А что Вы хотели увидеть, это отчет из поста 3 с Вашими ограничениями.

Я пытаюсь понять почему вручную можно добиться корректной работы на 400 МГц (хотя бы отсутствие ошибок по таймингам), а автоматом он этого не делает?

Ссори, не мне вопрос, не заметилsm.gif

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

Тут что-то не могу найти, где оно настраивается или просто в QSF надо прописать?

Цитата(bogaev_roman @ Jan 16 2018, 16:54) *
Если речь идет о пути сигнала reg_B->sum1, то есть еще путь от B до reg_B - о нем мне ничего не известно - укорачивая путь описанным образом от reg_B до sum1 Вы удлиняете путь от B до reg_B.

Речь о нем, да, удлинняю путь B->reg_B, но на него оно не ругается.
bogaev_roman
Цитата(doom13 @ Jan 16 2018, 17:32) *
Я пытаюсь понять почему вручную можно добиться корректной работы на 400 МГц (хотя бы отсутствие ошибок по таймингам), а автоматом он этого не делает?

Ссори, не мне вопрос, не заметилsm.gif

Вы приведите отчет после ручного размещения ресурсов с отчетом об отсутствии ошибок (для варианта без ограничений на входные/выходные порты или их для анализа пока закройте - set_false_patch), просто кроме слов это тоже пока ничем не подкреплено.
Цитата
Тут что-то не могу найти, где оно настраивается или просто в QSF надо прописать?

assignements->settings, дальше настройки фиттера и синтеза (окна могут меняться в зависимости от версии квартуса). Среди настроек - основное - синтез и оптимизация по скорости/площади/мощности, но самое главное - настройка фиттера - при fast может вообще забить на ограничения, там главное побыстрее все распихать. Но вообще интересный момент - это основные настройки и они должны быть прописаны в .qsf.
Цитата
Речь о нем, да, удлинняю путь B->reg_B, но на него оно не ругается.

В этом месте может быть глюк - Вы ограничения на вход в этой версии не задаете, поэтому квартусу пофиг на задержку до триггера, но, с другой стороны, по умолчанию он старается, по возможности, минимизировать длину путей. Я бы посоветовал для начала принудительно закрыть путь для анализа и считать этот путь асинхронным - set_false_patch.
doom13
Если проектик скачать (или заново создать), то можно эту штуку затестить, у меня QII v16.1 используется. Отчет в картинках
doom13
Цитата(bogaev_roman @ Jan 16 2018, 17:48) *
assignements->settings, дальше настройки фиттера и синтеза (окна могут меняться в зависимости от версии квартуса). Среди настроек - основное - синтез и оптимизация по скорости/площади/мощности, но самое главное - настройка фиттера - при fast может вообще забить на ограничения, там главное побыстрее все распихать. Но вообще интересный момент - это основные настройки и они должны быть прописаны в .qsf.

Настройки:

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

Optimization Technique - Balanced
Fitter Effort - Auto Fit
ViKo
Так покажите уже файлы sta.rpt для обоих своих вариантов - размещенного автоматически и передвинутого вручную.
doom13
Цитата(ViKo @ Jan 17 2018, 08:38) *
Так покажите уже файлы sta.rpt для обоих своих вариантов - размещенного автоматически и передвинутого вручную.

Этот файл не меняется при ручных изменениях в Chip Planner-e.
warrior-2001
Цитата(doom13 @ Jan 17 2018, 08:47) *
Этот файл не меняется при ручных изменениях в Chip Planner-e.

biggrin.gif

Так а с чего вы тогда решили, что после модификации размещения на чипе регистров вы вытянули требуемую частоту?
Flip-fl0p
Цитата(warrior-2001 @ Jan 17 2018, 09:34) *
biggrin.gif

Так а с чего вы тогда решили, что после модификации размещения на чипе регистров вы вытянули требуемую частоту?

Так ведь симуляция должна производиться по существующему net-листу. Соответственно если были внесены изменения в этот net-лист путём ручного перетаскивания элементов - то и должны изменится задержки - и, как следствие, результаты симуляции Timequest.
ViKo
И как следствие, меняется отчет.
doom13
Цитата(warrior-2001 @ Jan 17 2018, 09:34) *
Так а с чего вы тогда решили, что после модификации размещения на чипе регистров вы вытянули требуемую частоту?

Проект компилируется с ругательством на один path. В чиппланере перетаскиваю ячейку (расположение которой мне не нравится), нажимаю кнопку Check and Save All Netlist Changes, стартует Fitter и Assembler, запускаю TimeQuest - Report Top Failing Paths теперь ошибок не показывает (!!!), нахожу путь на который ранее ругалось и с ним всё ОК (см. рисунки выше). Report Fmax Summary показывает, что Fmax стала 446,63 MHz (!!!). Что-то в этих действиях не так?

Цитата(Flip-fl0p @ Jan 17 2018, 09:46) *
Так ведь симуляция должна производиться по существующему net-листу. Соответственно если были внесены изменения в этот net-лист путём ручного перетаскивания элементов - то и должны изменится задержки - и, как следствие, результаты симуляции Timequest.

Вот! И я так считаю!

Цитата(ViKo @ Jan 17 2018, 10:04) *
И как следствие, меняется отчет.

Скачайте два файла (первый пост), соберите проект, посмотрите, какие файлы меняются (минутное дело).
ViKo
А файлы отчета показать - не минутное дело?
doom13
Цитата(ViKo @ Jan 17 2018, 10:50) *
А файлы отчета показать - не минутное дело?

А запрошенный Вами файл отчета прикреплен выше, и он не меняется.
ViKo
Цитата(doom13 @ Jan 17 2018, 10:59) *
А запрошенный Вами файл отчета прикреплен выше, и он не меняется.

Не понимаю. Их же два разных должно быть? Тот файл, что blackfin раньше спрашивал. Только до ваших манипуляций и после.
doom13
Цитата(ViKo @ Jan 17 2018, 11:05) *
Не понимаю. Их же два разных должно быть? Тот файл, что blackfin раньше спрашивал. Только до ваших манипуляций и после.

cranky.gif, файл *.sta.rpt не меняется при изменениях в чиппланере.

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

Auto Fit даёт самый лучший результат - ошибка по одному path-у, Fast Fit - это опа, больше всего ошибочных path-ов.
ViKo
Запустите Design Space Explorer, и он "ператрахнёт" ваш проект несколько раз, и уложит в требования. Возможно.
doom13
Поменял опцию Fitter-a Fitter Initial Placement Seed на 2 (было 1), пересобрало и ошибок по таймингам не выдает, максимальную частоту показывает 410МГц, кто может пояснить, как он допер, что можно разбросать элементы правильно? И что мешает сделать это при Seed 1? И как же тогда временные ограничения, если сработалo только в комплексе с конкретной настройкой Fitter-a?
ViKo
Кроме Auto Fit и Fast Fit есть еще Standard Fit.
doom13
Цитата(ViKo @ Jan 17 2018, 12:32) *
Кроме Auto Fit и Fast Fit есть еще Standard Fit.

да, оно даёт результат лучше фаста, но хуже авто (количество фалс пасов)
ViKo
Цитата(doom13 @ Jan 17 2018, 12:37) *
да, оно даёт результат лучше фаста, но хуже авто (количество фалс пасов)

Это странно.
А что у вас стоит в поле Desired worst case slack для AutoFit?
doom13
Цитата(bogaev_roman @ Jan 16 2018, 16:54) *
Не увидел настроек Fitter_effort и optimization_technique. Не знаю, каким образом может повлиять настройка smart_recompile, если менять только ограничения, по идее - никак.

Если изменить Optimization mode c Balanced (Normal flow) на Performance (High effort - increases runtime), то это даёт пинок QII развести всё без ошибок, но на опции Fitter_effort и optimization_technique это не влияет. Fmax в этом случае может выдержать 443 MHz.

Т.е. пока так и не понял, что при стандартных настройках мешает автоматической разводке с выполнением всех таймингов, если вручную есть такая возможность.
bogaev_roman
Цитата(doom13 @ Jan 17 2018, 13:28) *
Если изменить Optimization mode c Balanced (Normal flow) на Performance (High effort - increases runtime), то это даёт пинок QII развести всё без ошибок, но на опции Fitter_effort и optimization_technique это не влияет. Fmax в этом случае может выдержать 443 MHz.

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

Это уже шаманство, также как и смена seed. Такими вещами занимаются при сложных объемных проектах, а у Вас сумматор 8 разрядный, хоть и на высокой частоте. Может глюк квартуса этой версии, я с подобным сталкивался последний раз в 9 версии - в 17, 13, 14 такого не встречал. Можно еще попробовать перед полной компиляцией удалить содержимое файлов db и incremental_db - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат.
doom13
Цитата(bogaev_roman @ Jan 17 2018, 13:44) *
Это уже шаманство, также как и смена seed. Такими вещами занимаются при сложных объемных проектах, а у Вас сумматор 8 разрядный, хоть и на высокой частоте. Может глюк квартуса этой версии, я с подобным сталкивался последний раз в 9 версии - в 17, 13, 14 такого не встречал. Можно еще попробовать перед полной компиляцией удалить содержимое файлов db и incremental_db - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат.

Ок, установлен еще и 14.0 и 13.0, сейчас опробую, базы чистить я пробовал.

14 версия с настройками по умолчанию всё собрала, писец.

Спасибо, буду двигать дальше.
warrior-2001
Много глюков ловил в новых версиях квартуса из-за прав доступа! Только рут/админ и никак иначе!
bogaev_roman
Цитата(warrior-2001 @ Jan 18 2018, 11:04) *
Много глюков ловил в новых версиях квартуса из-за прав доступа! Только рут/админ и никак иначе!

bb-offtopic.gif Я очень неохотно перехожу на новые версии - только когда они проверены временем и людьми. Сейчас это версия 17.0.2 (все 16 прошли мимо), но и в ней я нашел для себя одну неприятную вещь, хотя жалоб вроде и не было.
doom13
del
doom13
Цитата(bogaev_roman @ Jan 17 2018, 13:44) *
Это уже шаманство, также как и смена seed. Такими вещами занимаются при сложных объемных проектах, а у Вас сумматор 8 разрядный, хоть и на высокой частоте. Может глюк квартуса этой версии, я с подобным сталкивался последний раз в 9 версии - в 17, 13, 14 такого не встречал. Можно еще попробовать перед полной компиляцией удалить содержимое файлов db и incremental_db - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат.

Версия 17.1 с настройками по умолчанию собирает всё с таким же косяком как и 16.1. Руками разводку можно подправить.
laughing.gif
Kluwert
Цитата(doom13 @ Jan 16 2018, 14:26) *
Входные/выходные порты идут на ножки FPGA. Ругается на путь от reg_B[7] до sum1[7], смотрю как разбросал все в ChipPlanner-e. Если в Chip Planner-e подвинуть reg_B[7] максимально близко к sum1[7] и применить изменения в нетлисте, то все тайминги соблюдаются. Вопрос - почему автоматом не хочет поставить ячейки в нужные места (куча свободных ресурсов), чтоб все тайминги соблюдались.

Это - не такое "очевидное" решение. Потому что он тупо боится ставить reg_B[7] далеко от остальных, справедливо опасаясь, что у вас может шина "разбежится" (400МГц, так между прочим, не хухры мухры!).
А вы ещё зачем-то прилепили никому не нужный промежуточный регистр reg_sum, который явно назначили на выход sum. А компилятор Квартуса совсем не такой интеллектуальный, как вы могли подумать и он достаточно тупо выполнил ваши указания, повесив reg_sum чуть ли не на ногу sum. Была б его воля он бы его ещё на двухфазный выходной триггер (altddio) залепил, но права не имеет.
И проблема тут не в мифических глюках Квартуса, а элементарно в том, что каменюга у вас выбрана огромная, схемка вшивая, а если он начнёт гонять по кристаллу туда-сюда отдельные триггеры, каждый раз заглядывая в результаты таймингов, то более серъёзные схемы он будет месяцами оптимизировать. Поэтому, да, тяжек труд плисовода: приходится либо за компилятор думать, либо, что более правильно, для здоровых камней ваять из IP-кирпичиков. Ибо об оптимизации последних уже позаботились до нас.
doom13
Цитата(Kluwert @ Feb 7 2018, 23:45) *
Это - не такое "очевидное" решение. Потому что он тупо боится ставить reg_B[7] далеко от остальных, справедливо опасаясь, что у вас может шина "разбежится" (400МГц, так между прочим, не хухры мухры!).
А вы ещё зачем-то прилепили никому не нужный промежуточный регистр reg_sum, который явно назначили на выход sum. А компилятор Квартуса совсем не такой интеллектуальный, как вы могли подумать и он достаточно тупо выполнил ваши указания, повесив reg_sum чуть ли не на ногу sum. Была б его воля он бы его ещё на двухфазный выходной триггер (altddio) залепил, но права не имеет.

Это "учебный" пример, и частота такая задана, чтобы посмотреть, когда ошибки появляются и как с ними бороться, и reg_sum добавлен для этих же целей.

Цитата(Kluwert @ Feb 7 2018, 23:45) *
И проблема тут не в мифических глюках Квартуса, а элементарно в том, что каменюга у вас выбрана огромная, схемка вшивая, а если он начнёт гонять по кристаллу туда-сюда отдельные триггеры, каждый раз заглядывая в результаты таймингов, то более серъёзные схемы он будет месяцами оптимизировать. Поэтому, да, тяжек труд плисовода: приходится либо за компилятор думать, либо, что более правильно, для здоровых камней ваять из IP-кирпичиков. Ибо об оптимизации последних уже позаботились до нас.

Может и так, но две версии Квартуса результат дают разный. Версия 14 собрала всё правильно, для 16 приходится допиливать ручками.
И главный вопрос - как можно полагаться на все эти временные ограничения, если реально вижу, что возможность развести "правильно" (с учетом тех ограничений, которые заданы) есть, но разводит "криво"?!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.