HDLBits网址:https://hdlbits.01xz.net/wiki/Main_Page
题目
设计一个单输入单输出串行的补码状态机。输入(x)是一系列数字(每个时钟周期一个),从数字的最低有效位开始,而输出(Z)是输入的补码。状态机将接受任意长度的输入数字, 该电路需要异步复位, 转换在释放复位时开始,并在激活复位时停止。
Module Declaration
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
我的设计(Mealy形式)
补码的原理是原码取反然后加1,加了1之后还要考虑相关的进位。本设计主要是找到输入序列低位的补码进位,因为只要找到低位的进位,后面的高位直接取反就好了。假设前4个低位是1000,取反之后就变成了0111,然后再加1,就进一位变成4位1000,可以看出在进位之前输入和输出是一样的,进位之后输出是输入的取反。综上所述,Mealy状态机只需要两个状态即可,分为进位之前的状态和进位之后的状态,状态转移图和代码如下: