2012-04-29 34 views
10

Tôi đang phát triển một điều nhỏ trong VHDL và khá mới mẻ với nó. Tôi đang gặp khó khăn trong việc tìm ra cách để cắt một std_logic_vector lớn hơn thành một nhỏ hơn.Làm thế nào để "cắt" một std_logic_vector trong VHDL?

Ví dụ tôi có 3 tín hiệu:

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

Về cơ bản, những gì tôi muốn là gán bit 15 thông qua 8-secondpart và bit 7 đến 0-firstpart. Làm thế nào một cách chính xác sẽ tôi "lát" một vector như thế này mà không gán bit riêng lẻ

Trả lời

18

Bạn có thể trực tiếp giao cho:

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

... hoặc nếu firstpart và secondpart nhiều cách đơn giản là thay thế để đề cập đến một phần của tín hiệu allparts, bạn có thể muốn sử dụng bí danh:

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

Ah. Tôi thấy ngày càng nhiều rằng VHDL là một ngôn ngữ rất nhất quán. Ngoài ra, các giải pháp bí danh là sạch hơn nhiều, vì vậy tôi sẽ sử dụng rằng – Earlz

+0

Lưu ý rằng ví dụ 'std_logic_vector ([một số biểu hiện]) (15 downto 8)' sẽ không hoạt động. Xem [câu trả lời này] (http://stackoverflow.com/a/28452053/603003) để biết thêm chi tiết khi cú pháp này được áp dụng. – ComFreek

Các vấn đề liên quan