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

sazh

Свой
  • Постов

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

  • Посещение

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

    2

Весь контент sazh


  1. Подстройка фазы этого окна в цикле. А как это сделать (если принять условия задачи как данность).
  2. Немного не то. Цитирую по Комолову: Для сохранения назначения ресурсов, выполненных компилятором используется функция back-annotation. Позволяет сохранить (скопировать) выполненные компилятором назначения выбранных ресурсов в качестве текущих пользовательских. Конечно можно частный случай в начале проектирования сразу закрепить за пинами и потом откорректировать под свои нужды. А это значит, что уже на раннем этапе проектирования Вы сами себе создаете ограничения по разводке проекта и использованию ресурсов кристалла. Вам предложили стандартный подход. Внести ограничения в проект (имена цепей к НУЖНЫМ Вам, а не выбранным произвольно компилятором пинам привязать) на конечном этапе проектирования.
  3. Открываем xst.pdf и читаем This manual describes Xilinx® Synthesis Technology (XST) support for HDL languages, Xilinx® devices, and constraints for the ISE™ software. The manual also discusses FPGA and CPLD optimization techniques and explains how to run XST from Project Navigator Process window and command line. Далее в разделе Arithmetic Operations имеем module adder(A, B, SUM, CO); input [7:0] A; input [7:0] B; output [7:0] SUM; output CO; wire [8:0] tmp; assign tmp = A + B; assign SUM = tmp [7:0]; assign CO = tmp [8]; endmodule И Вы хотите меня уверить, что пакет, возможности которого по определению должны быть выше по сравнению с предложенным ISE и Quartus, это не поддерживает? Тогда зачем терять время и деньги.
  4. открыл xst.pdf от xilinx. Скопировал в лоб. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity adder is port( A, B : in std_logic_vector(7 downto 0); SUM : out std_logic_vector(7 downto 0); CO : out std_logic); end adder; architecture archi of adder is signal tmp: std_logic_vector(8 downto 0); begin tmp <= conv_std_logic_vector((conv_integer(A) + conv_integer(B)),9); SUM <= tmp(7 downto 0); CO <= tmp(8); end archi;
  5. В lpm битом переполнения неудобно пользоваться (в графическом редакторе) Вот еще одна форма работает module sumb(a, b, res); input [7:0] a; input [7:0] b; output [8:0] res; assign res = a + b; endmodule Откройте quartus хендбук, та же есть рекомендации по сумматору на vhdl. Такие рекомендацииесть у всех фрим производителей. Скачайте от actel, xilinx. Есть из чего выбрать.
  6. Странно все это. Как раз LPM функция не позволяла делать шины аргументов и результата различной разрядности. Действительно приходилось дополнять старший разряд 0 (без знака) А вот на языке в quartus нет проблем (верилог) пример взят из руководства Quartusa module sum(a, b, addnsub, res); input addnsub; input [7:0] a; input [7:0] b; output [8:0] res; reg signed [8:0] res; always @(a or b or addnsub) begin if (addnsub) res <= a + b; else res <= a - b; end endmodule Причем (на циклоне) только при различной разрядности это укладывается в мегафункцию. На vhdl должно быть тоже самое.
  7. В зависимости от частоты работы счетчика, сделал бы конвееризированный сброс. Поясните пожалуйста.
  8. //Сигнал дергается во времени на осцилоцграфе, по типу: ..1,0,1,0,1,0 и врдуг опять 0,1,0... Частота "клока" маленькая - не больше 1кHz. Тест бенч на ISE 7.1.1 я писать не умею, не знаю где что вставлять. Раньше в унив. делал что то подобное в Xilinx Foundation. В принципе подобный делитеь можно записать и в другом духе, что я и пробовал, работает нормально. Ошибки в моем исходнике нет точно, так как такими же (почти) исходниками полон и интернет и книги по VHDL. Я подозреваю ошибку в прогр. обеспечении ISE 7.1. или сам чип тормозит. Или какие установки типа user time cosntraints и прочее. Обидно, не хочется просто так бросить этот пустяк так и не разобравшись в чем дело. Два дня уже на это потратил. Elresearch, попробую твои вещи завтра, но почти уверен что тоже не пойдет. Что то он не любит конструкцию типа: COUNT_INT <= COUNT_INT + 1// К Вашему ISE нужен моделсим. Это лучше, чем осциллограф. (Наверно на внутренней синхронизации смотрите. Сколько ему лет). ISE точно не причем. И ограничения тут нет. На одной частоте все работает. И конструкция эта самая любимая. Скачайте с сайта xilinx xst.pdf (синтезабельное hdl описание библиотечных элементов).
  9. //Мужики, делаю элементарный 8-и битовый двоичный счетчик на ISE7.1 для XC9572-PC44 CPLD. Сигналы счетчика вывожу через IO выходы. По идее, частота каждого следущего бита досжна делиться на два. У меня же частота всех равна половине CLK (CLK/2) плюс некоторые биты "дергаются" словно шум по фазе. Не могу понять в чем дело. Вроде нет ни ошибок с компиляцией ни с загрузкой. С сигналом CLEAR и CLK Все нормально. Исходник взят из справочника на инете:// В Quartuse все работат. Нормальный делитель на 129 с асинхронной установкой в ноль. Где дергаются биты? Если при временном моделировании, проверьте установленный в тестбенче период клока. Может на такой частоте кристалл не работает.
  10. Зайдите на Google.com и посмотрите таблицу истинности на этот универсальный регистр. Если два раза щелкнуть по примитиву 74299 в MAX+, увидите внутреннюю структуру на уровне логики. Там двунаправленные пины и элементы с третьим состоянием. Лучше уж тогда использовать ИР9 (74165). Он проще. Если на нем разместить иконку ?, получите таблицу истинности. Если все это не лабораторная работа студента, в схемном редакторе уместны только мегафункции (lpm_shiftreg) и папка “чистых” примитивов. Это хоть как то поможет Вам угнаться за разработчиками, работающими с помощью текстового описания. По AHDL полно литературы. А навыки в схемотехнике только приветствуются. Если использовать какой либо HDL, надо переходить на Quartus. Тогда Вам действительно многие смогут помочь.
  11. Для того, чтобы работать с 74 серией, нужно как минимум прочитать книгу Шило от корки до корки. Никто никогда не соединяет выходы переносов по И Используют трюковые входы для каскадирования и формирования сквозного переноса, на выходе последнего можно получить импульс длительностью в один такт несущей частоты или в 16 тактов в зависимости от манипулирования трюковыми входами.(Читайте ШИЛО) Берете ИЕ9 (74160) . Рисуете 6 штук. Если нет этих знаний, только мегафункция lpt_counter. Это уже поведенческий уровень. В ней же хелп есть. Все интуитивно понятно. Активизируете два порта clk и cout. Вместо cout можно использовать eq[0] А в параметрах направление up, модуль 1000000, ширина шины width 20 (чтобы Ваш миллион влез). Все. На выходе Ваш импульс, весь в пичках, пропустите его через d триггер на той же частоте, что и счетчик.
  12. //узел построенный на эл. АГ3 выравнивает по фазе два сигнала, каким образом еще можно это сделать в максе// НЕ надо делать это в МАХе. Вынести его за ПЛИС на печатную плату. По большому счету схему на элементах средней степени интеграции можно влоб перенести на программируемую логику, если она полностью синхронна. Поэтому имеет смысл подходить к Вашей существующей схеме как к функциональной. При этом не имеет смысла использовать примитивы 74 серии. Используйте (изучайте) мегафункции. Например lpm_counter полностью имитирует все существующие структуры счетчиков а удобств на порядок больше (любая разрядность, не надо знать о трюковых входах, выходах, можно модуль пересчета создавать, наконец рисовать меньше). Достаточно использовать папку мегафункций и папку примитивов.
  13. Действительно, интересно. Обсудили Вашу проблему со всех сторон. Вам даже выкатили готовую мегафункцию формирователя псевдослучайной последовательности. И что у вас на выходе. Неужели у вас нет под рукой RTL просмотрщика, чтобы посмотреть что Вы напроектировали. Ведь наверняка получили кучу замечаний. И не устранили. Основа Вашей схемы – один регистр и элементы XOR. Инициализация может быть только двумя способами Или с помощью внешнего сигнала установки начального значения на этом регистре, или с помощью дешифрации состояния регистра по включению и синхронной загрузки в регистр нужного начального значения. Если хотите защититься от сбоев, продешифрируйте запрещенные состояния вашего полинома и грузите по сбою нужное состояние в регистр. Хотите простробировать полученную шину, поставьте на выходе просто регистр. Что касается схемотехники, нужно с умом использовать схемные решения, которые используются в ограниченном интервале времени и всего один раз (Например по включению питания выработать интервал определенной длительности ( то что Вы называете инициализацией)) и потом на выходе всегда какой то неизменный уровень. Без установок синтезатора не обойтись. По умолчанию такие куски схем игнорируются синтезатором. А значит и выбрасывается та часть схемы, которая управляется этим триггером (константной) или в Вашем случае счетчиком. Вы же уже второй раз напоролись на это. "count=1". Что касается элементов BIDIR. Они могут использоваться только совместно с шинными формирователями по третьему состоянию. Хотя вообще не понятно, зачем здесь двунаправленная шина.
  14. To Victor //И еще, совет - используйте отдельный сброс// Хочу еще раз акцентировать. В нормальной схеме (если не нужны конкретные установки регистров в нужный момент времени) отдельный сброс только вреден. (Меня всегда умиляла кнопочка сброс на макетках с микроконтроллерами). В данном случае сброс на тригггер flag действительно сделает эту схему независимой от установок синтезатора. И больше ничего. Как была схема некорректной так и останется. Внешний сброс источник всех сбоев. И в данной схеме он не нужен. По дешифрации состояния все нули загружать в регистр константу все 1.
  15. Никакого ресета (в глобальном смысле) для работоспособности счетчика не надо. Ясно дело, не корректна схемная реализация. VHDL не знаю. Работаю в Quartuse Выдается ошибка при синтезе: Error (10481): VHDL Use Clause error at counter.vhd(9): design library "UNISIM" does not contain primary unit "VComponents" Сделал так: --library UNISIM; --use UNISIM.VComponents.all; Получил предупреждение: Warning: Reduced register "flag" with stuck data_in port to stuck value VCC По включению питания триггер flag устанавливается в ноль. Только вот на d входе триггера 1, по этому при включенной опции по умолчанию Power-up don’t care синтезатор игнорирует этот триггер (считает его за константу), выбрасывает часть схемы и благодаря этому на выходе все нули. Если отключить минимизацию Power-up don’t care, все работает, как? Вам виднее. Резюме. Схема некорректна в части формирования сигнала триггером flag.
  16. Вот ещё возможный источник гадостей. Несколько раз я пробовал пользовать его на LPT, каждый раз натыкался на нерегулярные (и регулярные) сбои из-за взаимных наводок в соседних проводах шлейфа. Иногда даже на оциллографе видно, что они приближаются к порогу срабатывания. И это при килоомной нагрузке на конце. Теперь только кабель в кембрике, свалянный как попало//// Удивительно слышать это. Как попало лучше ленточного, сигнальные которого чередуются с gnd? Лучше может быть только витая пара. Так ведь делалось действительно под защелкивающийся разъем, чтобы с пайкой не заморачиваться. По опыту работы могу сказать, что JTAG штука капризная. Разводить надо ее в первую очередь, думать о длине проводников, может даже буферизовывать эти линии. Бывает узел на столе нормально конфигурируется, засунешь узел в блок, не хочет, со сбоями. Может на плате рядом с линиями JTAG стоят высокочастотные генераторы. Может просто где то gnd или pwr оборван. Все равно работать будет со сбоями. Это же не ТТЛ. Короче много факторов. А вот длина до LPT менее критична.
  17. Здорово я Вас запутал. Не вдаваясь в подробности Вашей схемы скажу, что если подать лог.0 на один из входов элемента 2И, на выходе всегда будет ноль. Если подать лог.1 на один из входов элемента 2ИЛИ, на выходе всегда будет 1 В Вашем случае все проще. Нужно найти в схемном редакторе пакета сдвигающий регистр имеющий входы типа shiftin, load, data, выходы q На вход shiftin посадить лог.1 Разрядность сдвигающего регистра по максимальному количеству нулей. Их 7 Значит data[6:0] q[6:0] В режиме ожидания сдвигается лог.1 На выходе q[6] уровень лог.1 По сигналу load загружаете число 0000000 или 0001111. На выходе q[6] их получите.
  18. module sd_interval (clk, load, sd, out_interval); input clk; input load; // интервал строба load больше или равен периода clk input [3:0] sd; output out_interval;// длительностью в целое число sd (исключая 0) reg [3:0] ct;// счетчик reg trigger_enable;// интервал, в котором разрешена работа счетчика reg [1:0] shift_left_rg; wire enable_load; assign out_interval = trigger_enable; /// схема формирования одиночного импульса enable_load длительностью в один такт clk /// по переднему фронту сигнала load always @ (posedge clk) begin shift_left_rg <= {shift_left_rg[0], load};// end assign enable_load = shift_left_rg[0] & ~shift_left_rg[1]; ///////////////////////////////////////////////////////////////////////////// always @ (posedge clk) begin if (enable_load == 1'b1) ct <= sd; // по enable_load в счетчик загружаем число sd else if (trigger_enable == 1'b1) ct <= ct - 1'b1;// работаем на вычитание в интервале trigger_enable end always @ (posedge clk) begin if (enable_load == 1'b1) trigger_enable <= 1'b1;// по enable_load разрешаем интервал работы счетчика else if (ct == 4'd1)//когда счетчик досчитает до значения единица, запрещаем работу счетчика trigger_enable <= 1'b0; end endmodule
  19. видите в чем дело все сделано как написано в доке это первое conf done вылезала не часто но она была когда все прошивалось signal tap работал но стоило попробовать использовать Identify при нем кстати вылетела ошибка communication error теперь signal tap не работает пишет invalid jtag configuration могла микросхема сдохнуть? signal tap я еще не пользовался, не знаю. Что касается самодельного байтбластераMV, у меня печатная плата под плоский кабель, по 30см собоих концов. Циклон конфигурируется без проблем. Настоящий байтбластерII со стороны LPT порта через 2х метровый покупной переходной кабель, тоже без проблем. Насчет вылета микросхем по JTAG. Раздал около 10 плат байтбластераMV потребителям. Один из них жаловался на hc244. Горела. Не было заземления на компьютере. (Я не землюсь при работе с узлом.Все соединения делаю при выключенном узле.При гарантии наличия всех GND) Думаю дело все же в линиях согласования по JTAG. Если конечно что то уже не вывели из строя при работе со щупом)
  20. подскажите пожалуйста почему при прошивке EP1C3 байтбластером mv вылетает ошибка Conf_done pin failed to go high хотя все конфигурационные пины распаяны по доке altera? msel оба к 0 на nSTATUS конденсатор 1000пф как советовали выше все шьется теперь но signaltap не работает нет сбора данных потом пишет invalid jtag configuration ? Если все действительно сделано по доке Алтера, конденсаторы на nSTATUS не нужны. Да и щуп осциллографа тоже без надобности. Где то есть не соответствие со схемой загрузки по JTAG (TCK через резистор на GND и т.д.), висячие входы на DCLK, DATA, nCE. Недостаток фильтрующих конденсаторов, в том числе и на разъеме JTAG. Посмотрите Configuring Cyclone FPGAs по всем контактам, даже если они не используются. Может вообще холодная пайка или не пропай (щупом прижимаете, и все работает).
  21. Что в лоб, что по лбу. Добавление 2х входового XOR влечет за собой двукратное увеличение ресурсов по затратам. Интересно было бы узнать результаты синтеза сторонних фирм.
  22. Видимо Вам нужен делитель по модулю. Может кто переведет. // A modulus 8 up counter module ct_module (clk, out_a, out_b); parameter modulus = 8; parameter width = 3; input clk; output out_a; output out_b; reg [width-1:0] ct; reg out_b; always @(posedge clk) begin if (ct == (modulus-1)) ct <= {width{1'b0}}; else ct <= ct + 1'b1; end assign out_a = ct[width-1]; always @(posedge clk) begin out_b <= (ct == (modulus-1)); end endmodule
  23. TO BAR Одним словом не ответить. Имеет смысл читать книги разных авторов. А подход один. Сначало функциональное моделирование. Потом временное. При сравнении должны получить одинаковые времянки (в интервале глобального клока). У Вас при функциональном моделировании на выходе сигнала не будет. Отсюда простая рекомендация. Стремиться к одноклоковой (глобальной) синхронизации, к синхронным схемам. Формировать все сигналы в разах глобального клока (кратными его периоду). В противном случае глубоко изучать рекомендации по использованию того или иного пакета.
  24. А какой смысл этой схемы что в схематике, что в тексте. Действительно, Quartus это синтезирует. В результате Вы получаете на q пички в интервале en длительностью времени срабатывания триггера по асинхронному clr. Даже если опустить тот факт, что это категорически неприемлемо для программируемой логики, логического смысла в этом тоже нет. Сигнал на выходе q эквивалентен клоку c в интервале en. Молодец этот synplify.
×
×
  • Создать...