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

Beby

Свой
  • Постов

    662
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Beby стал победителем дня 22 апреля

Beby имел наиболее популярный контент!

Репутация

8 Обычный

Информация о Beby

  • Звание
    Злополезный
    Знающий
  • День рождения 03.12.1979

Контакты

  • AIM
    Array
  • MSN
    Array
  • Сайт
    Array
  • ICQ
    Array
  • Yahoo
    Array

Информация

  • Город
    Array

Retained

  • Звание
    Array

Посетители профиля

3 565 просмотров профиля
  1. @makc @slonok В Logos2/Titan2/Kosmo2 с TMDS всё оказалось ещё хуже, чем я вчера думал: Сегодня поставил 2023.2-SP3 и вот не поленился прочитать Release_Notes_2023_2_SP3 (microterra).pdf (ещё раз благодарю @Gas Wilson за предоставленные PDS и документы). И в нём вдруг обнаружилось (в последнем BUG fix'е): 3. SP3 Features 1) BUG fixes: ....... ✓ Delete the IO standard "TMDS" (Logos2, Titan2, Kosmo2 involved) Проверил, действительно, в User Constraint Editor в 2023.2-SP1 можно было выбрать TMDS, а в 2023.2-SP3 (от 2024.05.07) TMDS'а больше нет. Так что нам всем явно нужна более свежая документация на Logos2/Titan2 (DS + соответствующие UG), как минимум отражающая отсутствие поддержки TMDS в этих ПЛИС. @Gas Wilson При наличии возможности, пожалуйста, посодействуйте в этом вопросе.
  2. Мутно у китайцев с Logos2/Titan2, но есть у меня подозрение, что при выборе "TMDS" работает только нижнее плечо выходов, и требуются внешние резисторы подтяжки (а может и ещё какие-то костыли): (см. UG040006 Logos2 Series FPGA Input Output Interface (IO) User Guide V1.1.pdf) @slonok А вот осциллографом посмотреть не мешало бы, в свете указанной выше версии работы выходных каскадов ПЛИС - у LVDS работают то оба выходных плеча... P.S. Помнится мне, у Xilinx было только одно семейство ПЛИС, которое честно тянуло TMDS - Spartan-3A(N/DSP). В них были самые прочные и зверские I/O-ноги, которые честно тянули максимальное количество стандартов. Собственно говоря, это семейство ПЛИС под приём/передачу DVI/HMDI и создавалась по спец.заказу одного из крупных заказчиков... Ну и схема от них прилагалась такая:
  3. Вот так делать (с for-genarate и однобитным сигналом) точно нельзя (VHDL - это не C/C++): К сожалению, вынужден констатировать, что @sazh был весьма прав в своём недавнем предположении даже в большей степени, чем я мог предположить. For @Worldmaster: в средах, где нет поддержки VHDL'2008, я использую такую функцию: function Vector_Xor (ARG: std_logic_vector) return std_logic is variable X: std_logic := '0'; begin for i in ARG'Range loop X := X xor ARG(i); end loop; return X; end function Vector_Xor;
  4. Как отключить проверку на "хорошие" и "плохие" файлы - не знаю, но можно зайти сбоку: т.к. для синтеза вы используете Synplify, то рекомендую сделать проект в Synplify, а выходной "хороший" Verilog-файл уже подключить в PDS и в синтезе выставить ADS. Таким образом, всё "нехорошее" вы прогоняете через Synplify, а потом в ADS объединяете результат работы Synplify и то, что должно проходить только ADS. Я так делал в PDS 2023-1, в котором ещё не было поддержи у ADS VHDL+Verigol Synthesis, а мне необходимо было использовать PDS IP-Core (Verilog) + мои исходные файлы на VHDL.
  5. Да, в общем то, и правильно ругнулся ISE. Пожалуйста, внимательнее читайте документацию: В выделенных местах указано, что constraint 'S' (или 'SAVE') работает для цепей или сигналов. Вы же пытались прицепить его к модулю - и, естественно, он не сработал. Судя по всему, в Constraints Guide UG625 (v. 14.5) в Virilog описании присутствует ошибка, очень похожая на кривой Copy+Paste, т.к. для остальных 3-х видов примеров фигурируют только net или signal: С другой стороны, в XST User Guide for Virtex-4, Virtex-5, Spartan-3, and Newer CPLD Devices UG627 (v 14.5) March 20, 2013 говорится, что constraint 'S' можно и на net, и на block цеплять. Примеров тоже не привели. Возможно, на стадии Synthesis оно работает и на module, и на net, но на стадии MAP только для net. Я пользовался для "loadless signals" при VHDL описании - ни разу не подводило: Synthesis переживали все сигналы, а дальше мне было и не нужно - уже на MAP к нимм стыковался ChopScope ILA. Когда некоторые сигналы забывали подключить в ILA, блоки их порождающие так и продолжали оставаться в проекте с их было хорошо видно в FPGA Editor'е. Естественно, данная ситуация порождала Warning'и о loadless signals на стадии P&R и Bitgen. Обращу внимание на такой момент: практически у каждого семейства свой синтезатор, со своими заморочками. Столкнулся с этим при переходе от Virtex-5 к Virtex-6 - пришлось достаточно много править VHDL кода. Ну и когда пришлось в старое изделие на Virtex-6 портировать код отлаженный для Virtex-7/Kintex-7 тоже кое-что вылазило - делали даже запрос Xilinx на устранение ошибок в синтезаторе. У меня constraint 'S' (прицепленный к "loadless signals") при VHDL описании работал без нареканий в Spartan-3A/6, Virtex-5/6/7 и Kintex-7. Попробуйте прицепить constraint 'S' ко всем net, которые у вас "loadless signals" или "driverless signals".
  6. Иногда XST (и прочие синтезаторы) занимаются нежелательной оптимизацией исходя их того, что схема подключена к сдвиговому регистру (сам попадал на токое в аналогичной ситуации). В оглавлении ищем "Save Net Flag" и внимательно читаем. В подразделе Syntax Examples можно увидеть:
  7. 1. У Xilinx в ISE ChipScope есть VIO (Virtual Input/Output) - см. ChipScope Pro Software and Cores User Guide UG029 (chipscope_pro_sw_cores_ug029.pdf). 2. Может быть вам поможет constraint 'S' - см. Constraints Guide UG625 (cgd.pdf) для ISE. 3. Может быть есть ещё какой-либо путь. Для моих нужд хватало п.2.
  8. Да я бы тоже использовал VHDL'2008... Но у Pango ADS 2023-2-SP1 заявлена только Beta поддержка VHDL'93 - в итоге частично пришлось переписывать код на VHDL'93. Кстати этот мультиплексор - тоже. В оригинальном описании (VHDL'2008) 'A' был 2-х мерным массивом, и мультиплексор был по одному измерению, а элементы - по второму. Но т.к. на VHDL'93 не получилось описать тип 2-х мерного массива (чтобы оба параметра варьировались, и в одном проекте этот мультиплексор применялся бы несколько раз с разными параметрами, да ещё и в качестве входных/выходных портов entity), то пришлось переходить на одномерный массив. Собственно об этом и тема: на языке можно много чего написать, только ADS это не будет воспринимать. Первоначально была в виде ответа на вопрос про "подводные камни на пути" применения VHDL в Pango ADS 2023-2-SP1.
  9. Может быть,.. Если вопрос был в to_integer(unsigned(Sel)), то получаем такой результат: Проглатывает: Mux <= A( cnMux_W*(to_integer(unsigned(Sel))) + cnMux_W-1 downto cnMux_W*to_integer(unsigned(Sel)) ); Отрыгивает (Error: The left bound of range is not a constant expression) все 3 варианта: Mux <= A( cnMux_W*(to_integer(unsigned(Sel+1)))-1 downto cnMux_W*to_integer(unsigned(Sel)) ); Mux <= A( cnMux_W*(to_integer(unsigned(Sel)+1))-1 downto cnMux_W*to_integer(unsigned(Sel)) ); Mux <= A( cnMux_W*(to_integer(unsigned(Sel))+1)-1 downto cnMux_W*to_integer(unsigned(Sel)) ); Обязательно ещё раз гляну - с прошлого раза (лет 20 назад) запомнилось только, что оно не IEEE, теперь же гляну чьё именно. И Xilinx, и Pango функцию 'conv_integer' просто принужнает исользовать: см. эталонные описния RAM в xst.pdf и ADS_Synthesis_User_Guide.pdf. В итоге, я так и не понял, что подразумевалось под: Будет пример такого описания - я его попробую и о результатах расскажу. На взякий случай, постановка задачи такая: 1. из длинного A (std_logic_vector) выбирается кусок номер Sel (std_logic_vector) и выдаётся в Mux (std_logic_vector). 2. длины A, Mux и Sel - параметризированы так, что: A'Length = Mux'Length * (2**Sel'Length), Mux'Length = cnMux_W.
  10. Но это же - статика... с заранее предопределённым количеством состояний. А мне нужна была полная динамика: A, Mux - параметризированы (Sel под них подстраивается). Кстати, саму конструкцию я посмотрел где-то во времена ISE 10.1/11.1 (для Virtex-5) в исходниках (или библиотеках) Xilinx или даже в xst.pdf того времени - уже не помню. При предопределённом варианте мультиплексора использую With-Select или When-When-Else (иногда Case, и если уж совсем припрёт if-elsif-else),.. и то, если не надо описывать много состояний или нет смысла конструкцию свернуть. Ключевым требованием в моём описании является минимизации возможностей посадить опечатку, вторичным - именование сигналов, которые переживут оптимизацию и будут доступны в FPGA Editor'е (куда как приятнее видеть подходящий к BRAM сигнал xx_LRAM_WE, чем net0078352). 1. conv_integer - IEEE.std_logic_unsigned, std_logic - живёт в соседнем IEEE.std_logic_1164. Соответственно теперь даже мыслей нет, что могло подразумеваться под: "написать в соответствии со стандартом языка". 2. и что-то не могу понять, где я использовал "умножения для типа std_logic_vector" ? - cnMux_W - generic positive, - conv_integer - даёт integer, - на всякий случай: signal Mux: std_logic_vector(cnMux_W-1 downto 0);
  11. Да я бы и не против (а может и всячески 'за'), но что-то не могу сообразить, о чём идёт речь. Поэтому, если хотите получить ответ (или результат проведённого мною эксперимента), то: - либо приведите (ссылку/текст) фрагмента стандарта, который мною приведённая запись нарушает; - либо сам вариант записи конструкции (cnMux_W - generic positive, Sel - std_logic_vector).
  12. И вот что самое интересное, тот же самый ADS 2023.2-SP1 подобные конструкции в VHDL спокойно воспринимает: constant cnO_W: positive := Log2Roundup(A'Length); signal RAM_DO: std_logic_vector(RxC'Length+RxD'Length-1 downto 0); Log2Roundup - User Function (прямой аналог $clog2) 'Length - VHDL predefined attribute (прямой аналог $size) Отмечу, что вся поддержка VHDL - "Beta Feature for VHDL", равно как и поддержка Verilog $size - тоже Beta, но "Beta Feature for Vierilog". И обе эти Beta'ы необходимо включать соседними опциями в опциях Compile.
  13. Обращаю внимание, что в обоих случаях Compile просто разваливается: В Messages нет ни Error ни Critical Warnings. А вот в конце Log выглядит как-то так: Start rtl-elaborate. I: Verilog-0003: [***.sv(line number: ***)] Elaborating module *** Development error at line *** in E:\wf\2023.2\output_files\ads\FAB_Develop\branches\pds_2023.2\source\sw\ads\***.cpp pds_shell crashes. call stack dump: 00000001405e00c4 00000001405e067f 00000001405e05ab 00000001404d8039 000000014036e7cc 00000001403196f2 000000014031bdda 00000001402f164d 00000001402efe74 0000000140309aee 00000001403012a3 00000001402c0d65 0000000141c6bc89 00000001407754dd 00000001407a3de0 00000001401766d3 000000014017c754 000000014017c379 00007ffa83ca93f4 00007ffa83ca7b53 00007ffa83c80207 00007ffa83c802c9 00007ffa83c81ffe 00007ffa83ccb420 00007ffa83c7c28b 00007ffa83c7f23b 000000014017f166 000000014197f524 00007ffaff1081f4 00007ffb01b4a251 000000014017f060 Action compile: Real time elapsed is 0h:0m:4s Action compile: CPU time elapsed is 0h:0m:1s Action compile: Process CPU time elapsed is 0h:0m:1s Action compile: Peak memory pool usage is 120 MB Current time: Wed Apr 24 11:46:27 2024 Названия конкретных файлов и номера строчек заменены на ***.
  14. Забыл, есть ещё одна грабля при описании мультиплексора для ADS от PDS 2023.2-SP1: Вот так - можно: Mux <= A( cnMux_W*conv_integer(Sel) + cnMux_W-1 downto cnMux_W*conv_integer(Sel) ); А вот так - нельзя (Error: The left bound of range is not a constant expression): Mux <= A( cnMux_W*conv_integer(Sel+1)-1 downto cnMux_W*conv_integer(Sel) ); Но эта проблема была ещё в 2023.1 при синтезе Synplify, поэтому я не сразу вспомнил. Как-то в ISE на такие проблемы ни разу не наступал.
  15. 1. Главной проблемой была некорректная работа Hierarchy Updater’а: пока он не может корректно построить дерево проекта в тех местах, где в VHDL используются внешние модули (Verilog / IP-Core), но об этом я уже писал. 2. Для некоторых может быть непривычно и неочевидно, что (в строгом соответствии с VHDL’93) при использовании entity из библиотеки Work, необходимо указывать: library work; use work.all; 3. Несколько напрягает, что все справочные материалы на китайском. 4. Немного изменилась работа с атрибутами: для VHDL необходимо использовать Syn_* атрибуты (на 2023.1 достаточно было использовать PAP_* атрибуты – тогда было меньше warning/info о преобразовании Syn_* атрибутов в PAP_*). С другой стороны в ADS_Synthesis_User_Guide.pdf добавлено очень подробное описание правил применения Syn_* атрибутов с примерами на каждый случай. Но главной проблемой был п.1, т.к. приводил к падению Compile с «internal error» без объяснения причин падения. Отмечу, что Pango Micro старается сделать PDS/ADS лучше, с каждым шагом (2022.2-SP4->2023.1->2023.2-SP1) я отмечаю существенные сдвиги в лучшую сторону.
×
×
  • Создать...