原题链接如下:
https://hdlbits.01xz.net/wiki/Exams/ece241_2014_q5a
和vx:"ic打工魂"一起学ic大意是,输入信号x先发送低位,然后z串行输出x的补码。看到这题,第一反应,是补码的概念。正数的补码是本身,负数的补码是所有位取反再加1,也就是包含最高位符号位也要取反。题意应该是忽略符号位,也就是默认为负数,毕竟正数不需要电路实现补码,就是本身。所以,状态机的作用就是取反加1。更详尽的补码参见:http://www.ruanyifeng.com/blog/2009/08/twos_complement.html
于是,按照取反加1,我们可以作出状态转移图,由于输入可以很长,这里只做一部分,但规律很明显了
如果一直输入0,即idle状态,输出总是0;当有1输入时,如10,也就是先0后1,其补码为10,也就是该为输入1输出也1,且具有普遍规律。有1输入后,后面的输入都取反,如110,其补码为010,010取反为101,加1后为110,也就是该位输入与输出相反。这也是FSM如下图所示的原因: