求最小公倍数

描述

设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。

模块的接口信号图如下:

要求使用Verilog HDL语言实现,并编写testbench验证模块的功能。

输入描述:

clk::时钟信号

rst_n:复位信号,低电平有效

A:输入信号,位宽可以通过DATA_W指定

B:输入信号,位宽可以通过DATA_W指定

vld_in:输入数据有效的指示信号

输出描述:

lcm_out:输出最小公倍数

mcd_out:输出最大公约数

vld_out:输出数据有效的指示信号

参考代码

cpp 复制代码
`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] a_r;
    reg [DATA_W-1:0] b_r;
    wire [DATA_W-1:0] a_w;
    wire [DATA_W-1:0] b_w;
    wire [DATA_W-1:0] res_w;
    reg flag_r;
    reg [DATA_W*2-1:0] lcm_out_r;
    
    assign vld_out = flag_r && (a_r == b_r);
    assign res_w = a_r - b_r;
    assign {a_w, b_w} = res_w > b_r ? {res_w, b_r} : {b_r, res_w};
    assign mcd_out = vld_out ? a_r : 'd0;
    assign lcm_out = lcm_out_r/ mcd_out;
    
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            a_r <= 'd0;
            b_r <= 'd0;
            flag_r <= 'd0;
        end
        else if (vld_in) begin
            {a_r, b_r} <= A > B ? {A, B} : {B, A};
            lcm_out_r <= A * B;
            flag_r <= 'd1;
        end
        else if (vld_out) begin
            flag_r <= 'd0;
        end
        else if (flag_r) begin
            a_r <= a_w;
            b_r <= b_w;
        end
    end
endmodule
相关推荐
FPGA小迷弟8 小时前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1288 小时前
CPU 内部结构是什么?---deepseek
fpga开发
abc light9 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072191 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot1 天前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長1 天前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟1 天前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav1 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家1 天前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡1 天前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范