在VHDL中,如何将2位逻辑矢量信号扩展到前面加零的4位逻辑矢量?

1 vhdl

这里是初学者的问题。

我要执行以下操作,

我有一个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);
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Dre*_*fer 5

VHDL不允许这样做,因为您正试图对Data0_4bit(声明中一次,当您为其分配Data0时)的底部两位进行双重分配。

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

Signal Data0_4bit: std_logic_vector(3 downto 0) := B"00" & Data0(1 downto 0);
Run Code Online (Sandbox Code Playgroud)

或者,您可以将分配分为两行:

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
Run Code Online (Sandbox Code Playgroud)

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