Jump to content

    

sazh

Свой
  • Content Count

    2395
  • Joined

  • Last visited

Everything posted by sazh


  1. Правильно мыслите. Какие пологие фронты, если в линии +-5В, а отсекаются при приеме на уровне +-3В. Покритикую проект. Если позволите. Проект не полностью параметризирован (разрядность счетчиков к параметрам не привязана). Загружать счетчики надо (значением - 1), ибо счетчик крутится от 0 до (2**n) -1 и если вдруг загрузите 2**n, загрузите нули. По мне, так в автомате не хватает еще одного состояния. начинаете со старта. Заканчивать надо на стопе (если там будет 0 - это ошибка кадрирования). Мне понравилась реализация 30 тилетней давности в ДВК3. По перепаду из 1 в 0 добегаем до середины стартового бита, и если добежали, от этой середины просто нарезаем биты , в том числе стоп. За 10, 11 бит просто невозможно уход от середины бита в следующий бит. Простой тестовый пример. Если интересно. mail_out_2021.zip
  2. Плясать надо не от библиотек, а от семейства fpga и его структуры. Как раньше говорили, если семейство на базе статической ячейки памяти, регистровая структура инициализируется нулями, что можно использовать для начальной установки регистров в любое значение. Другое дело что (например Альтера) ранние синтезаторы не позволяли это делать простым присваиванием в теле модуля. А теперь могут. Суть от времени не меняется. `timescale 1 ns / 1 ps `define ena_90 module initial_set #( parameter set = 8'd8 ) ( input clk, input [7:0] data_in, input ena, output [7:0] data_out ); `ifdef ena_90 reg [7:0] dffe_rg = 8'd0; assign data_out = dffe_rg ^ set; always @ (posedge clk) begin if (ena) dffe_rg <= data_in ^ set; end `else reg [7:0] dffe_rg = 8'd8; assign data_out = dffe_rg; always @ (posedge clk) begin if (ena) dffe_rg <= data_in; end `endif endmodule
  3. `timescale 1 ns / 1 ps module ct ( input clk, output [1:0] counter ); reg [1:0] counter_rg = 2'b00; always @(posedge clk) begin counter_rg <= counter_rg + 1'b1; end assign counter = counter_rg; endmodule
  4. Я это иначе прочитал. Это о случае, когда если TDO использует VCCPD = 2,5, а внешнее устройство (usb бластер) запитан от 3.3В,может быть ток утечки в входном буфере TDI интерфейсного устройства. Рекомендуют внеший резистор. Здесь не рассматривается случай подтяжки пинов tms, tdi jtag плис к 3.3В, если VCCPD = 2,5.
  5. Интересно, где по Вашему отец Иосиф свои знания получал?
  6. А к какому Госту, по Вашему мнению, можно привязать проект на ПЛИС, До сих пор все отбиваются от понятия программный продукт. К сожалению, нет.
  7. (DDR контроллер памяти, самые медленные гигабитные передатчики, коммерческое исполнение). (фирма продает дефектоскопы для АЭС). А отвечать за такой выбор кто будет.
  8. А зачем вам ловить переполнения. Расширяйте разрядную сетку. module sum_signed_unsigned ( input add, input [3:0] a, b, // unsigned input [3:0] aa, bb, // signed output [4:0] s, // unsigned output [4:0] ss // signed ); assign s = add ? {1'b0, a} + {1'b0, b} : {1'b0, a} - {1'b0, b}; assign ss = add ? {aa[3], aa} + {bb[3], bb} : {aa[3], aa} - {bb[3], bb}; endmodule
  9. Если нет расширения разрядной сетки. Возьмем базовый примитив сумматора. Как известно у него разрядность суммы такая же как и разрядность слагаемых. Но у него при этом есть возможность активизировать выход или переноса, или переполнения. В зависимости от того как Вы воспринимаете входные коды. А если нет расширения разрядной сетки, значит Вы не получите правильный результат во всем диапазоне входных кодов.
  10. Железо про числа ничего не знает. Оно работает с кодами, которые в соответствии с задчей можно представить как числа со знаком или без знака. Если Вы сами заботитесь о расширении разрядной сетки должным образом, то полученный код будет соответствовать Вашим представлением. Можно конечно воспользоваться указаниями синтезатору. Но нужно четко при этом понимать, что должно получиться.
  11. Последняя версия Квартуса, которая поддерживает семейство FLEX10KE - 9.0 SP2. Циклон 2 тоже, может пригодиться. Языки описания аппаратуры тоже прилично поддерживает. Моделсим тоже прилагается.
  12. По схеме у Вас RS триггер нарисован. И используется явно в противоречии с таблицей истинности. Примитив dff еще никто не отменял. Поставьте 9 Квартус. Его будет достаточно под такое творчество. Если нужно реализовать на задержках из строба короткий импульс, окунуться так сказать в прошлое, такое вот предлагали. lcell_xor.v
  13. Ни разу не просматривается польза от постановки задач такого рода. (Как по деньгам, так и по конструированию) Переход на все новое надо осуществлять за счет заказчика. Поэтому купите EZ KIT по новее с пакетом разработки под любимую фирму и все.
  14. Сейчас увидел строку if (HCLK'event and HCLK = '0') then if WR='0' AND CSTx(0)='0' AND CS2Tx(0)='1' then WR_ENx(0) <='1'; и понял, что ввел Вас в заблуждение. Вы формируете сигнал ena по переходу из 1 в 0 сигнала WRn. Тогда с записью у Вас должно быть все нормально. WR='0' в условии наверно лишнее Что касается чтения, наверно нет надобности его стробировать клоком, чистое мультиплексирование по адресу process (X50) begin if rising_edge(X50) then if (AD(19 DOWNTO 18) = "00") then DATA_OUT<=DATA_OUT0; end if;
  15. Мне кажется, Вы перемудрили с селектором адреса, в особенности в цикле записи. Если я правильно понял, активные уровни WR,RD - 0 Определитесь с длительностью этих циклов (записи, чтения) в системных тактах процессора (по умолчанию там обычно максимальный) По переходу из 0 в 1 сигнала WR Вы привязываетесь к клокам 50, 100, формируя сигналы ENA Мне кажется тут Вы и теряете данные (по записи, а не по чтению) Наверно надо в Вашем случае по переходу из 0 в 1 сигнала WR в интервале CS фиксировать в регистрах значения адреса и данных на шине процессора в цикле записи, а не просто транслировать со входа на выход модуля. Ну а длительность цикла чтения зависит только от Ваших задержек TRANS<='0' WHEN CS='0' AND (RD='0' OR WR='0') ELSE '1'; зачем он в цикле чтения
  16. Цикл чтения формирует сам процессор, и временные расстановки участвующих в них сигналах должны гарантировать снятие данных. Можно замутить сигнал WR в T<=RD OR CS; Разводка кристалла не должна влиять, ибо по идее процессор считывает данные и только потом снимает CS, RD
  17. При продаже 100 приборов в год, стоимостью 68 000 евро каждый каждая буква на счету.
  18. TCK к gnd тянут. Даже если есть внутри, внешние видимо не мешают. Ибо в цепочке могут быть и другие кристаллы без внутренней подтяжки. http://www.altera.com/literature/hb/max2/max2_mii51013.pdf
  19. А зачем. Если я правильно понял, сейчас у Вас проблемы со связями ПЛИС-ПЗУ. Скорее всего, если отключить ПЗУ и загрузить sof по jtag, наверно все сконфигурируется и пины выйдут в пользовательский режим (отключить можно наверно сняв галочку перед синтезом авторестарт по ошибке) Может у Вас резистор по data0 не того номинала) клок ведь плисина вырабатывает.
  20. У Вас выбран режим AS standart (я использую AS FAST). Причем тут pof. Согласно an370.pdf создаете jic файл. Все должно работать. У Вас в проекте по умолчанию стоит опция рестарта по ошибке конфигурации. Status отвечает за ошибку. Почитайте раздел por на 3 циклон.
  21. Посмотрите на ногах status и config_done. Может статься, она у Вас в вечном цикле перезагрузки по ошибке. Если sof нормально config_done в лог.1 переводит, может jic неправильно создан.
  22. Это не халивар. Это Глас вопиющего в пустыне. И на меня не надо обращать внимание. Хотите уважительного отношения к своему языку. Пропагандируйте. Учите. Подсказывайте. Вопрошающему. Еще немного и VHDL из действительно качественного языка описания аппаратуры превратится в птичий язык. (Это когда люди не понимают, что делают, используя тот или иной инструмент)
  23. Посмотрите в RTL что у Вас получилось. Если б выложили файлы с тестбенчем, может кто и проанализировал. Как два взаимосвязанных счетчика реализовать. Ох уж этот VHDL. Пора наверное что то подправить в консерватории.
  24. видимо с помощью мультиплексора when "00111" => f15_1 := 641; when others => null; end case; when others => наверно желателен заданный период, отличный от нуля.