我是VHDL的新手,我正在尝试找到一种方法来取一个n位(存储为通用)有符号数并将其截断为需要最小位数的形式。
例如,如果我将5作为其8位有符号数(存储在长度为8的std_logic_vector中)00000101,我想创建一个函数将0101作为std_logic_vector返回。关于如何实现这一目标的任何想法?
答案 0 :(得分:0)
由于您已指定使用签名值,因此您可能希望使用signed
类型(来自numeric_std库)而不是更通用的std_logic_vector
。
如果您的编号是编译时常量,则可以从最左边的位(例如,在for循环中)开始编写一个函数,该函数计算它看到的相同位数,然后返回signed_input(8-result downto 0)
。这个问题是,作为编译时常量,删除冗余位没有多大优势。整个载体将在合成中进行优化。
您可能希望包含特殊情况,使结果至少为1位(0技术上不需要任何位代表)或2位(-1只需要符号位以区别于0)如何使用signed
类型值。
如果您的数字是真实信号(操作期间值会发生变化),您仍然可以计算左侧相同位的数量,但矢量的变量位置切片将是iffy。您是否尝试将多个数字中的大部分打包成固定的位宽?这样做将合成每个比特的多路复用器以及用于计算每个数字的冗余比特数的LUT。