SXT 是有符号扩展, EXT是无符号扩展。两个functions属于std_logic_arith package。
SXT的用法如下:
function SXT(ARG: STD_LOGIC_VECTOR; SIZE: INTEGER) return STD_LOGIC_VECTOR;
举个例子:
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
。。。
data_out <= SXT(data_in, data_out'LENGTH);
但是这两个functions不包括在标准library. 这会引起程序兼容性的问题(因供应商和制造工艺的不同)。建议使用ieee中的RESIZEfunction,已达到相同的效果。但要注意符号位的处理。一下使一些例子,仅供参考:
data_out <= std_logic_vector (resize(signed(data_in), data_out'length));
data_out<=std_ulogic_vector (resize(unsigned(data_i n), data_out'length));
data_out<=std_ulogic_vector (resize( signed(data_in), data_out'length));
追问能否再用一个具体数来举一个具体的实例,不胜感激。
追答signal a : sfixed(3 downto -6);
...
s <= resize(a*a, 7, -6); -- resize using left and right bounds
s <= resize(a*a, s); -- resize using bounds of s
参考资料:The Designer's Guide to VHDL - Peter J. Ashenden