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

sazh

Свой
  • Постов

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

  • Посещение

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

    2

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


  1. 20 лет прошло. И все равно - кошечка. By Mike Stein, Paradigm Works module toggle_hard_sync ( input in_flag, in_clk, sys_clk, output sys_flag ); reg toggle = 1'b0; reg [2:0] hard_sync_rg = 3'd0; always @(posedge in_clk) begin if (in_flag) toggle <= ~toggle; end always @(posedge sys_clk) begin hard_sync_rg <= {hard_sync_rg[1:0], toggle}; end assign sys_flag = hard_sync_rg[2] ^ hard_sync_rg[1]; endmodule
  2. Вы привели графический вариант, который отличается от вашего проекта rg_ch. А функционально Ваш проект - это д триггер, реализованный на д триггере со входом разрешения и xor в цепи обратной связи. Синтезатор его должен в д триггер превратить. И где тут борьба с метастабильностью. Добавьте еще триггер, будет как в старые добрые времена. Кстати хочу по VHDL проехаться. --signal tg_s : std_logic := '0'; --signal one_tic : std_logic := '0'; Давать указание симулятору - выход логики в ноль установить ? Он конечно проигнорировал, но ему по барабану, сигнал и сигнал. У меня получилось так. Разницы не увидел. module rg_ch ( input clk, change_a, change_b, output [1:0] rg_oa, rg_ob ); reg tg_sa = 1'b0; reg tg_sb = 1'b1; reg [1:0] rg_dff = 2'b10; wire one_tica = change_a ^ tg_sa, one_ticb = change_b ^ tg_sb; always @(posedge clk) begin if(one_tica) tg_sa <= change_a; if(one_ticb) tg_sb <= change_b; rg_dff <= {change_b, change_a}; end assign rg_oa = {tg_sb, tg_sa}, rg_ob = rg_dff; endmodule
  3. Хотелось бы увидеть картинку для моп структуры. Ибо ттл структура для плис не актуальна. Помниться на 133 серии 5 вольтовой ттл логике на висячем входе был уровень 1.3 В и уверенно воспринимался как лог.1
  4. Может статься, эти примитивы только для схематика предназначены. Попробуйте примитив BUFG BUFG_inst ( .O(O), // Clock buffer output .I(I) // Clock buffer input втянуть. Такие примитивы должны подхватываться без всяких путей. Я могу понять про 5титысячник. Я не могу понять про Foundation. Найдите какой нибудь старенький айс, поддерживающий это семейство. С синтезатором, который в должной мере поддерживает язык. По мне, так надо оставить свои наработки в схематике только для поддержки проектов, которые были сделаны в схематике, дорабатывать только в схематике. А если головным модулем проекта является текст, так и все модули пишите в тексте без опоры на примитивы. Иначе о какой переносимости ваших проектов Вы говорите. module ct_div #( parameter xtal_clk = 33_333_333, baud = 115_200 ) ( input clk, input s_rst_n, output enable_wr ); ///////////////// $clog2 function integer clogb2 (input [31:0] value); begin value = value - 1; for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) value = value >> 1; end endfunction ///////////////// localparam clk_div = xtal_clk / baud, ct_width = clogb2(clk_div); //ct_width = $clog2(clk_div) reg [ct_width-1:0] ct = {ct_width{1'b0}}; reg enable_wr_rg = 1'b0; always @(posedge clk) begin if (s_rst_n == 1'b0) ct <= {ct_width{1'b0}}; else if (ct == clk_div-1) ct <= {ct_width{1'b0}}; else ct <= ct + 1'b1; enable_wr_rg <= (ct == clk_div-1); end assign enable_wr = enable_wr_rg; endmodule
  5. module ct_cb8ce // verilog 2001 ( input c, input clr, input ce, output out_c ); reg [7:0] counter = 8'd0; always @(posedge c or posedge clr) begin if (clr) counter <= 8'd0; else if (ce) counter <= counter + 1'b1; end assign out_c = counter [7]; endmodule
  6. Никто не собирался уделывать VHDL. Если в описании Вы видите, как это описание ложиться на базовые примитивы того или иного семейства, зачем Вам VHDL, если все можно изящно описать, используя всего два типа reg wire Печалька в другом. Искусству схемотехники уже никто не учит.
  7. Правильно мыслите. Какие пологие фронты, если в линии +-5В, а отсекаются при приеме на уровне +-3В. Покритикую проект. Если позволите. Проект не полностью параметризирован (разрядность счетчиков к параметрам не привязана). Загружать счетчики надо (значением - 1), ибо счетчик крутится от 0 до (2**n) -1 и если вдруг загрузите 2**n, загрузите нули. По мне, так в автомате не хватает еще одного состояния. начинаете со старта. Заканчивать надо на стопе (если там будет 0 - это ошибка кадрирования). Мне понравилась реализация 30 тилетней давности в ДВК3. По перепаду из 1 в 0 добегаем до середины стартового бита, и если добежали, от этой середины просто нарезаем биты , в том числе стоп. За 10, 11 бит просто невозможно уход от середины бита в следующий бит. Простой тестовый пример. Если интересно. mail_out_2021.zip
  8. Плясать надо не от библиотек, а от семейства 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
  9. `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
  10. Я это иначе прочитал. Это о случае, когда если TDO использует VCCPD = 2,5, а внешнее устройство (usb бластер) запитан от 3.3В,может быть ток утечки в входном буфере TDI интерфейсного устройства. Рекомендуют внеший резистор. Здесь не рассматривается случай подтяжки пинов tms, tdi jtag плис к 3.3В, если VCCPD = 2,5.
  11. Интересно, где по Вашему отец Иосиф свои знания получал?
  12. А к какому Госту, по Вашему мнению, можно привязать проект на ПЛИС, До сих пор все отбиваются от понятия программный продукт. К сожалению, нет.
  13. (DDR контроллер памяти, самые медленные гигабитные передатчики, коммерческое исполнение). (фирма продает дефектоскопы для АЭС). А отвечать за такой выбор кто будет.
  14. А зачем вам ловить переполнения. Расширяйте разрядную сетку. 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
  15. Если нет расширения разрядной сетки. Возьмем базовый примитив сумматора. Как известно у него разрядность суммы такая же как и разрядность слагаемых. Но у него при этом есть возможность активизировать выход или переноса, или переполнения. В зависимости от того как Вы воспринимаете входные коды. А если нет расширения разрядной сетки, значит Вы не получите правильный результат во всем диапазоне входных кодов.
  16. Железо про числа ничего не знает. Оно работает с кодами, которые в соответствии с задчей можно представить как числа со знаком или без знака. Если Вы сами заботитесь о расширении разрядной сетки должным образом, то полученный код будет соответствовать Вашим представлением. Можно конечно воспользоваться указаниями синтезатору. Но нужно четко при этом понимать, что должно получиться.
  17. Последняя версия Квартуса, которая поддерживает семейство FLEX10KE - 9.0 SP2. Циклон 2 тоже, может пригодиться. Языки описания аппаратуры тоже прилично поддерживает. Моделсим тоже прилагается.
  18. По схеме у Вас RS триггер нарисован. И используется явно в противоречии с таблицей истинности. Примитив dff еще никто не отменял. Поставьте 9 Квартус. Его будет достаточно под такое творчество. Если нужно реализовать на задержках из строба короткий импульс, окунуться так сказать в прошлое, такое вот предлагали. lcell_xor.v
  19. Ни разу не просматривается польза от постановки задач такого рода. (Как по деньгам, так и по конструированию) Переход на все новое надо осуществлять за счет заказчика. Поэтому купите EZ KIT по новее с пакетом разработки под любимую фирму и все.
  20. Сейчас увидел строку 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;
  21. Мне кажется, Вы перемудрили с селектором адреса, в особенности в цикле записи. Если я правильно понял, активные уровни 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'; зачем он в цикле чтения
  22. Цикл чтения формирует сам процессор, и временные расстановки участвующих в них сигналах должны гарантировать снятие данных. Можно замутить сигнал WR в T<=RD OR CS; Разводка кристалла не должна влиять, ибо по идее процессор считывает данные и только потом снимает CS, RD
  23. При продаже 100 приборов в год, стоимостью 68 000 евро каждый каждая буква на счету.
  24. TCK к gnd тянут. Даже если есть внутри, внешние видимо не мешают. Ибо в цепочке могут быть и другие кристаллы без внутренней подтяжки. http://www.altera.com/literature/hb/max2/max2_mii51013.pdf
×
×
  • Создать...