|
Вопрос по TimeQuest |
|
|
|
Jan 16 2018, 10:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 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 килобайт )
Кол-во скачиваний: 12
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 42)
|
Jan 16 2018, 10:50
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 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[*]}]
|
|
|
|
|
Jan 16 2018, 11:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 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 Стало только хуже.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 16 2018, 11:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 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.
|
|
|
|
|
Jan 16 2018, 12:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(blackfin @ Jan 16 2018, 14:26)  — Видишь суслика? — Нет! — И я не вижу. А он есть! Цитата Нет...ну вот привязался... Спасибо, гуглом я умею пользоваться. Вопрос в том, когда я не задаю вх/выходные задержки (только клок), QII применяет для них какие-то значения по умолчанию и разводит схему криво (!!!), но руками можно "довести её до ума" при тех же условиях, что мешает QII сделать это автоматом (если вручную можно - то должен быть способ сделать это автоматом!).
|
|
|
|
|
Jan 16 2018, 12:32
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(doom13 @ Jan 16 2018, 15:18)  Спасибо, гуглом я умею пользоваться. Вопрос в том, когда я не задаю вх/выходные задержки (только клок), QII применяет для них какие-то значения по умолчанию и разводит схему криво (!!!), но руками можно "довести её до ума" при тех же условиях, что мешает QII сделать это автоматом (если вручную можно - то должен быть способ сделать это автоматом!). 1. Вы не привели настройки для квартуса(синтез/фиттер).Может автофит стоит. 2. Распиновка жесткая? 3. Если входы и выход на разных концах плисины стоят, то может и не вытянуть при заданной частоте. 4. У Вас есть уверенность, что клок пошел по клоковой дорожке, а не обычной линии? Ощущение возникло, что после добавления ограничений на входы/выходы клок пошел обычным путем, отсюда ухудшение разводки, но их в любом случае требуется задать и, возможно, изменить немного архитектуру - входы на fast input/output register по обычному клоку, а логику по частоте с выхода pll, но это уже по документации и примерам. ЗЫ. У меня, к сожалению, нет возможности скачать Ваш проект.
|
|
|
|
|
Jan 16 2018, 13:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 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? Добавил файлик.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 16 2018, 13:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 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.
|
|
|
|
|
Jan 16 2018, 14:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(bogaev_roman @ Jan 16 2018, 17:23)  А что Вы хотели увидеть, это отчет из поста 3 с Вашими ограничениями. Я пытаюсь понять почему вручную можно добиться корректной работы на 400 МГц (хотя бы отсутствие ошибок по таймингам), а автоматом он этого не делает?Ссори, не мне вопрос, не заметил  Цитата(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, но на него оно не ругается.
|
|
|
|
|
Jan 16 2018, 14:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(doom13 @ Jan 16 2018, 17:32)  Я пытаюсь понять почему вручную можно добиться корректной работы на 400 МГц (хотя бы отсутствие ошибок по таймингам), а автоматом он этого не делает?Ссори, не мне вопрос, не заметил  Вы приведите отчет после ручного размещения ресурсов с отчетом об отсутствии ошибок (для варианта без ограничений на входные/выходные порты или их для анализа пока закройте - set_false_patch), просто кроме слов это тоже пока ничем не подкреплено. Цитата Тут что-то не могу найти, где оно настраивается или просто в QSF надо прописать? assignements->settings, дальше настройки фиттера и синтеза (окна могут меняться в зависимости от версии квартуса). Среди настроек - основное - синтез и оптимизация по скорости/площади/мощности, но самое главное - настройка фиттера - при fast может вообще забить на ограничения, там главное побыстрее все распихать. Но вообще интересный момент - это основные настройки и они должны быть прописаны в .qsf. Цитата Речь о нем, да, удлинняю путь B->reg_B, но на него оно не ругается. В этом месте может быть глюк - Вы ограничения на вход в этой версии не задаете, поэтому квартусу пофиг на задержку до триггера, но, с другой стороны, по умолчанию он старается, по возможности, минимизировать длину путей. Я бы посоветовал для начала принудительно закрыть путь для анализа и считать этот путь асинхронным - set_false_patch.
|
|
|
|
|
Jan 17 2018, 05:33
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 17 2018, 06:34
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792

|
Цитата(doom13 @ Jan 17 2018, 08:47)  Этот файл не меняется при ручных изменениях в Chip Planner-e. Так а с чего вы тогда решили, что после модификации размещения на чипе регистров вы вытянули требуемую частоту?
--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
|
|
|
|
|
Jan 17 2018, 07:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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)  И как следствие, меняется отчет. Скачайте два файла (первый пост), соберите проект, посмотрите, какие файлы меняются (минутное дело).
|
|
|
|
|
Jan 17 2018, 08:35
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(ViKo @ Jan 17 2018, 11:05)  Не понимаю. Их же два разных должно быть? Тот файл, что blackfin раньше спрашивал. Только до ваших манипуляций и после.  , файл *.sta.rpt не меняется при изменениях в чиппланере. Цитата(bogaev_roman @ Jan 16 2018, 15:32)  1. Вы не привели настройки для квартуса(синтез/фиттер).Может автофит стоит. Auto Fit даёт самый лучший результат - ошибка по одному path-у, Fast Fit - это опа, больше всего ошибочных path-ов.
|
|
|
|
|
Jan 17 2018, 10:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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. Т.е. пока так и не понял, что при стандартных настройках мешает автоматической разводке с выполнением всех таймингов, если вручную есть такая возможность.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 17 2018, 10:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(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 - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат.
|
|
|
|
|
Jan 17 2018, 12:01
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(bogaev_roman @ Jan 17 2018, 13:44)  Это уже шаманство, также как и смена seed. Такими вещами занимаются при сложных объемных проектах, а у Вас сумматор 8 разрядный, хоть и на высокой частоте. Может глюк квартуса этой версии, я с подобным сталкивался последний раз в 9 версии - в 17, 13, 14 такого не встречал. Можно еще попробовать перед полной компиляцией удалить содержимое файлов db и incremental_db - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат. Ок, установлен еще и 14.0 и 13.0, сейчас опробую, базы чистить я пробовал. 14 версия с настройками по умолчанию всё собрала, писец. Спасибо, буду двигать дальше.
|
|
|
|
|
Jan 26 2018, 08:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(bogaev_roman @ Jan 17 2018, 13:44)  Это уже шаманство, также как и смена seed. Такими вещами занимаются при сложных объемных проектах, а у Вас сумматор 8 разрядный, хоть и на высокой частоте. Может глюк квартуса этой версии, я с подобным сталкивался последний раз в 9 версии - в 17, 13, 14 такого не встречал. Можно еще попробовать перед полной компиляцией удалить содержимое файлов db и incremental_db - там вся информация сохраняется с предыдущих разводок, иногда перед новой полной разводкой сохраняется и используется предыдущий результат. Версия 17.1 с настройками по умолчанию собирает всё с таким же косяком как и 16.1. Руками разводку можно подправить.
|
|
|
|
|
Feb 7 2018, 20:45
|
Местный
  
Группа: Участник
Сообщений: 239
Регистрация: 15-11-09
Из: Санкт-Петербург
Пользователь №: 53 639

|
Цитата(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-кирпичиков. Ибо об оптимизации последних уже позаботились до нас.
|
|
|
|
|
Feb 9 2018, 06:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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 приходится допиливать ручками. И главный вопрос - как можно полагаться на все эти временные ограничения, если реально вижу, что возможность развести "правильно" (с учетом тех ограничений, которые заданы) есть, но разводит "криво"?!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|