0

我对生成语句有疑问。我正在生成一个管道架构,基本问题是除了 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 ) 但它不能用作索引错误是:“正式“子”的实际(索引名称)不是静态信号名称。”

任何帮助将不胜感激:),ty

4

2 回答 2

1

抱歉,你不能使用这样的中间信号。

您可以编写一个函数,给定一个值i将返回正确的signCounter,而无需存储中间值。

您可以尝试在生成中声明信号,但我认为它不会得到您想要的(信号最终会带有total驱动程序的数量,而不是在循环期间有几个不同的值。)生成是用于“制作静态事物”,而不是动态事物。

于 2012-06-26T09:10:19.733 回答
0

虽然我在遵循您的代码时遇到了一些问题,但似乎signCounter可以从i. 如果您从 0 到 total-1 运行生成,所涉及的数学将更容易理解。

或者尝试将其分成两个生成语句,第一个生成from 0 to stepNumber - 1cordicSteps的,第二个from 0 to total - 1生成你的registerModules

此外,您可以结合stepGen1stepGen2

于 2012-06-26T18:46:49.397 回答