vhdl中实变量的定点转换

vhdl中实变量的定点转换,vhdl,fixed-point,Vhdl,Fixed Point,我有以下vhdl代码段: signal s: signed(31 downto 0); s <= to_signed(to_sfixed(1.2,8,-23),32); 信号s:有符号(31到0); ss没有任何地方可以存储任何小数部分,它是一个符号向量,只能表示整数 不过,你就快到了-放下签名,让s和sfixed类型: signal s: sfixed(8 downto -23); s <= to_sfixed(1.2,sfixed'high,sfixed'low); 信号s:

我有以下vhdl代码段:

signal s: signed(31 downto 0);
s <= to_signed(to_sfixed(1.2,8,-23),32);
信号s:有符号(31到0);

s
s
没有任何地方可以存储任何小数部分,它是一个符号向量,只能表示整数

不过,你就快到了-放下签名,让s和sfixed类型:

signal s: sfixed(8 downto -23);
s <= to_sfixed(1.2,sfixed'high,sfixed'low);
信号s:sfixed(8到-23);

s如果您只想将sfixed中的位重新解释为有符号类型,只需使用简单的类型转换:

signal s: signed(31 downto 0);
...
s <= signed(to_sfixed(1.2,8,-23));
信号s:有符号(31到0);
...

但问题是,我使用这个信号作为模块的输入,其中的“s”应该是有符号的格式。由于fixed_pkg在许多平台上都不可合成,所以我只在测试台代码中使用它。fixed_pkg应该可以合成。如果可以的话;如果你不使用它,你必须移动固定值并跟踪二进制点的位置…太棒了,谢谢。。作为旁注,对于反向转换,您可以使用:r这样做,您必须跟踪二进制点。最好(IMHO)始终保持
sfixed
,并让编译器跟踪它。如果目的地真的超出了你的控制,那么你别无选择,只能管理它。我会确保我为
8
-23
创建了一些常量,以备将来需要更改。我同意Martin的观点,在整个设计过程中使用正确的类型来表示数据是最好的方法。另一方面,您通常必须与不以这种方式进行交互的设计进行交互,最好知道如何在不同表示之间进行转换。=)