泛型中的VHDL常量

问题描述:

entity blabla is 
generic(
     register_width : integer := 32; 
     --Assuming register_width > 4 
     constant AVAILABLE_FOR_USER : integer := register_width - 4 --allowed in 2008  
     ); 
port (
      clk : in std_logic; 
      rst : in std_logic; 
      reg : out std_logic_vector(AVAILABLE_FOR_USER-1 downto 0) 
     ); 
end blabla; 

如果实例可以覆盖泛型块,那么在泛型块中使用常量的原因是什么?泛型中的VHDL常量

有没有办法根据实例化过程中无法覆盖的泛型创建常量?

或我上面的例子我可以用每次我想使用常量代替计算,但这看起来并不优雅,如果我的条件改变了,它可能会导致很多返工和代码增长的可能错误

我不能回答为什么这样,但可能是语言进化的结果。

但是,处理这种情况的一种方法是命名内部常量,如PRIVATE_...,并告诉用户不要映射这些;如果用户真的想要破坏功能,则有很多选择,所以如果给出合理的指导,用户可以正确实例化,这可能是一个合理的设计标准。

但是如果你想确定私有常量没有被修改,那么assert是一个选项;即使它的重复计算:

architecture syn of blabla is 
begin 
assert register_width - 4 = AVAILABLE_FOR_USER; 
end architecture; 
+0

谢谢。这确实有道理 –

这里与计算一次的解决方案:

library IEEE; 
use IEEE.std_logic_1164.all; 

entity blabla is 
generic(
     register_width : integer := 32 
     ); 
port (
      clk : in std_logic; 
      rst : in std_logic; 
      reg : out std_logic_vector(register_width - 5 downto 0) 
     ); 
end blabla; 

architecture blabla of blabla is 
    constant AVAILABLE_FOR_USER : integer := reg'LEFT+1; 
    signal SOME_INTERNAL_SIGNAL : std_logic_vector(AVAILABLE_FOR_USER-1 downto 0); 

http://www.edaplayground.com/x/4AYF