如何编写一个Verilog函数来确定数组中的所有元素是否相等?

时间:2014-06-18 13:32:30

标签: verilog

假设我有N个寄存器,我想要一个检查所有寄存器内容是否相等的函数。如何在不必拼出每一个元素的情况下编写它?

function equal (input [0:N-1][width-1:0] in);
    equal = (???) ? 1'b1 : 1'b0;
endfunction

1 个答案:

答案 0 :(得分:1)

一个简单的for循环是一种方式:

module tb;

parameter N = 8;
parameter width = 4;

reg [0:N-1][width-1:0] arr;

initial begin
    for (int i=0; i<width; i++) arr[i] = 5;
    $display(equal(arr));
    for (int i=0; i<width; i++) arr[i] = 2*i;
    $display(equal(arr));
end

function equal (input [0:N-1][width-1:0] in);
    for (int i=1; i<width; i++) begin
        if (in[i] !== in[0]) return 0;
    end
    return 1;
endfunction

endmodule

/*

Output:
1
0

*/