2013-01-03 55 views
1

我想在VHDL一個泛型參數後調整實體端口VHDL - 調整大小口尺寸計算後泛型參數

這裏是我的實體聲明

library ieee; 
use ieee.std_logic_1164.all; 
use IEEE.math_real.all; 
use ieee.numeric_std.all; 

entity counter is 
generic( 
    ticks : natural := 10 
); 
port(
     clk : in std_logic; 
     f_v : in std_logic_vector(natural(FLOOR(LOG2(Real(ticks)))) downto 0); --forced value 
     res : in std_logic; 
      z : out std_logic_vector(natural(FLOOR(LOG2(Real(ticks)))) downto 0) 
); 
end counter; 

更specificly,我想大小f_v和功能巢自然後ž(FLOOR(LOG 2(雷亞爾(蜱))))當實例化一個計數器實體時。

代碼編譯,但是當我嘗試生成一個符號文件,我得到了下面錯誤信息

Error (10017): Can't create symbol/include/instantiation/component file for entity "counter" because port "f_v" has an unsupported type  

Error (10017): Can't create symbol/include/instantiation/component file for entity "counter" because port "z" has an unsupported type 

我使用的Altera的Quartus II 9.1網絡版

我該如何得到這個工作?

+1

除非我錯過了一個subtlty,這看起來像完全有效的VHDL;我一直都在做這種事情(計算使用泛型和函數的端口),並且在我遇到的每個合成器中它都能正常工作。如果你告訴我們什麼工具會給你這個錯誤並提供你得到的所有錯誤(這看起來像一個片段),你可能會得到更好的幫助。 – wjl

+1

通常我使用更易合成的遞歸整數log2。這可能是什麼給你的(未指定的)工具的麻煩。 – wjl

+0

在綜合中對像REAL這樣的東西的支持有點不完善,但有所改進。嘗試(1)更新版本的Quartus,或者(2)將該表達式從端口映射中移出,或許放入調用者中,將「width」作爲通用參數傳遞。 –

回答

2

這適用於我使用Quartus II 12.1(完整版)。您應該知道,就VHDL而言,有效且似乎可綜合的代碼與綜合工具實際可以理解的代碼之間存在差異。這些問題在較老的工具中發生了很多,當您嘗試以非標準方式做某些事情或使用不常用的語言功能時。在你的情況下,該工具最有可能遇到real類型的問題。我會建議之一:

  1. 升級到的Quartus II
  2. 最新版本的傳遞端口的寬度作爲一個通用的,而不是
  3. Using your own log2 function from a library(這是我做的)
相關問題