Digital logic 如何实现在数字逻辑设计中记住先前值的硬件?

Digital logic 如何实现在数字逻辑设计中记住先前值的硬件?,digital-logic,flip-flop,Digital Logic,Flip Flop,我正在尝试设计以下内容: 八进制计算器的数据通路,其中有一个24位的输入寄存器 reg和24位累加器acc 内容 两个寄存器的数字均显示为八位八进制(基数-8)数字。复位时两个都被清除 计算器有 C(清除)、数字0-7以及函数+、-、和x的按钮。按C键一次可清除中的内容 注册 按C a 第二次在没有其他干预键的情况下清除acc。按一个数字将移位 向左调整三位和 将按下的数字放入低位三位 按下一个函数在两个寄存器上执行该函数 并将结果放入acc。从该计算器的数据路径绘制方框图 到目前为止,我得

我正在尝试设计以下内容:

  • 八进制计算器的数据通路,其中有一个24位的输入寄存器 reg和24位累加器acc
  • 内容 两个寄存器的数字均显示为八位八进制(基数-8)数字。复位时两个都被清除
  • 计算器有 C(清除)、数字0-7以及函数+、-、和x的按钮。按C键一次可清除中的内容 注册
  • 按C a 第二次在没有其他干预键的情况下清除acc。按一个数字将移位 向左调整三位和 将按下的数字放入低位三位
  • 按下一个函数在两个寄存器上执行该函数 并将结果放入acc。从该计算器的数据路径绘制方框图
到目前为止,我得到的是:

  • reg_in和acc触发器,具有相同的时钟和复位
  • 一种ALU(执行功能操作),由ALUselect信号驱动,从in_reg和acc接收输入并输出回in_reg
  • 一种移位寄存器,将输入位移位3,并将其放回寄存器中
然而,我一直停留在如何实现“按下C”部分。我可以选择什么样的设计,如果按下C一次,我可以清除reg_in,如果再次按下C,我可以清除acc?我想找到一种比使用计数器更简单的方法


感谢您的帮助

额外的一位寄存器应该可以解决这个问题。让我们称之为
last\u按钮

  • 如果按下C键且上次按钮之前为
    0
    ,则将
    last_按钮设置为
    1
  • 如果按下另一个按钮,则将
    last_按钮设置为
    0
  • 如果按下C键时,
    last_按钮
    0
    ,则清除
    reg_in
  • 如果按下C键时,
    last_按钮
    1
    ,则清除
    acc
  • 如果清除了
    acc
    ,也可以清除
    last_按钮
    0
您可以假设此逻辑是一个具有两种状态的Mealy机器,然后,
last_按钮
是状态信号。C按钮始终切换状态,其他按钮将状态设置为零。机器的输出(清除
reg_in
/
acc
)取决于输入(按钮)和当前状态