2012-04-29 9 views
10

VHDL'de küçük bir şey geliştiriyorum ve oldukça yeni. Daha büyük bir std_logic_vector'ı daha küçük bir dilime nasıl bölebileceğimi bulmakta zorlanıyorum.VHDL'de std_logic_vector nasıl "dilimlenir"?

signal allparts: std_logic_vector(15 downto 0); 
signal firstpart: std_logic_vector(7 downto 0); 
signal secondpart: std_logic_vector(7 downto 0); 

Temel olarak, istediğim firstpart, 0, secondpart ve bit 7 ile 8 arasında bitleri 15 atamak için:

Örneğin

I 3 sinyaller. Ben "dilim" bireysel bitleri

cevap

18

atamadan böyle bir vektör doğrudan atayabilirsiniz olur tam olarak nasıl:

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

... ya firstpart ve secondpart parçası başvurmak için basitçe alternatif yollar ise allparts sinyali, bir diğer ad kullanmak isteyebilirsiniz:

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

Ah. Artık VHDL'nin çok tutarlı bir dil olduğunu görüyorum. Ayrıca, diğer ad çözüm çok daha temiz, bu yüzden bu – Earlz

+0

kullanacağım Not, örneğin std_logic_vector ([bazı ifade]) (15 aşağı 8) 'ın çalışmayacak. Bu sözdizimi uygulanabilir olduğunda daha fazla ayrıntı için [bu yanıt] bölümüne bakın (http://stackoverflow.com/a/28452053/603003). – ComFreek