0

generateステートメントに問題があります。パイプラインアーキテクチャを生成しています。基本的な問題は、forインデックス以外に別のカウンターまたは変数が必要なことです。

architecture behav of blockPipelineCordic is
    constant total: integer := stepNumber + stepNumber/pipeStep;
    signal signVector: std_logic_vector( (stepNumber - 1) downto 0);
    signal lx: std_logic_vector( ((total + 1)*dataSize - 1) downto 0);
    signal ly: std_logic_vector( ((total + 1)*dataSize - 1) downto 0);
    signal signCounter: integer := stepNumber - 1;
begin

stepGen:
for i in (total - 1) downto 0 generate
    begin

      signCounter <= signCounter - 1 when ((total - i) mod (pipeStep + 1) /= 0) else signCounter;

        stepGen0: if( (total - i) mod (pipeStep + 1) /= 0 ) generate
        begin U1: entity work.cordicStep(behav)
        generic map ((totalStepNumber - 1) - i,dataSize)
        port map(signVector(signCounter),lx(((i+2)*dataSize-1) downto (i+1)*dataSize),ly(((i+2)*dataSize-1) downto (i+1)*dataSize),lx(((i+1)*dataSize-1) downto i*dataSize),ly(((i+1)*dataSize-1) downto i*dataSize));
        end generate stepGen0;

        stepGen1: if( (total - i) mod (pipeStep + 1) = 0 ) generate
        begin U2: entity work.registerModule(behav)
        generic map (dataSize)
        port map(clk,lx(((i+2)*dataSize-1) downto (i+1)*dataSize),lx(((i+1)*dataSize-1) downto i*dataSize));
        end generate stepGen1;

        stepGen2: if( (total - i) mod (pipeStep + 1) = 0 ) generate
        begin U3: entity work.registerModule(behav)
        generic map (dataSize)
        port map(clk,ly(((i+2)*dataSize-1) downto (i+1)*dataSize),ly(((i+1)*dataSize-1) downto i*dataSize));
        end generate stepGen2;

end generate stepGen;
. . .

最初の構造の生成では、signVectorに別のインデックスを使用する必要があり、カウンターとして使用するシグナルを作成しました(port map(signVector(signCounter)、lx(((i + 2)* dataSize-1)downto )ただし、インデックスとして使用することはできません。エラーは次のとおりです。「正式な「sub」の実際の(インデックス名)は静的なシグナル名ではありません。」

助けていただければ幸いです:)、ty

4

2 に答える 2

1

申し訳ありませんが、そのような中間信号は使用できません。

中間値を保存する必要なく、指定された値iが正しい を返す関数を作成できます。signCounter

生成内で信号を宣言することもできますが、必要なものが得られるとは思いません (信号はtotal、ループ中にいくつかの異なる値を持つのではなく、多数のドライバーで終了します)。動的なものではなく、「静的なものを作る」ために。

于 2012-06-26T09:10:19.733 に答える
0

私はあなたのコードに続いていくつかの問題を抱えていますが、それsignCounterはから導き出せるようですi。生成を0からtotal-1まで実行すると、関連する計算が簡単になります。

または、2つの生成ステートメントに分割してみてくださいfrom 0 to stepNumber - 1。1つ目はを生成cordicStepsし、2つ目はfrom 0 to total - 1を生成しますregisterModules

stepGen1さらに、あなたは組み合わせることができますstepGen2

于 2012-06-26T18:46:49.397 に答える