0

複数配列の操作について質問があります。以下のコードは、固定数の配列に対してうまく機能します

wire [size-1:0] data [0:3];
wire [size-1:0] result;

assign result = data[0]&data[1]&data[2]&data[3];

しかし、次のようなパラメータ化された数値配列に対してどのように対処できますか

wire [size-1:0] data [0:num-1];
wire [size-1:0] result;

assign result = ????

アイデアや提案があれば、簡単な回答をいただければ幸いです。

4

2 に答える 2

0
wire [size-1:0] data[0:num-1];
wire [size-1:0] data_tmp[0:num-1];
wire [size-1:0] result;

generate
    genvar i;
    for (i=0; i < num; i=i+1) begin
        if (i == 0)
            assign data_tmp[i] = data[i];
        else if (i == num-1)
            assign result = data_tmp[i-1] & data[i];
        else
            assign data_tmp[i] = data_tmp[i-1] & data[i];
    end
endgenerate
于 2013-01-19T05:02:20.137 に答える
0

私が考えることができる最高のものは、次のようなものです。

always @* begin
  result = 0;
  for (i=0; i<num; i=i+1) begin
    result = result & data[i];
  end    
end

ただし、これには 2 つの潜在的な問題があります。

  1. Verilog のセンシティビティ リストで配列を使用することは、技術的には合法ではありません。ほとんどのシミュレーター/合成ツールは、その感度リストで期待どおりに機能することを読みましたが、一部のツールはそうでない場合があります。

  2. 配列のサイズによっては、合成できる場合とできない場合があります。通常、大規模な配列は RAM として実装され、通常、クロック サイクルごとに配列の値を 1 つしか読み取ることができないため、andそれらをすべてまとめて自明に読み取ることはできません。

于 2013-01-18T07:41:37.027 に答える