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

标签 vhdl fpga

在 VHDL 中,如果您想将表示实数的 std_logic_vector 递增 1,我遇到了几个选项。

1) 使用类型转换数据类型转换函数将 std_logic 向量更改为有符号或无符号值,然后将其转换为整数,对该整数加一,然后以与以前相反的方式将其转换回 std_logic_vector。尝试执行此操作时,下面的图表非常方便。

Number to Vector Conversion Chart

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

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

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

最佳答案

没有任何类型转换成本。

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

类型转换是您告诉编译器“是的,我打算这样做”的方式。

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

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

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

转换可能会无限地减慢模拟速度,但那是另一回事。

至于您的选项 2:低级详细描述不仅比 a <= a + 1; 更难理解但它们对于合成工具来说并不容易翻译,而且更有可能包含错误。

关于vhdl - 在 VHDL 中,数据类型转换与位数组操作的成本有多高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403835/

相关文章:

simulation - VHDL - 我应该如何在测试平台中创建时钟?

VHDL - 队列中的变量与信号行为

simulation - 如何使用后置布局和/或后综合仿真跟踪 FPGA/ASIC 开发中的错误?

c++ - 通过 TCP/IP 以太网发送数值数据

VHDL:Vivado 2016.4:通用映射中需要的常量表达式

casting - VHDL 转换错误

vhdl - vhdl中进程语句的顺序执行

vhdl - VHDL 中的捆绑语句

linux - 与运行 LINUX 的 FPGA 的 SPI 接口(interface)

verilog - FPGA 语言的编译器是否执行优化?