2

以下を実行しようとすると、次のエラーが表示されます。

Verilog コードは次のとおりです。

module needle( input referrence,input  penalty,output index[7:0]);
//inout input_itemsets;
//input referrence;

//input penalty;
//output index;
parameter max_cols=8;
//
wire index[7:0];
wire referrence;
wire penalty;
//wire input_itemsets;
genvar i,idx;
generate
for( i = max_cols-4 ; i >= 0 ; i=i-1)
    for( idx = 0 ; idx <= i ; idx=idx+1)
        begin
             assign index[i] = (idx + 1) * max_cols + (i + 1 - idx);
             //assign index = (idx + 1) * max_cols + (i + 1 - idx);
            //input_itemsets[index] <= maximum( input_itemsets[index-1-max_cols]+ referrence[index],
            //input_itemsets[index-1] - penalty,
            //input_itemsets[index-max_cols] - penalty);

        end
   endgenerate

endmodule

私が受け取る警告とエラーは次のとおりです。

WARNING:HDLCompiler:413 - "/home/suriyha/Monajalal/needle_t1/needle.v" Line 39: Result of 4-bit expression is truncated to fit in 1-bit target.
ERROR:HDLCompiler:1401 - "/home/suriyha/Monajalal/needle_t1/needle.v" Line 39: Signal  index[3] in unit needle is connected to following multiple drivers:
Driver 0: output signal of instance Power (PWR_1_o_BUF_9).
Driver 1: output signal of instance Ground (GND_1_o_BUF_8).
Driver 2: output signal of instance Ground (GND_1_o_BUF_6).
Driver 3: output signal of instance Ground (GND_1_o_BUF_4).
Driver 4: output signal of instance Ground (GND_1_o_BUF_11).
Module needle remains a blackbox, due to errors in its contents
WARNING:HDLCompiler:1499 - "/home/suriyha/Monajalal/needle_t1/needle.v" Line 21: Empty module <needle> remains a black box.

ただし、メイン コードは「assign index = (idx + 1) * max_cols + (i + 1 - idx);」です。しかし、この問題を回避するために「インデックス」を配列にすることにしましたが、まだ実行中です。したがって、インデックスが配列であろうと単なる変数であろうと、私はまだこの複数値の問題を抱えています。

また、コードの C バージョンは次のとおりです。

for( idx = 0 ; idx <= i ; idx++){
    index = (idx + 1) * max_cols + (i + 1 - idx);
    input_itemsets[index]= maximum( input_itemsets[index-1-max_cols]+ referrence[index],
    input_itemsets[index-1] - penalty,
     input_itemsets[index-max_cols] - penalty);
 }

また、Verilog バージョンの C カウンター部分にあるようなネストされたループを使用できるかどうか、またはこの場合の「複数のドライバー」の問題を回避する方法を知りたいですか??

ありがとう。

4

3 に答える 3

4

Verilog コードでは、ほとんどのビットは二重に駆動される ( ) または駆動されない( )index定数です。 xzindex[7:0]:zzzxxxx1

解説は以下。外側のループは 4 から 0 であり、これはindex[7:5]are undriven( z) を意味します。内側のループは 0 からiで、次のように展開されます。

assign index[4] = (0 + 1) * max_cols + (4 + 1 - 0);
assign index[4] = (1 + 1) * max_cols + (4 + 1 - 1);
...
assign index[1] = (0 + 1) * max_cols + (1 + 1 - 0);
assign index[1] = (1 + 1) * max_cols + (1 + 1 - 1);
assign index[0] = (0 + 1) * max_cols + (0 + 1 - 0);

index[4:1]ダブルドリブン ( )も同様で、ドライバーは 1 つxしかありません。index[0]

ここでのテストでコンパイルされたコード: EDA Playground

于 2013-08-07T23:27:45.687 に答える
2

output index[7:0]アンパックされたビット配列です。これに相当する C はbool *index[8]. 私はあなたが望むと信じていますoutput [7:0] index

問題:

WARNING:HDLCompiler:413 - "/home/suriyha/Monajalal/needle_t1/needle.v" 行 39: 4 ビット式の結果が 1 ビット ターゲットに収まるように切り詰められています。

を参照していindex[i] = (idx + 1) * max_cols + (i + 1 - idx);ます。左側の式が割り当てられる lsb ob のみindex[i](1 ビット値)。右側の担当者の値は、少なくとも 4 ビットの値である必要があります。

ERROR:HDLCompiler:1401 - "/home/suriyha/Monajalal/needle_t1/needle.v" 39 行目: ユニット ニードルのシグナル インデックス [3] が次の複数のドライバーに接続されています: [...]

このエラーは、generate ステートメントの使用方法が原因です。for ループを解くと、複数のassign index[3] = .... 生成ブロックをブロックに置き換えることをお勧めしalways @(*)ます。出力は、およびoutput regのような中間値である必要があり、パックされた型または何らかの形式(例) である必要があります。iidxintegerregreg [7:0] i, idx;

目立つ他の問題。

input_itemsetsであることを意図しているようですinout。Verilog の inout は C とは大きく異なります。Verilog では、常に 1 つのドライバーが必要です。ドライバーが競合すると、結果は X になります。ドライブ ステージ中のサンプル状態とハンドオフを使用してコピーを作成することをお勧めします。

必要なものは次のようになります。

http://www.edaplayground.com/s/6/48

于 2013-08-08T00:09:21.817 に答える