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

khlenar

Свой
  • Постов

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

  • Посещение

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

    1

khlenar стал победителем дня 23 мая 2023

khlenar имел наиболее популярный контент!

Репутация

5 Обычный

1 Подписчик

Информация о khlenar

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Посетители профиля

8 697 просмотров профиля
  1. Получил микросхемы. Купил у другого. Поставил, все работает. Напряжения 3.3 и 1.8В. как по расчетам. Но зато по разводке вы мне все разъяснили, спасибо большое.
  2. В данном случае PB_state присваивается после условия сам на себя. Поэтому он был не определен. PB_state это output logic. В данном случае надо еще один вход RESET заводить. Сейчас работает нормально. Это вариант антидребезга. `timescale 1ns / 100ps module PushButton_Debouncer ( input wire clk, input wire PB, // "PB" is the glitchy, asynchronous to clk, active low push-button signal // from which we make three outputs, all synchronous to the clock output logic PB_state, // 1 as long as the push-button is active (i.e. pushed down) output logic PB_down, // 1 for one clock cycle when the push-button goes down (i.e. just pushed) output logic PB_up // 1 for one clock cycle when the push-button goes up (i.e. just released) ); initial begin PB_state = 1'b0; end // First use two flip-flops to synchronize the PB signal the "clk" clock domain logic PB_sync_0; always @(posedge clk) PB_sync_0 <= ~PB; // invert PB to make PB_sync_0 active high logic PB_sync_1; always @(posedge clk) PB_sync_1 <= PB_sync_0; // счетчик logic [3:0] PB_cnt; // When the push-button is pushed or released, we increment the counter // The counter has to be maxed out before we decide that the push-button state has changed wire PB_idle = (PB_state == PB_sync_1); wire PB_cnt_max = &PB_cnt; // true when all bits of PB_cnt are 1's always @(posedge clk) if(PB_idle) PB_cnt <= 0; // nothing's going on else begin PB_cnt <= PB_cnt + 1'b1; // something's going on, increment the counter if(PB_cnt_max) PB_state <= ~PB_state; // if the counter is maxed out, PB changed! end assign PB_down = ~PB_idle & PB_cnt_max & ~PB_state; assign PB_up = ~PB_idle & PB_cnt_max & PB_state; endmodule // Тестовый модуль module Test; bit clk; bit PB; bit PB_state; bit PB_down; bit PB_up; shortint i; PushButton_Debouncer Debounce ( .clk(clk), .PB(PB), .PB_state(PB_state), .PB_down(PB_down), .PB_up(PB_up) ); initial begin clk = 1'b0; PB = 1'b1; for(i = 0; i < 8; i++) begin #150 PB = 1'b0; #150 PB = 1'b1; end #150 PB = 1'b0; #2500 PB = 1'b1; #2500 $stop; end always #50 clk = ~clk; endmodule
  3. initial синтезироваться не будет. Это я только пример проверяю. Разбираюсь с алгоритмом. В questa Скажите, почему bit применять не желательно?
  4. PB_state выход. Он как бы не определен в выражении. Когда его убираю из assign PB_idle = (PB_state == PB_sync_1)? 1'b1 : 1'b0; то выражение выполняется. Но в wave он равен 0.
  5. В одном месте присваивание. Сделал с assign, но почему то всегда в нуле.(
  6. Понятно. Спасибо. Взял из примера. assign да, так и делаю. Согласен. В коде можно легко проглядеть, запутаться.
  7. Здравствуйте все. Почему то в выражение wire PB_idle = (PB_state == PB_sync_1); PB_idle всегда находится в неопределенном состоянии. Оператор PB_state всегда 0, а PB_sync_1 меандр. PB_idle по идеи тоже меандр должен быть.
  8. По схеме TPS54332 нормально работает. Конденсатор не греется, холодный. Пульсации в норме. Я не знаю как и что проверять, но для надежности буду керамику применять.
  9. Да, согласен. Там у меня твердотельный стоит. ESR показывает прибор 0 Ом.
×
×
  • Создать...