2012-06-26 33 views
0

我有一个生成语句的问题。我生成一个流水线结构,基本的问题是,我需要除了索引另一个柜台或变量:生成语句中的信号或变量计数器

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的一代,我创建一个用作计数器的信号(端口映射(signVector(signCounter),lx(((i + 2)* dataSize-1)downto),但不能用作索引,错误是:“Actual(索引名称)正式的“亚健康”是不是一个静态的信号名字。”

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

+0

你'signCounter'分配'total'倍!记住所有'<='是**并发**分配。 – wap26

回答

1

对不起,您不能使用这样的中频信号。

您可以编写一个函数,该函数的值为i将返回正确的signCounter,而不需要存储中间值。

你可以尝试在生成中声明信号,但我不认为它会得到你想要的(信号将以total的数量结束,而不是在循环)。生成是为了“制造静态的东西”,而不是动态的东西。

+0

对。在你的代码中,'signCounter'被分配了'total'次!加上初始化。 @Martin:是的,生成声明部分的信号是可以的。 – wap26

+0

@ wap26:是的,我不清楚 - 这是允许的,但它是否提供该功能... –

+0

太棒了,我没有考虑使用函数,非常感谢你,非常有用的答案。问候 – nexobios

0

尽管我的代码出现了一些问题,但似乎signCounter可从i得出。如果运行从0到总数为1的生成,涉及的数学会更容易遵循。

或者尝试分成两个生成报表,即gerates你cordicSteps第一from 0 to stepNumber - 1,第二from 0 to total - 1产生的registerModules

另外,你可以结合stepGen1stepGen2

+0

对不起,乱码仍然以VHDL开始;谢谢我会试着从我这里得到它,我没有尝试,因为它应该是对架构的一个小修补,并且不想对代码做大的修改,而且我会随着总线大小。问候 – nexobios