module parameterized_adder #(parameter DATA_WIDTH = 8) ( input [DATA_WIDTH-1:0] a, input [DATA_WIDTH-1:0] b, output [DATA_WIDTH-1:0] sum );

// 该模块为参数化加法器,可根据 DATA_WIDTH 参数决定输入输出位宽 // a: 输入参数,DATA_WIDTH 位宽 // b: 输入参数,DATA_WIDTH 位宽 // sum: 输出参数,DATA_WIDTH 位宽

reg [DATA_WIDTH-1:0] seed = 123; // 设定随机种子为 123
reg [DATA_WIDTH-1:0] rand_a; // 用于存储随机数1
reg [DATA_WIDTH-1:0] rand_b; // 用于存储随机数2

// 使用 random 系统函数生成随机数 rand_a 和 rand_b
// 该函数每次调用会生成一个 32 位的随机数
// seed 参数为随机种子,每次调用后种子值会自动更新
initial begin
    repeat (10) begin // 重复 10 次生成随机数
        $random(seed); // 生成随机数前需设置种子
        rand_a = $random % (2**DATA_WIDTH); // 取余数,保证随机数在 DATA_WIDTH 位宽范围内
        $random(seed); // 更新种子
        rand_b = $random % (2**DATA_WIDTH);
        $display("rand_a: %d, rand_b: %d", rand_a, rand_b); // 输出随机数
    end
end

// 生成的随机数进行加法运算,输出到 sum 中
always @(*) begin
    sum = rand_a + rand_b;
end

endmodule

// 该模块使用了 Verilog 的 initial 块和 always 块 // initial 块只会在仿真开始时执行一次 // always 块则是组合逻辑,输入信号变化时会自动更新 // $display 系统函数用于在仿真过程中输出信息 // 在仿真工具中,可以通过查看波形图来验证代码的正确性


原文地址: https://www.cveoy.top/t/topic/API 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录