题解 | #求最小公倍数#

求最小公倍数

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] minusA_reg, minusB_reg;
    wire [DATA_W-1:0] minusA, minusB;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            minusA_reg <= 'd0;
            minusB_reg <= 'd0;
        end
        else begin
            minusA_reg <= vld_in?A:(minusA - minusB);
            minusB_reg <= vld_in?B:minusB;
        end
    end
    assign minusA = (minusA_reg>minusB_reg)?minusA_reg:minusB_reg;
    assign minusB = (minusA_reg>minusB_reg)?minusB_reg:minusA_reg;
    reg [DATA_W*2-1:0] lcm_out_reg;
    reg [DATA_W-1:0] mcd_out_reg;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            vld_out <= 1'b0;
            {lcm_out_reg,mcd_out_reg} <= 'd0;
        end
        else begin
            vld_out <= (minusA_reg==minusB_reg)&(minusA_reg!='d0);
            lcm_out_reg <= ((minusA_reg==minusB_reg)&(minusA_reg!='d0))?(A*B/minusB):'d0;
            mcd_out_reg <= ((minusA_reg==minusB_reg)&(minusA_reg!='d0))?minusB:'d0;
        end
    end
    assign mcd_out = mcd_out_reg;
    assign lcm_out = lcm_out_reg;
endmodule

全部评论
有朝一日我也能写出这样的代码就好了
点赞 回复 分享
发布于 2022-10-20 23:30 上海
毛都对不上
点赞 回复 分享
发布于 2022-11-17 23:51 广东

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
11-29 11:21
门头沟学院 Java
总包48.5w,意想不到的价格
无情咸鱼王的秋招日记之薛定谔的Offer:R
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务