在 VHDL 中表达一个带符号 std_logic_vector 的 n 位最少需要多少位数?

What is the minimum number of bits I need to express a n-bit, signed std_logic_vector in VHDL?

我是 VHDL 的新手,我正在尝试找到一种方法来获取 n 位(存储为通用)有符号数并将其截断为需要最少位数的形式。

例如,如果我有 5 作为其 8 位有符号数(存储在长度为 8 的 std_logic_vector 中)00000101,我想将 return 0101 作为函数std_logic_vector。关于如何完成此操作的任何想法?

由于您已指定使用有符号值,因此您可能希望使用 signed 类型(来自 numeric_std 库)而不是更通用的 std_logic_vector .

如果你的数字是一个编译时常量,你可以写一个函数从最左边的位开始(例如在for循环中)计算它看到多少相同的位,然后returns signed_input(8-result downto 0).这样做的问题是,作为编译时间常量,删除冗余位没有太大优势。整个向量将在合成中被优化掉。

您可能希望包括特殊情况以使结果至少为 1 位(从技术上讲 0 不需要任何位来表示)或 2 位(-1 只需要符号位来将其与 0 区分开),具体取决于关于您想如何使用您的 signed 类型值。

如果你的数字是一个真实的信号(值在运行过程中发生变化),你仍然可以从左边开始计算相同位的数量,但是向量的可变位置切片将是不确定的。您是否试图将几个数字中的大部分打包成固定的位宽?这样做将合成每个位的多路复用器以及用于计算每个数字的冗余位数的 LUT。