Tôi đang cố gắng tạo ra một shifter thùng tái sử dụng; nó lấy một mảng đầu vào của các bit và thay đổi chúng một số vị trí nhất định (được xác định bởi một đầu vào khác). Tôi muốn tham số hóa mô-đun để nó hoạt động cho bất kỳ n
nào.VHDL: sử dụng độ dài của một số nguyên chung để xác định số lượng các dòng chọn
Số lượng các dòng được chọn được xác định bởi n
-> tức là, SHIFT_CNT = log2(NUMBITS-1)+1
trong mã bên dưới. Nó được coi là hình thức xấu trong tổ chức của tôi (và tôi nghĩ tổng thể) có cổng không phải là std_logic_vector
hoặc std_logic
, vì vậy tôi đã sử dụng một số std_logic_vector
cho số dòng được chọn. Tôi cần điều chỉnh độ dài của std_logic_vector
dựa trên dữ liệu chung chung. Có cách nào để làm điều này mà không sử dụng một generic chung thứ hai? Tôi đã nhìn thấy this bài đăng, nhưng nó không xử lý với Generics. This bài loại bỏ toàn bộ generics hoặc sử dụng giá trị log như generic, không trực quan cho người dùng trong tương lai (và có thể gây ra vấn đề nếu INPUT
không phải là sức mạnh của hai).
Tuyên bố của SHIFT_CNT
bên dưới chắc chắn là không chính xác; có cách nào để tự động tạo chiều dài trong khai báo thực thể mà không sử dụng một generic chung thứ hai không?
entity BarrelShifter is
generic (NUMBITS : integer :=8);
Port (INPUT : in std_logic_vector (NUMBITS-1 downto 0);
OUTPUT : out std_logic_vector (NUMBITS-1 downto 0);
SHIFT_CNT : in std_logic_vector ((NUMBITS-1)'length downto 0)
);
end BarrelShifter;
Đó là một trong những mối quan tâm của tôi - tôi không muốn viết hàm có thể yêu cầu tài nguyên FPGA để tính toán. Tôi vẫn muốn một cái gì đó hoàn toàn khép kín nếu có thể (trái ngược với việc viết một thư viện và sau đó nhớ bao gồm nó bất cứ nơi nào tôi cần) – NickD
Tôi có thể thấy tại sao bạn muốn điều đó (tôi cũng vậy, vì nó là một vấn đề phổ biến!) nhưng tôi khá chắc chắn không có một cách thanh lịch hơn để làm điều đó. Trong công ty của tôi, chúng tôi có một thư viện với các chức năng phổ biến như chức năng này mà chúng tôi nhập vào tất cả các tệp nguồn. – pc3e