如何在VHDL中"切片"std_logic_vector?

Ear*_*rlz 13 syntax vhdl

我正在用VHDL开发一个小东西,我对它很新.我无法弄清楚如何将更大的std_logic_vector切割成更小的std_logic_vector.

例如,我有3个信号:

signal allparts: std_logic_vector(15 downto 0);
signal firstpart: std_logic_vector(7 downto 0);
signal secondpart: std_logic_vector(7 downto 0);
Run Code Online (Sandbox Code Playgroud)

基本上,我想要的是将位15到8分配给secondpart位7到0 firstpart.如何在不分配单个位的情况下"切片"这样的矢量

Cha*_*ler 24

你可以直接分配它们:

firstpart <= allparts(15 downto 8);
secondpart <= allparts(7 downto 0);
Run Code Online (Sandbox Code Playgroud)

...或者如果firstpart和secondpart只是引用allparts信号的一部分的替代方法,您可能想要使用别名:

alias firstpart is allparts(15 downto 8);
alias secondpart is allparts(7 downto 0);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,例如“std_logic_vector([some expression])(15 downto 8)”将不起作用。有关适用此语法的更多详细信息,请参阅[此答案](http://stackoverflow.com/a/28452053/603003)。 (2认同)