【问题标题】:In VHDL, How can I extend 2bit logic vector signal to 4bit logic vector with zeroes added in front?在 VHDL 中,如何将 2 位逻辑矢量信号扩展到前面添加零的 4 位逻辑矢量?
【发布时间】:2013-06-15 15:52:54
【问题描述】:

这里是一个初学者的问题。

我要执行以下操作,

我有一个 std_logic_vector(1 downto 0) 输入。我应该把它扩展到四位;

喜欢 11 => 0011

或 10 => 0010

我试过了,但失败了。

(Data0 is declared as input at entity port list)

Signal Data0_4bit: std_logic_vector(3 downto 0) :=B"0000";

Data0_4bit(1 downto 0)<=Data0(1 downto 0);

提前致谢。

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    VHDL 不允许这样做,因为您试图双重分配 Data0_4bit 的底部两位(一次在声明中,当您分配它们时再次为 Data0)。

    尝试使用连接运算符在单个操作中分配整个向量:

    Signal Data0_4bit: std_logic_vector(3 downto 0) := B"00" & Data0(1 downto 0);
    

    或者,您可以将作业分成两行:

    Signal Data0_4bit: std_logic_vector(3 downto 0);  -- note that Data0_4bit is only declared here, not assigned a value
    Data0_4bit(3 downto 2) <= B"00";                  -- assign top two bits to 0
    Data0_4bit(1 downto 0) <= Data0(1 downto 0);      -- assign bottom two bits to Data0
    

    免责声明:我编写 VHDL 已有 10 年了,我没有办法测试该代码。

    【讨论】:

    • 语法错误已经消失。谢谢德鲁!我还没有做任何模拟来测试它,但希望它会起作用。
    【解决方案2】:

    您可以使用在数字标准包中定义的有符号和无符号类型的 resize 函数:

        use ieee.numeric_std.all;
        (...)
        Data0_4bit <= std_logic_vector( resize(unsigned(Data0), Data0_4bit'length)); --  
    

    【讨论】:

      【解决方案3】:

      更笼统地说:

      signal Data1: std_logic_vector(M downto 0);
      signal Data0: std_logic_vector(N downto 0); -- N < M
      
      data1(data0'range) <= data0;
      data1(data1'high downto data0'length) <= (others => '0');
      

      或者使用移位功能 shift a std_logic_vector of n bit to right or left

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-04
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多