题解 | #求最小公倍数#
求最小公倍数
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