如果我声明一个信号整数范围 0 到 6 ,与声明一个 std_logic_vector (2 downto 0) 来做完全相同的工作是好还是坏。我指的是设计成本,以便我可以决定是否使用具有小范围的整数或带有向量的 one-hot 表示。
说白了会为0到n的整数范围保留多少空间?
最佳答案
如果综合工具以最少的资源实现范围为 0 到 N 的整数,则其大小为:
integer range 0 to N : std_logic_vector(ceil(log2(N + 1)) - 1 downto 0)
因此,您的 integer range 0 到 6
将具有 std_logic_vector(2 downto 0)
的大小。
但是 VHDL 语言本身并没有针对不同数据结构的成本函数,因为成本取决于实现。模拟工具以一种方式实现数据结构,而综合工具则以不同的方式实现。
例如,FPGA 的大小取决于综合工具的性能。综合工具必须进行实现,其中最终设计的操作等同于 VHDL 规范,但综合工具可以自由地进行比要求更大的实现,例如通过实现所有整数 32 位 std_logic_vector。
了解实际大小的最佳方法是使用综合工具进行小型实验,由此您还将了解很多关于综合工具和 VHDL 实现的知识。
关于integer - VHDL 使用什么更有效 : an integer with range or a std_logic_vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884239/