题解 | #求最小公倍数#

求最小公倍数

https://www.nowcoder.com/practice/ce067d6beee2413c8a26d37ca1a9431f

`timescale 1ns/1ns

module lcm#(

parameter DATA_W = 8)

(

input [DATA_W-1:0] A,

input [DATA_W-1:0] B,

input           vld_in,

input           rst_n,

input           clk,

output  wire    [DATA_W*2-1:0]  lcm_out,

output  wire    [DATA_W-1:0]    mcd_out,

output  reg                 vld_out

);

reg [DATA_W-1:0] C;

reg [DATA_W-1:0] A_reg;

reg [DATA_W-1:0] B_reg;

reg flag;

reg     [DATA_W-1:0]    mcd_out_reg;

reg     [DATA_W*2-1:0]  lcm_out_reg;

always@((487950916)posedge clk or negedge rst_n)begin

    if(!rst_n)begin

        A_reg<=0;

        B_reg<=0;

        flag<=0;

        mcd_out_reg<=0;

    end

    else begin

        if(vld_in==1) begin

            if(A>=B)begin

                flag<=0;

                A_reg<=A;

                B_reg<=B;

            end

            else begin

                A_reg<=B;

                B_reg<=A;

            end

        end

        else if((A_reg-B_reg)>B_reg)begin

            A_reg<=A_reg-B_reg;

            B_reg<=B_reg;

        end

        else if((A_reg-B_reg)<B_reg)begin

            A_reg<=B_reg;

            B_reg<=A_reg-B_reg;

        end

        else if((A_reg-B_reg)==B_reg)begin

            mcd_out_reg<=B_reg;

            flag<=1;

        end

        else

            mcd_out_reg<=mcd_out_reg;

    end

end

assign lcm_out=A*B/mcd_out_reg;

assign mcd_out=mcd_out_reg;

endmodule

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务