VHDL中数据类型转换与位数组操作的成本有多高?

Ben*_*ler 5 fpga vhdl

在VHDL中,如果你想增加一个表示实数的std_logic_vector,我会遇到一些选项.

1)使用类型转换数据类型转换函数将std_logic向量更改为有符号或无符号值,然后将其转换为整数,向该整数添加1,并将其转换回std_logic_vector,方式与之前相反.尝试这样做时,下面的图表很方便.

矢量转换图表的编号

2)检查LSB的值.如果是'0',则将其设为'1'.如果它是'1',则执行"向左移位"并将'0'连接到LSB.例如:(对于16位向量)向量(15 downto 1)&'0';

在FPGA中,与微处理器相比,物理硬件资源似乎是限制因素,而不是实际处理时间.你总是有可能用完物理门.

所以我真正的问题是:这些实现中的哪一个在FPGA中"更昂贵",为什么?编译器是否足够强大以实现相同的物理表示?

Bri*_*ond 15

没有任何类型的转换成本.

不同的类型纯粹是关于尽可能清楚地表达设计 - 不仅对其他读者(或自己,明年:-)而且对编译器,让它尽可能多地捕获错误(例如,这个整数值是超出范围)

类型转换是告诉编译器"是的,我打算这样做"的方式.

使用最能表达设计意图的类型.

如果你使用太多的类型转换,那通常意味着某些东西被声明为错误的类型; 停下来思考一下设计,它通常会很好地简化.如果你想增加一个std_logic_vector,它应该是一个无符号的,甚至是自然的.

然后在必要时转换:通常在顶级端口或其他人的IP.

转换可能会极大地减慢模拟速度,但这是另一回事.

至于你的选择2:低级详细描述不仅难以理解,a <= a + 1;而且合成工具不易翻译,更容易包含错误.