题解 | #求最小公倍数#

求最小公倍数

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-11-17 23:51 广东
有朝一日我也能写出这样的代码就好了
点赞 回复 分享
发布于 2022-10-20 23:30 上海

相关推荐

05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
秋招不是要开始了吗,我都打算润了,看大家还在找不敢润了
一条从:因为不是人人都像佬一样有实习像我们这种二本仔秋招没有实习也是白忙活
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务