2012-04-29 50 views
10

私はVHDLでちょっとしたことを開発しており、かなり新しくなっています。私は、より大きなstd_logic_vectorをより小さなものにスライスする方法を考え出すのに問題があります。例えばVHDLでstd_logic_vectorを "スライス"する方法は?

I 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); 

を基本的に、私が欲しいのはfirstpartに0を介してsecondpart及びビット7 8を介してビット15を割り当てることです。私は、「スライス」個々のビット

答えて

18

を割り当てずに、このようなベクトルあなたは、それらを直接割り当てることができますどのように正確:

firstpart <= allparts(15 downto 8); 
secondpart <= allparts(7 downto 0); 

...またはFIRSTPARTとSECONDPARTはの一部を参照するには、単に別の方法がある場合allpartsシグナルを受信する場合は、エイリアスを使用することができます。

alias firstpart is allparts(15 downto 8); 
alias secondpart is allparts(7 downto 0); 
+0

Ah。私はVHDLが非常に一貫した言語であることがますます増えてきています。また、エイリアスの解ははるかに洗練されているので、私はそれを使用します – Earlz

+0

たとえば 'std_logic_vector([some expression])(15 downto 8)'は動作しません。この構文が適用可能な場合の詳細については、[この回答](http://stackoverflow.com/a/28452053/603003)を参照してください。 – ComFreek

関連する問題