【问题标题】:4-bit synchronous double down counter jk flip flop4位同步双递减计数器jk触发器
【发布时间】:2020-06-02 17:10:22
【问题描述】:

最近,我正在尝试学习数字设计和 Verilog HDL。我目前正在研究人字拖。我试图用 jk 触发器构建一个 4 位同步双倒计时(倒数计数器)。

例如:1111 - 1101 - 1011 - 1001 - .. (15 - 13 - 11 - ..) 等

当我在网上研究时,我总是发现像 1111 - 1110 - 1101 等同步递减计数器。

如何用jk触发器实现4位同步双倒计时(递减计数器)?

【问题讨论】:

  • 这显然是一个家庭作业。请编辑问题并展示您的努力。提示:如果省略 LSB,你会看到什么?

标签: verilog flip-flop digital-design


【解决方案1】:

我首先想到的是 FSM。困扰我的是使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多