module mod_dp_32bit (
input wire clk,
input wire rst,
input wire start,
input wire [31:0] A,
input wire [31:0] B,
output wire done,
output wire [31:0] result
);
reg [31:0] temp;
always @(posedge clk or posedge rst) begin
if (rst) begin
temp <= 32'b0;
end
else if (start) begin
temp <= A;
end
else if (temp >= B) begin
temp <= temp - B;
end
else begin
temp <= temp;
end
end
assign done = (temp < B);
assign result = temp;
endmodule
`timescale 1ns/1ns
module Mod32_TB;
reg clk;
reg rst;
reg start;
reg [31:0] A;
reg [31:0] B;
wire done;
wire [31:0] result;
// Instantiate mod_dp_32bit module
mod_dp_32bit uut (
.clk(clk),
.rst(rst),
.start(start),
.A(A),
.B(B),
.done(done),
.result(result)
);
// Clock generation
initial begin
clk = 0;
forever #5 clk = ~clk;
end
// Test Case 1: A mod B
initial begin
// Initialize inputs
rst = 0;
A = 100;
B = 7;
start = 0;
// Release reset
#10 rst = 0;
// Test Case 1: A mod B
#5 start = 1;
#100 start = 0;
#100;
// Display result
$display("Test Case 1 Result: A mod B = %d", result);
// End simulation
$stop;
end
endmodule
我正在尝试用 Verilog 编写一个模块,该模块使用 32 位操作数执行模运算。该模块的操作如下:
temp = a;
while(temp >= b)
temp = temp - b;
result = temp;
此代码在计算 95 mod 12 和 5 mod 10 等模运算时,错误地计算了 100 mod 7 和 255 mod 7 等模运算。问题是什么?
这是您的代码的作用:
您说您希望它计算模数,但您没有说出您期望的结果。您可以只使用 Verilog 模运算符:
%