设计一个时序电路,输入2 个无符号数, 位宽可以通过参数DATA_W 确定,输出这两个数的最小公倍数和最大公约数。 模块的接口信号图如下: 要求使用Verilog HDL 语言实现,并编写testbench 验证模块的功能。
区块链毕设网qklbishe.com为您提供问题的解答
设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。
要求使用Verilog HDL语言实现,并编写testbench验证模块的功能。
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*2-1:0] tmp;
reg [DATA_W-1:0] mcd_out_tmp;
reg [DATA_W*2-1:0] lcm_out_tmp;
always@(*)begin
if(vld_out==1)begin
tmp={A[DATA_W-1:0],B[DATA_W-1:0]};
while(tmp[DATA_W*2-1:DATA_W]!=tmp[DATA_W-1:0])begin
if(tmp[2*DATA_W-1:DATA_W]<tmp[DATA_W-1:0])
tmp={tmp[DATA_W-1:0],tmp[2*DATA_W-1:DATA_W]};
tmp[2*DATA_W-1:DATA_W]=tmp[2*DATA_W-1:DATA_W]-tmp[DATA_W-1:0];
end
mcd_out_tmp=tmp[DATA_W-1:0];
lcm_out_tmp=A*B/mcd_out_tmp;
end
else begin
mcd_out_tmp=1’b0;
lcm_out_tmp=1’b0;
end
end
always@(posedge clk or negedge rst_n)begin
if(~rst_n)
vld_out<=0;
else begin
if(vld_in)
vld_out<=1;
else
vld_out<=0;
end
end
assign mcd_out=mcd_out_tmp;
assign lcm_out=lcm_out_tmp;
以上就是关于问题 设计一个时序电路,输入2 个无符号数, 位宽可以通过参数DATA_W 确定,输出这两个数的最小公倍数和最大公约数。 模块的接口信号图如下: 要求使用Verilog HDL 语言实现,并编写testbench 验证模块的功能。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训