【发布时间】:2019-07-26 16:08:21
【问题描述】:
VHDL中最接近经典c语言数据类型“uint32_t”的数据类型是什么,例如:
#include "stdint.h"
void main() {
uint32_t data = 0xFFFFFFFF;
}
据我了解,VHDL 的“正”和“自然”类型只是有符号“整数”类型的子集,缺少 c 语言 uint32_t 类型范围的一半。
architecture sim of testbench is
--integer range: -2,147,483,648 to +2,147,483,647
--same as c-language int32_t
signal a0 :integer := 1;
--integer range: 0 to +2,147,483,647
--same as c-language int32_t and'ed with 0x7FFFFFFF
signal a1 :natural := 1;
--integer range: 1 to +2,147,483,647
--same as c-language int32_t and'ed with 0x7FFFFFFF, and 0 thrown away
signal a2 :positive := 1;
--integer range: -1 to -2,147,483,648
--same as c-language int32_t or'ed with 0x80000000, and 0 thrown away
signal a3 :negative := 1;
--unsigned integer range: 0 to 4,294,967,295
--?????? does it exist in VHDL?
signal a4 :uint32_t
begin
end architecture;
【问题讨论】:
-
我强烈建议您停止将 HDL 与普通编程语言进行比较。它只会使您的思想和设计 HDL 的方式完全走上错误的轨道。例如,在 HDL 中,您可以创建一个“尽可能大”的变量。您使用 9、17、32 或 48 位。 (顺便说一下,有多种方法可以制作无符号 32 位整数。我看到第一个答案已经到来。)
-
是的,但是 VHDL 仍然需要与将这些数据大小硬连线到 CPU 中的 c 语言应用程序接口,因此了解这些信息很重要。此外,您的 VHDL 模拟将运行得更快,因为您的大小与指令集支持的 CPU 整数大小相匹配。没有意义仅仅因为 VHDL 不会自动定义 uint32_t 数据类型而浪费一点。
-
唯一模拟速度更快的类型是 Verilog 'int' 类型,为此目的明确定义。所有其他人都不会为你带来任何好处。仅仅因为您使用 32 位并不意味着模拟器会将其映射到整数上。
标签: vhdl