4-битный синхронный двойной счетчик вниз jk триггер

В последнее время я пытаюсь изучить цифровой дизайн и Verilog HDL. В настоящее время я работаю над шлепанцами. Я пытался построить 4-битный синхронный двойной обратный отсчет (счетчик вниз) с триггером jk.

Например: 1111 - 1101 - 1011 - 1001 - .. (15 - 13 - 11 - ..) и т.д.

Пока я искал в сети, я всегда находил синхронный обратный счетчик, например 1111 - 1110 - 1101 и т. Д.

Как я могу реализовать 4-битный синхронный двойной обратный отсчет (счетчик вниз) с помощью триггера jk?


person exxe    schedule 02.06.2020    source источник
comment
Это явно домашнее задание. Пожалуйста, отредактируйте вопрос и покажите свои усилия. Подсказка: что вы увидите, если опустите LSB?   -  person Greg    schedule 03.06.2020


Ответы (1)


Первое, что приходит мне на ум, это ФСМ. Что меня раздражает, так это необходимость использования триггеров JK. Verilog может разрешить проектирование на уровне PMOS/NMOS, но я не уверен, что это то, что вы действительно хотите делать.

Описание поведения такого счетчика очень простое, если реализован FSM. Это 3-битный двойной обратный отсчет. Я думаю, вы можете легко изменить его, чтобы он соответствовал вашему 4-битному счетчику.

module countdown (
  input wire clk,
  input wire rst,
  output reg [2:0] out
  );

  initial out = 3'd7;

  always @(posedge clk or posedge rst) begin
    if (rst == 1'b1) begin
      out <= 3'd7;
    end
    else begin
      case (out)
        3'd7   : out <= 3'd5;
        3'd5   : out <= 3'd3;
        3'd3   : out <= 3'd1;
        3'd1   : out <= 3'd7;
        default: out <= 3'd7;
      endcase
    end
  end
endmodule

Конечно, есть и другой способ: с помощью сумматора. Для 4 бит это будет так:

module countdown4b (
  input wire clk,
  input wire rst,
  output reg [3:0] out
  );

  initial out = 4'b1111;

  always @(posedge clk)
    out <= out + 4'b1110;  // -2

endmodule
person mcleod_ideafix    schedule 02.06.2020