-2

非常に大きなCMOSカメラ画像コードのごく一部であるVerilogモジュールに問題があります。モジュールはclkを取り込み、入力としてリセットし、hsync、vsync、pixclk、およびピクセルデータを吐き出します。コードは画像を読み取り、それをメモリに保存してから、次のようなifelseステートメントを実行します。

if (row_count<NUM_ROWS-1) && (col_count< NUM_COLS) 
begin 
 vsync <=1; 
 hsync <=1 ;
 pixe_data <= mem[row_count*NUM_ROWS+col_count];
end
else if
 ......

これまで、画像のサイズはNUM_COLSとNUM_ROWSを使用してハードコーディングされていましたが、コードが受信画像の行と列をその場でカウントするようにこれを変更しようとしています。$ fscanf、$ fgets、$ Sscanfなどを使用しようとしましたが、正しい結果が得られません。実際、まったく結果が得られません。シミュレーションがスタックするか、メモリ不足またはfdがnullファイル記述子であると表示されます。また、NUM_ROWSとNUM_COLSを変数に変換すると、定数演算のオペランドが不正であるというエラーが発生します。

この問題に取り組むための別の方法についての洞察を得ることができれば幸いです。

ここに記載されている情報が不十分または不明確な場合は、事前にお詫び申し上げます。

ありがとうSK

4

1 に答える 1

1

制約演算の不正なオペランドは、の次元が原因である可能性がありmemます。寸法は一定であるreg [DATA_SIZE-1:0] mem [ROW_MAX*COL_MAX-1:0];必要があります。たとえば、処理する最大画像サイズを決定する必要があります。最大サイズがそうでない場合は2**N、保護の一部を実装する必要があります。たとえば、エラーを通知して何も処理しない、画像を切り捨てるなどです。

カスタムPLIを作成せずに、不明な画像サイズの行と列を見つける方法がわかりません。$fscanf画像データを読み込むことができ"%u"、フォーマットコンポーネントに使用する可能性があります。画像のファイル自体にその次元に関する情報が含まれている場合は、$fscanfまたはを使用して情報を抽出できます$fread


その他の注意点、元のコードからの抜粋-それ:

pixe_data <= mem[row_count*NUM_ROWS+col_count];

する必要があります:

pixe_data <= mem[row_count*NUM_COLS+col_count];

そうしないと、異なるアドレスまたは範囲外の何かから同じデータにアクセスするリスクがあります。

于 2013-03-02T01:01:47.667 に答える