AR# 14674

|

ABEL - ドット拡張子を使用したセットの割り当てが正しくコンパイルされない

説明

キーワード : compile, .ce, .clk, .oe, .sr, .ar, .aclr, .aset, .ap

ABEL では、セットを宣言して複数の信号を 1 つのグループにまとめることができます。たとえば、次のように宣言すると、4 つのレジスタを 1 つのグループにまとめて、カウンタとして使用できます。

CNT=q3..q0;

この後、ドット拡張子を使用して 1 文でセットの各メンバーに割り当てることができます。たとえば、次の構文は 4 つのレジスタ (q3、q2、q1、q0) のクロック入力に myclk を割り当てます。

CNT.clk=myclk; ''

ただし、次のように when/then や if/then/else などの条件文を使用する場合、ドット拡張子の割り当てがセットの LSB にしか適用されません。

when (myclk == 1) then
{
CNT.clk = 1;
}

ソリューション

セットに変数 (ピンまたはノード) を割り当てると、この変数がセットのメンバーすべてに適用されますが、セットに 1 つの値を割り当てる場合、値に 0 が追加され、セットに適用されます。

例 :

[A1, A2, A3] = 1;

これは、次の文と同じです。

A1=0;
A2=0;
A3=1;

これに上記の .clk の例を適用すると、次のようになります。

when (myclk == 1) then
{
CNT.clk = 1;
}

これは、次の文と同じです。

when (myclk == 1) then
{
q0.clk = 1;
q1.clk = 0;
q2.clk = 0;
q3.clk = 0;
}

条件文からロジックを削除するか、次のように完全な値を割り当てると、正しいロジックを作成できます。

when (myclk == 1) then
{
CNT.clk = ^b1111;
}
AR# 14674
日付 07/28/2009
ステータス アーカイブ
種類 一般
People Also Viewed