AR# 11207

|

4.1i CORE Generator - C_REG_FD_V3_0.v コアで効率の悪いコーディング スタイルが使用されているため、Verilog ビヘイビア シミュレーションの実行に時間がかかる

説明

キーワード : CORE Generator, COREGen, C_REG_FD_V3_0.v, ModelSim , FDReg, simulation, long, time, シミュレーション

重要度 : 標準

概要 :
CORE Generator コアの Verilog ビヘイビア シミュレーションの実行に、長時間かかることがあります。 これは、Verilog で使用される C_REG_FD_V3_0.v モデルのコーディング スタイルが適正でないためです。 C_REG_FD_V3_0.v コアは、乗算器やブロック メモリなどほかのコアによっても使用されます。

現在の C_REG_FD_V3_0.v モデルでは、クロック エッジごとに大きい for-loop 文といくつかの CALL 機能が実行されます。 これにより、実行時間が長くなります。

ソリューション

この問題は、次の 4.1i IP アップデートに含まれる Base Blox V6.0 で修正されます。

シミュレーションの実行時間を短縮するには、次の例 1 のコードを例 2 のコードに置き換えて C_REG_FD_V3_0.v (/Xilinx/verilog/src/XilinxCoreLib directory) を変更します。例 2 の場合、例 1 のような loop 文はありません。

例 1 :

always@(posedge intCLK or intCE or intACLR or
intASET or
intAINIT)
begin
datatmp = data;

for(i = 0; i < C_WIDTH; i = i + 1)
begin
if(intACLR === 1'b1)
datatmp[i] = 1'b0;
else if(intACLR === 1'b0 && intASET === 1'b1)
datatmp[i] = 1'b1;
else if(intAINIT === 1'b1)
datatmp[i] = AIV[i];
else if(intACLR === 1'bx && intASET !== 1'b0)
datatmp[i] = 1'bx;
else if(intACLR != lastintACLR &&
lastintASET != intASET &&
lastintACLR === 1'b1 &&
lastintASET === 1'b1 &&
intACLR === 1'b0 &&
intASET === 1'b0)
datatmp[i] = 1'bx;
else
begin
...


例 2 :

always@(posedge intCLK or intCE or intACLR or
intASET or
intAINIT)
begin
datatmp = data;
if(intACLR === 1'b1)
datatmp = 'b0; // 0-extends to all bits
else if(intACLR === 1'b0 && intASET === 1'b1)
datatmp = {C_WIDTH{1'b1}}; // explicit sizing
else if(intAINIT === 1'b1)
datatmp = AIV;
else if(intACLR === 1'bx && intASET !== 1'b0)
datatmp = 'bx; // X-extends to all bits
else if(intACLR != lastintACLR &&
lastintASET != intASET &&
lastintACLR === 1'b1 &&
lastintASET === 1'b1 &&
intACLR === 1'b0 &&
intASET === 1'b0)
datatmp = 'bx; // X-extends to all bits
else
begin
...
AR# 11207
日付 09/11/2003
ステータス アーカイブ
種類 一般
People Also Viewed