Tôi có tín hiệu đầu vào từ bộ chuyển đổi ADC là 8 bit (std_logic_vector(7 downto 0)
). Tôi phải chuyển đổi chúng thành tín hiệu 16 bit (std_logic_vector(15 downto 0
)) để xử lý tín hiệu 16 bit cho hệ thống 16 bit.Làm thế nào để chuyển đổi 8 bit đến 16 bit trong VHDL?
Trả lời
Nếu giá trị 8 bit được hiểu là ký (bổ sung 2 của), sau đó phương pháp VHDL chuyển đổi nói chung và giữa các ý kiến để sử dụng thư viện numeric_std IEEE:
library ieee;
use ieee.numeric_std.all;
architecture sim of tb is
signal slv_8 : std_logic_vector(8 - 1 downto 0);
signal slv_16 : std_logic_vector(16 - 1 downto 0);
begin
slv_16 <= std_logic_vector(resize(signed(slv_8), slv_16'length));
end architecture;
Vì vậy, đầu tiên std_logic_vector được chuyển đổi với một giá trị đã ký, sau đó thay đổi kích thước được áp dụng, mà sẽ ký mở rộng giá trị đã ký, và kết quả cuối cùng được chuyển đổi trở lại std_logic_vector.
Chuyển đổi khá dài, nhưng có lợi thế là nó nói chung và hoạt động ngay cả khi độ dài mục tiêu được thay đổi sau này.
Thuộc tính 'chiều dài chỉ đơn giản trả về chiều dài của std_logic_vector slv_16, do đó 16.
Đối với đại diện unsigned thay vì ký tên, nó có thể được thực hiện bằng unsigned
thay vì signed
, do đó với mã này:
slv_16 <= std_logic_vector(resize(unsigned(slv_8), slv_16'length));
architecture RTL of test is
signal s8: std_logic_vector(7 downto 0);
signal s16: std_logic_vector(15 downto 0);
begin
s16 <= X"00" & s8;
end;
'X' trong dòng 5 là gì nghĩa là gì? –
Chữ 'x' dành cho "thập lục phân". Vì vậy, x "00" là cơ bản "00000000" nhị phân. – Passepartout
Nếu tôi muốn chuyển đổi "11111111" thành "1111111111111111" –
Để hoàn chỉnh, một cách khác đó là thỉnh thoảng hữu ích:
-- Clear all the slv_16 bits first and then copy in the bits you need.
process (slv_8)
begin
slv_16 <= (others => '0');
slv_16(7 downto 0) <= slv_8;
end process;
tôi đã không phải làm điều này cho các vectơ mà tôi có thể nhớ lại, nhưng tôi đã cần điều này trong những hoàn cảnh phức tạp hơn: chỉ sao chép một vài tín hiệu phù hợp vào một bản ghi lớn hơn, phức tạp hơn là một lần.
Và phần mở rộng ký hiệu được thực hiện với lệnh đầu tiên là 'slv_16 <= (others => slv_8 (7)); ' –
Chính xác là chức năng, nhưng tôi cho rằng nếu bạn muốn mở rộng ký, bạn nên sử dụng các kiểu số thích hợp (tức là' signed') và sau đó sử dụng chức năng 'resize' - như bạn đã đề xuất trong câu trả lời của bạn :) –
này xử lý việc chuyển đổi mà không cần phải chỉnh sửa độ rộng của zero nếu một trong hai std_logic_vector thay đổi:
architecture RTL of test is
signal s8: std_logic_vector(7 downto 0);
signal s16: std_logic_vector(15 downto 0) := (others => '0');
begin
s16(s8'range) <= s8;
end;
- 1. Chuyển đổi độ sâu 16 bit CvMat * sang độ sâu 8 bit
- 2. Làm thế nào để chuyển đổi BufferedImage thành 8 bit?
- 3. Làm thế nào để chuyển đổi một OpenCV IplImage 8-bit * thành IplImage 32-bit *?
- 4. Độ sâu bit 16 bit
- 5. cách chuyển đổi hai byte thành một số 16 bit?
- 6. Làm cách nào để chuyển đổi các byte 8 bit thành các ký tự 6 bit?
- 7. 16 bit grayscale png
- 8. Làm thế nào để chuyển đổi một byte thành bit?
- 9. Ghép nối các bit trong VHDL
- 10. Làm cách nào để chuyển đổi bit thành byte?
- 11. typecasting Implicit trong C (Chuyển đổi 32 bit unsigned để 8 bit u int)
- 12. Chuỗi C++: mã hóa UTF-8 hoặc 16 bit?
- 13. Làm cách nào để chuyển đổi màu RGB thành màu 8-bit khớp gần nhất?
- 14. Chuyển đổi hình ảnh Bayer 12 bit sang RGB 8 bit bằng cách sử dụng OpenCV
- 15. Sử dụng dữ liệu hình ảnh 16 bit một cách hiệu quả để chuyển đổi thành 8 bit để hiển thị, với tỷ lệ cường độ
- 16. Python và 16 bit PGM
- 17. Trộn mã 32 bit và 16 bit với nasm
- 18. Làm thế nào để "cắt" một std_logic_vector trong VHDL?
- 19. Làm cách nào để bit chuyển đổi dài hơn 32 bit?
- 20. Rõ ràng thấp hơn 16 bit
- 21. Chuyển đổi byte thành bit trong python
- 22. Chuyển đổi phao sang bit
- 23. Tìm trình biên dịch 16 bit x86
- 24. thay đổi Bit trong C++
- 25. Làm thế nào để chuyển đổi UTF-8 std :: chuỗi thành UTF-16 std :: wstring?
- 26. Delphi 32 đến Delphi XE2 (64 bit) chuyển đổi
- 27. Chuyển đổi 32 bit dll sang 64 bit dll
- 28. Các thông số được chuyển khi gọi Printf từ bit asm 64 bit như thế nào?
- 29. Làm thế nào để yêu cầu GCC tạo mã 16 bit cho chế độ thực
- 30. Làm cách nào để lưu/tải hình ảnh 16 bit trong .net x64?
Tôi đã cố gắng thay đổi kích thước từ 16 đến 8 bit như: resized_var1: = std_logic_vector (thay đổi kích thước (unsigned (Kp) * unsigned (integration1)), 8); Tôi đã nhận được lỗi như: "Loại chuyển đổi (để std_logic_vector) không thể có toán hạng tổng hợp." Tại sao nó không hoạt động? –
Bởi vì, 8 nên được bên trong các parens cho thay đổi kích thước() và không std_logic_vector(). –