如果我声明一个整数范围为0到6的信号,那么对于声明std_logic_vector(2 downto 0)做同样的工作,它会更好还是更坏。我指的是设计成本,这样我就可以决定是否使用带小范围的整数或带向量的单热表示。
明确地说明为0到n的整数范围保留多少空间?
答案 0 :(得分:5)
如果综合工具使用最小资源实现范围为0到N的整数,则其大小为:
integer range 0 to N : std_logic_vector(ceil(log2(N + 1)) - 1 downto 0)
因此,integer range 0 to 6
的大小为std_logic_vector(2 downto 0)
。
但VHDL语言本身并没有针对不同数据结构的成本函数,因为成本取决于实现。仿真工具以一种方式实现数据结构,而综合工具以不同方式实现。
例如,FPGA中的大小取决于综合工具的工作效果。综合工具必须实现一个实现,其中结果设计的操作等同于VHDL规范,但综合工具可以自由地进行大于所需的实现,例如通过实现所有整数32位std_logic_vector。
找出实际大小的最佳方法是使用综合工具进行小型实验,从而学习很多有关综合工具和VHDL实现的知识。
答案 1 :(得分:1)
在模拟中,整数会模拟得更快,因为矢量更复杂(它们可以存储非 - '和 - ' 0'状态,技术上每个位都是一个信号就其本身而言,模拟器必须更加努力地跟踪所有可能独立的转换。在我的模拟器上进行的一些快速测试表明,使用向量而不是整数编码时,一个简单的31位计数器模拟了近2倍的时间!
关于合成,如果您只是算术地使用对象,那么合成器将为限制范围整数生成与可以包含相同范围的向量完全相同的逻辑。如果没有,请退款!如果你将它用作一个状态变量,那么它可能会被转换为单热,这会以触发器的使用为代价来减少解码逻辑,但是这些天的触发器非常便宜。
这里有一些整数/向量编码样式的比较: