[HDLBits] Exams/ece241 2014 q5b

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.

[HDLBits] Exams/ece241 2014 q5b_第1张图片

你可能感兴趣的:(HDLBits,verilog,fpga开发,fpga)