Jump to content

    

iosifk

Модераторы
  • Content Count

    4379
  • Joined

  • Last visited

Everything posted by iosifk


  1. Так обычно всегда и бывает. Сначала "сделаем по минимуму". Потом "добавим". Потом еще "добавим". И вот уже надо и чип брать побольше. И с памятью..
  2. Так пишу же, что из каждого счетчика в 22 разряда, в регистрах можно оставить скажем 5 разрядов, а остальное переместить в память. Да и наверняка можно все то, что переносится в память убрать в один блок. Но это надо смотреть точнее. И модуль последовательного приема-передачи тоже переделать. И в итоге кристалл окажется почти пустым... Если захотите, подробно объясню, как и что...
  3. Я присоединяюсь к des00. Счетчики в 22 бита можно на 2/3 убрать в память. При этом "паровоз" может поехать и быстрее, чем на 24 Мгц. Да и кристалл будет почти пустой... Про п.1,2 вообще не говорю, уже все сказано.
  4. Ошибся я.. Не в Актелах, а в Акрониксах...
  5. А зачем "синхронизировать" сигнал от которого и так все должны синхронизироваться?
  6. Тут надо смотреть даташит... Вообще, как я помню, в больших чипах глобальные входы сначала идут на некий коммутатор, а только потом разводятся по кристаллу. И в этом коммутаторе выбирается источник сигнала и он переключается на нужное направление. А вот в больших Актелах функция привязки сброса к клокам вообще сделана аппаратно для каждого региона кристалла.
  7. Да, снимется на втором. Но ведь именно так и надо пропускать асинхронные сигналы через 2 триггера для синхронизации с тактовой. И если есть несколько клоковых доменов то Ксайлинкс в примере к ISE сделал такой модуль в каждом домене. А то, что сброс не будет сниматься "одновременно", то это так и должно быть. Ведь каждый домен работает независимо от других клоков...
  8. Пример Ксайлинкса.. Выставляется асинхронно, снимается под клоки данного региона. И в каждом регионе клоков вставляется вот такой модуль. //----------------------------------------------------------------------------- // // Copyright (c) 2008 Xilinx Inc. // // Project : Programmable Wave Generator // Module : reset_bridge.v // Parent : Various // Children : None // // Description: // This is a specialized metastability hardener intended for use in the // reset path. The reset will assert ASYNCHRONOUSLY when the input reset is // asserted, but will deassert synchronously. // // In designs with asynchronous reset flip-flops, this generates a reset // that can meet the "recovery time" requirement of the flip-flop (be sure // to enable the recovery time arc checking - ENABLE=reg_sr_r). // // In designs with synchronous resets, it ensures that the reset is // available before the first valid clock pulse arrives. // // Parameters: // None // // Notes : // // Multicycle and False Paths, Timing Exceptions // A tighter timing constraint should be placed between the rst_meta // and rst_dst flip-flops to allow for meta-stability settling time // `timescale 1ns/1ps module reset_bridge ( input clk_dst, // Destination clock input rst_in, // Asynchronous reset signal output reg rst_dst // Synchronized reset signal ); //*************************************************************************** // Register declarations //*************************************************************************** reg rst_meta; // After sampling the async rst, this has // a high probability of being metastable. // The second sampling (rst_dst) has // a much lower probability of being // metastable //*************************************************************************** // Code //*************************************************************************** always @(posedge clk_dst or posedge rst_in) begin if (rst_in) begin rst_meta <= 1'b1; rst_dst <= 1'b1; end else // if !rst_dst begin rst_meta <= 1'b0; rst_dst <= rst_meta; end // if rst end // always endmodule
  9. Да я все это понимаю. А ТС - нет. Поэтому напишу так. Помните, как идет экспонента в переходном процессе? За 3 "тау" - 95%... А 1% за сколько? А за сколько 0,1%??? И в этом случае этих "тау" будет сильно много.. Так же и с аппаратурой. Если хочется сделать "по-быстрому" то при этом проблем нет. Ну сбойнет, так перезапустим. Но как только непрерывный долговременный режим, да еще в индустриальных цепях... И требуется, чтобы сбоев было меньше, чем 0,1%... А представьте, вот сделали для ТС проект. И отказ или сбой типа зависания только в 0,1% случаев. Кажется - ерунда. Но при 1000 шт./мес это значит, что каждый месяц надо будет ехать к клиентам разбираться. 100 долл. за билет, плюс гостиница. А еще рекламации. И где прибыль? А тот, кто делал проект - у него договор выполнен и нареканий нет. Он же не дурак забивать в протокол испытаний всякие бяки. Доработки? Без проблем, но за большие деньги... Ищите книгу о "серебряной пуле". Там американец доказывает, что с увеличением сложности и объема проекта производительность труда резко уменьшается.
  10. Точно не помню, но кажется так. "узел A должен отправлять" посылку, в которой все биты идут тем же уровнем, что и стартовый. Это позволяет "узлу B" поймать посылку, даже если его тактовая гораздо ниже. Эту посылку "узел B" ловит и смотрит, что получил. Если в принятой посылке находятся биты другого уровня, то "узел B" должен пересчитать свою скорость...
  11. И даже более того. Каждый производитель чипа для счетчика - это и ADI и TI и др. продадут или даже подарят стартовый набор со всем содержимым. А при миллионных сериях еще и своего инженера предоставят для консультаций. Правда в стартовом наборе возможно не будет обработки каких-нибудь аварийных сбоев или еще каких частностей - это уже дело разработчика. Но основа там точно есть...
  12. Я дополню... Хотя бы даже не код, а словесное описание или блок-схему алгоритма...
  13. А почему сразу не сделать это в явном виде. Ведь Вам дали ссылку на Клиффа: Guideline: Use blocking assignments in always blocks that are written to generate combinational logic [1]. Guideline: Use nonblocking assignments in always blocks that are written to generate sequential logic [1]. Но Вы это игнорируете... И еще. Вам действительно надо сделать что-то вроде этого: brd_err2[3] = in_data[3] || in_data[2] || in_data[1] || in_data[0]; только за один такт? С какой скоростью в проект "прибывают" данные и какая частота у "clk"? Может быть можно успеть все эти вычисления сделать и по-другому? А главный вопрос вот какой: какой смысл делать вот так: " Намеренно использую при этом блокирующее присваивание, так код получается коротким и хорошо читаемым."? Если потом приходится более 20-то часов выяснять как преодолеть проблему данного кода. И проблема еще не решена. Потому как если даже Вы заставите программные инструменты сделать "как надо" сегодня, то через полгода-год появится новая версия софта и возможно проблемы выплывет снова. IMXO, за 20 часов можно переделать проект так, чтобы наверняка не было никаких проблем...
  14. Так это же человек-невидимка. Почты - нет, Телефона - нет, Сайта - нет, Публикаций - нет. Где хоть какие-нибудь гарантии? И зачем здесь тратить время на подробности?
  15. Для начала надо сюда обратиться: http://gramota.ru/slovari/dic/?lop=x&bts=x&ro=x&zar=x&ag=x&ab=x&sin=x&lv=x&az=x&pe=x&word=компонент и внимательно прочитать вот это: " Необходимые компоненты." Или обратиться сюда: kit-e.ru и почитать название. А иначе кто же согласится???
  16. Вот и пишите свои посты так, чтобы показывать что это только Ваше мнение, а не истина в последней инстанции. Я считаю, что давить своим мнением так - "то что тут написано - неверно" не делает Вам чести...
  17. Я точно знаю о чем пишу. А " тут ни при чем" - это только Ваше мнение... Сквозные токи - это отдельная тема и там действительно будут греться оба чипа. А на рассасывании зарядов будет греться только тот, кто на дал зарядам рассосаться и вылез на шину. Для примера - такт "turn around" в PCI.
  18. В любом случае задержка из-за рассасывания зарядов на шине - т.е. разряд емкости проводов и нагрузки будет на порядки больше. И если не дать на это дополнительное время, то те выходы, которые будут управлять шиной будут сильно греться...
  19. Задание написано безобразно... Вот входы: KEY0 : in std_logic; - это 1 кн KEY1 : in std_logic; - это 2 кн CLK100MHZ : in std_logic; Надо понимать так, что на кнопку №1 кто-то будет нажимать и после подавления дребезга в 1мс эти нажатия надо считать. А что значит "до и после"? Что значит в №5 - " 2 кн.- отображение счетчиков"? А что индицируется исходно? Все надо делать по порядку. Описывается так. Сначала кто Вообще в деле есть, потом кто с кем соединен. Потом кто что делает и что это действие вызывает. Итак: Две кнопки Ядро логики Индикаторы. При нажатии на кн.1 - что и куда подается? При нажатии на кн.2 - что и куда подается? По исходному что делается? При нажатии на кн.1 - что делается? Импульсы фильтруются от дребезга в 1 мс и производится подсчет импульсов ...? Каких; При нажатии на кн.2 - что делается? Вывод на счетч. значение на светодиоды. А если не нажимать, то что выводится? При нажатии на кн.1 и кн.2 одновременно - что делается? Сброс чего? Индикация чего и по какому условию? Когда выводится "импульсов до" и когда "после". Индикация статическая? Динамическая? И что, личная почта не работает?
  20. Ой!!! А что такое "языке программирования VHDL"? И что, на нем "описывают программу"? А вообще, видно что у ТС буквы платные. Конечно, если надо платить за каждую букву, то какие тут комментарии в коде. Я уж не говорю о том, что коды есть, а что и для чего не написано.. Т.е. сделана "угадайка"... Что хотели, что получилось, что не так??? По хорошему за такое для разработчики положена расстрельная статья.
  21. Я дополню. У Вас nameless, неправильный подход к описанию. Вы пишите так, как это делается для программирования. Т.е. "условие - действие". И в случае программирования - это правильно. Но не в случае описания железа. Вы должны отдельно описать цифровые узлы, например вот такие счетчики - "sampl_cntr <= sampl_cntr + 1;" и для каждого узла сделать вывод разрешающий какое-то действие: счет, обнуление, хранение и тд. А потом описать отдельный узел, который "ведет" процесс управления другими узлами, при этом он только активизирует сигналы управления. И как правильно сказал Flip-fl0p, удобнее это делать в виде автомата. И видимо личное сообщение к Вам (ТС) не пришло...
  22. Наверняка ID. А далее ищите BSDL файл на этот микроконтроллер и смотрите там JTAG-регистры, доступные по чтению. Вот чтобы почесть "нутро" микроконтроллера нужно смотреть описание этого микроконтроллера - что доступно при "защищен фьюзами" ...
  23. Т.е. Вы по плате хотите пропустить 200Мгц? А в каком стандарте? ТТЛ? В любом случае, Вы под свою же синхрочастоту всегда успеете обработать приходящие данные. На 8 бит данных придет 1 строб. А зачем там DDR?
  24. Тогда задаем вопрос: а каков CLK?
  25. 200 Мгц по проводам на плате в формате ТТЛ?