- module top_module (
- input clk,
- input areset,
- input x,
- output z
- );
- //根据https://zhuanlan.zhihu.com/p/435760137的说法,
- //可以分为有进位和无进位两种情况,这样就可以归为两种状态的状态机。
- //然后根据两种状态和当前输入来决定输出
- //代码和转换图见https://www.bilibili.com/read/cv8238913/
- parameter you=0,wu=1;
- reg state,next;
- always@(*) begin
- case(state)
- you:next<=x?wu:you;
- wu:next<=wu;
- endcase
- end
- /*
- always@(*) begin
- case({state,x})
- 2'b00:z=0;//有进位,当前输入0
- 2'b01:z=1;//有进位,当前输入1
- 2'b10:z=1;//无进位,当前输入0
- 2'b11:z=0;//无进位,当前输入1
- endcase
- end
- */
- always@(posedge clk or posedge areset) begin
- if(areset)
- state<=you;
- //有进位的情况会在某一位为1的时候终止,后面都是无进位
- //由于补码为反转各位+1,故最低位就相当于有进位的。所以初始化应该就是有进位
- else
- state<=next;
- end
- assign z=(state?(~x):(x));
- endmodule
The following diagram is a Mealy machine implementation of the 2's complementer. Implement using one-hot encoding.