Timmy
Участник-
Постов
852 -
Зарегистрирован
-
Посещение
Весь контент Timmy
-
Тип Integer имеет длину 32 бита, поэтому и conv_integer с большей длиной не работает. Если нужно больше 32 бит, используйте signed.
-
Примерчик функции вращения для массива из целых чисел(синтезируемый, но, возможно, неэффективно). type integer_vector is array (integer range <>) of integer; function rotation(data:integer_vector, rot:integer)return integer_vector is constant length:integer := data'length; variable result:integer_vector(0 to length-1); variable i:integer; alias da:integer_vector(0 to length-1) is data; begin for i in result'range loop result((i+rot) mod length) := da(i); end loop; return result; end function;
-
PCie и размер BAR
Timmy ответил RobFPGA тема в Работаем с ПЛИС, области применения, выбор
При обнаружении нового устройства BIOS записывает в таблицы ESCD/DMI, находящиеся на флэшке, информацию об этом устройстве, это стандартная операция, совсем не случайная. А потом BIOS начинает зависать, прочитав из ESCD/DMI информацию, которую не может правильно применить. -
PCie и размер BAR
Timmy ответил RobFPGA тема в Работаем с ПЛИС, области применения, выбор
Думаю, что поломался не код BIOS, а ESCD/DMI data, они вполне законно обновляются именно при конфигурации устройств. Жаль, что материнки обычно не умеют очищать DMI data без входа в BIOS setup, а умеют только глючить :smile3046: . -
TimeQuest и ЦАП
Timmy ответил warrior-2001 тема в Языки проектирования на ПЛИС (FPGA)
Вот предполагаемая константа g7_U_3|pll_input_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk на самом деле не константа, а содержит макроподстановку [1], так что TCL попытается выполнить команду без параметров с именем "1", которую, очевидно, не обнаружит и выдаст исключение, которое должно превратиться в предупреждение от TQ. -
TimeQuest и ЦАП
Timmy ответил warrior-2001 тема в Языки проектирования на ПЛИС (FPGA)
Непонятно, у вас данные edge aligned или edge centered? Предполагаю, что всё же edge centered. Тогда output_delay более логично ставить -0.5 min и 0.5 маx без всяких offset. В случае edge centered data надо дополнительно вывести с PLL клок, повёрнутый на четверть периода, и подключить к tx_outclock именно его. Может быть, мегафункция LVDS сама это делает, но лучше руками, как des00 советует. В false_path ошибки - строковые константы, содежащие [], надо заключать в {}. -
По-моему, совершенно естественно, чтобы при циклическом сдвиге индексы новой позиции каждого элемента вектора определялись по формуле new_index = (current_index+rotation) mod n_elements_in_vector Право/лево зависит от того, в каком направлении возрастают индексы. Из этой же формулы следует, что отрицательное вращение можно интерпретировать, как вращение в другую сторону относительно положительного. В нашем случае индексы возрастают слева направо, отрицательный сдвиг будет влево, так что правильно.
-
Уточнение, строки лучше закручивать в другую сторону, тогда при выборке колонок не надо переворачивать данные. 17 24 1 8 15 16 23 5 7 14 20 22 4 6 13 19 21 3 10 12 18 25 2 9 11 Для выбора строк использовать следующие параметры: address = row_index; rotation = -row_index; для выбора столбцов: address = (-column_index + memory_module_index) mod matrix_width (*пять в данном примере*) rotation = -column_index; При выборе строк адрес на все модули подаётся одинаковый, а при выборе столбцов он у каждого модуля свой, в зависимости от величины memory_module_index, которая является константой для каждого модуля памяти(от 0 до matrix_width-1).
-
строки таблицы взаимно вращаете по единице на строку: модули памяти здесь сгруппированы по столбцам 17 24 1 8 15 5 7 14 16 23 13 20 22 4 6 21 3 10 12 19 9 11 18 25 2 Исходно все элементы столбца лежали в одном модуле памяти, а теперь они распределились по разным и их можно выбрать параллельно( данные столбца теперь выбираются по диагонали, а строки остались по строкам только с вращением). Правда, придётся ещё вращатель поставить, он больше всего места займёт, но всё равно сильно меньше чем двухпортовку на регистрах городить.
-
Можно хранить данные по диагоналям. Тогда для каждого модуля памяти 32x4 потребуется генерировать свой адрес, правда, это на четыре бита сразу, так что места немного займёт. В зависимости от смещения адреса между соседними модулями(+1 или -1) будет выбираться строка или столбец.
-
прием serial data с АЦП
Timmy ответил shide_3 тема в Среды разработки - обсуждаем САПРы
Надо в дизайне выравнивать клоковые линии. У вас, видимо, clk4x пошёл прямо на BUFIO, а clk - через BUFG, отсюда разница набегает. И констрейны надо правильно писать, я не просто так советовал изучать appnote. -
прием serial data с АЦП
Timmy ответил shide_3 тема в Среды разработки - обсуждаем САПРы
Отрицательный тайминг - это DCM компенсирует задержку в петле обратной связи, очевидно, петля через CLK получилась более длинная, чем путь CLK4X. -
В качестве делителя выхода VCO можно использовать OSERDES, они работают до максимальной частоты VCO, и позволяют поделить на любое чётное число, используя низкочастотную логику.
-
прием serial data с АЦП
Timmy ответил shide_3 тема в Среды разработки - обсуждаем САПРы
Для начала советую полностью разобраться с xapp866. -
Поправлю, IDELAYCTR есть только в Виртексах и семёрках, а тут речь про Спартан, там всё не так. Хотя в Спартане действительно можно использовать IODELAY для выравнивания в DDR2 контроллере, поскольку задержки короткие и есть возможность его откалибровать. И при условии новой ревизии чипа, без сбоев времени задержки.
-
Кривость IODELAY в том, что шаги могут различаться до 150ps, плавают в три раза по PVT, длина задержки не более полпериода, в старых ревизиях чипа были глюки, создаёт дополнительную задержку около 2 нс. PLL с внешней обратной связью позволяет выдавать наружу сигналы, строго привязанные к фазе входного клока независимо от PVT, с точно настраиваемым сдвигом фазы относительно входного клока, для этого использовать два выхода PLL - один только для обратной связи, другой для тактирования выходных триггеров и прочего.
-
Эта задача решается с помощью PLL/DLL с внешней обратной связью(zero delay buffer). А IODELAY, в особенности такой кривой, как в S6, тут не помошник.
-
Проект на XC3S500Е
Timmy ответил zmey77 тема в Предлагаю работу
По последним даташитам от 2013-14года S3E/S3A имеют статус Production и их мелким вариантам никакой альтернативы у Ксайлинкса нет. -
Захват MMCM
Timmy ответил masverter тема в Работаем с ПЛИС, области применения, выбор
Например, плохо развязано питание MMCM, когда добавляется логика, от переменной нагрузки все напряжения начинают прыгать, а MMCM этого не любит. -
Ваши констрейны не работают. Макроподстановка изнутри {} не выполняется. В данном случае можно писать без фигурных скобок, так как списки из одного элемента. Если нужно больше элементов, то использовать команду list: неправильно: [get_clocks {$clk1 $clk2}] правильно: [get_clocks ] А вообще, чтобы отчёты выглядели красиво, по возможности следует руками описать все клоки, взяв команды из листинга derive_pll_clocks. Ещё, чуть не забыл: если вдруг значение clk1 внутри содержит пробелы, то без оно будет ошибочно принято за список и неверно интерпретировано, так что на всякий случай стоит использовать даже для списка из одного элемента. правильно прикроет пробелы внутри clk1 эскейп последовательностями, и пробелы не будут интерпретироваться, как разделители списка.
-
Что с generate не так?
Timmy ответил Мур тема в Языки проектирования на ПЛИС (FPGA)
Лаконично можно одним выражением описать: CODE_DC_OUT <= std_logic_vector(shift_left(to_unsigned(1, CODE_DC_OUT'length), to_integer(unsigned(CODE_DC_INP)))); Хотя кодогенерация для варианта с циклом может оказаться лучше. -
Как можно не останавливаться, если операнд команды ещё не определён? Хотя можно попробовать выполнить следующую команду, но внеочередное исполнение команд - это уже не слишком простенькая вариация. К тому же бесполезная, так как лучше расставлять команды в правильном порядке при компиляции:).
-
Плох только тем, что места займёт больше, чем восьмибитный. А так все фирменные софтпроцессоры большой тройки - NIOS2,Microblaze,Mico32 представляют собой испорченный разными способами MIPS.
-
Компиляция XilinxCoreLib
Timmy ответил D-Luxe тема в Языки проектирования на ПЛИС (FPGA)
Может версия active HDL слишком старая? Вообще по моим наблюдениям даже 9.1 не может нормально полноценно работать ни с Альтерой ни с Ксайлинксом. Библиотеки компилируются, но некоторые вещи глючат. -
Не все параметры описаны в даташите. Вы должны описать такую иголку в констрейне на клок. Если иголка будет слишком короткой, анализатор времянок должен выругаться. А если не выругается, это косячок:).