Các thư viện nguồn mở có tồn tại cho VHDL theo cách họ làm cho C ++ hoặc python không?


11

Khi tôi tiếp cận một vấn đề trong C ++ hoặc python, có rất nhiều thư viện tồn tại làm quá nhiều mã của tôi. Tôi đang nghĩ về GNU GSL , BOOST hoặc FFTW cho C ++ và NumPy hoặc SciPy cho python. Theo nhiều cách, thực tế là các tài nguyên này tồn tại làm cho việc mã hóa trong các ngôn ngữ tương ứng này trở nên đáng giá, vì các thư viện ngăn bạn khỏi phải viết lại tất cả những thứ cấp thấp từ đầu.

Các thư viện tiêu chuẩn IEEE dường như chỉ bao gồm những điều cơ bản, chẳng hạn như các loại dữ liệu (gần giống với libs tiêu chuẩn C).

Có vẻ như trong VHDL, bạn có thể mua / tìm một số "Lõi IP" sẽ giải quyết vấn đề, thay vì sử dụng thư viện nguồn mở. Trong python, nếu tôi muốn nói chuyện với một thiết bị nối tiếp, tôi chỉ import serialvà tôi cơ bản đã hoàn thành. Trong VHDL, tôi sẽ bị kẹt khi viết một giao thức nối tiếp từ đầu hoặc tôi sẽ phải tìm kiếm trên các kho lưu trữ khác nhau cho đến khi tôi tìm thấy ai đó đã tạo ra một loại công việc nào đó. Sau đó tôi sẽ vá các đoạn mã vào dự án của mình, thay vì chỉ bao gồm một cái gì đó và gọi nó. Theo cách tương tự, nếu tôi muốn thực hiện FFT, tôi có thể tìm thấy các ví dụ về FFT trong VHDL qua google, nhưng không có thứ gì đơn giản như FFTW mà tôi có thể tìm thấy.

Có bất kỳ thư viện mã nguồn mở toàn diện nào mà tôi có thể nhập vào các dự án của mình không? Tại sao mọi người dường như cuộn mã của riêng họ cho rất nhiều điều giống nhau?


2
Bạn đã tìm kiếm opencores.org?
MarkU

3
Đối với các thư viện xác minh VHDL, xem osvvm.org
Jim Lewis

Opencores, bạn cũng có thể mua thư viện từ nhiều nguồn khác nhau. Bạn sẽ dành một chút thời gian với hầu hết các lõi từ opencores vì ​​hầu hết không được ghi chép tốt.
Điện áp tăng vọt

Câu trả lời:


14

Tôi là nhà phát triển và bảo trì tại ' Thư viện PoC '. Chúng tôi cố gắng cung cấp một thư viện bao gồm các gói (bộ sưu tập các loại và chức năng mới) và các mô-đun. Nó đi kèm với fifos, arithologists, các thành phần đồng hồ chéo, các thành phần I / O tốc độ thấp và ngăn xếp Ethernet / IP / UDP (phiên bản tiếp theo).

Như @crgrace đã mô tả, việc thiết kế các mô-đun khá phức tạp:

  • làm việc trên nhiều nền tảng
  • hỗ trợ hầu hết các chuỗi công cụ của nhà cung cấp
  • thêm không / ít chi phí

Thư viện của chúng tôi có cơ chế cấu hình bên trong (PoC.config) để phân biệt các nhà cung cấp, thiết bị và thậm chí các thư mục con thiết bị để chọn đúng mã hoặc triển khai tối ưu hóa. Nó cũng phân biệt giữa mã tổng hợp và mã mô phỏng tại một số điểm.

Ví dụ: PoC.fifo_cc_gotmột chiếc FIFO có giao diện 'đồng hồ chung' (cc) và đặt / nhận tín hiệu để điều khiển fifo. Fifo có thể cấu hình theo chiều rộng, độ sâu, bit trạng thái điền và loại thực hiện. Có thể chọn loại triển khai RAM dựa trên LUT hoặc On-Chip-RAM (ocram). Nếu fifo này được tổng hợp với tùy chọn ocram cho Altera, nó sử dụng altsyncram; nếu Xilinx được chọn, nó sử dụng mô tả BlockRAM chung và thực hiện số học con trỏ bằng cách khởi tạo carrychain rõ ràng (Xilinx XST không tìm thấy giải pháp tối ưu, vì vậy nó được thực hiện thủ công).

Có 2 loại fifo khác với giao diện 'đồng hồ phụ thuộc' (dc) và đồng hồ độc lập (ic). Vì vậy, nếu bắt buộc phải chuyển từ fifo bình thường sang fifo đồng hồ chéo (PoC.fifo_ic_got), hãy thay đổi tên thực thể và thêm đồng hồ và đặt lại cho miền đồng hồ thứ hai, đó là tất cả.

Tôi nghĩ điều này chứng tỏ, có thể viết các mô-đun phổ biến, hoạt động trên nhiều nền tảng và biên dịch trong các công cụ khác nhau (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Ngoài PoC, còn có các thư viện mã nguồn mở khác:


Các dự án "Khám phá Silicon miễn phí và mã nguồn mở" ( FOSSi ) trên GitHub cung cấp cơ sở dữ liệu có thể duyệt được của tất cả các dự án GitHub, chủ yếu sử dụng , , hoặc bất kỳ ngôn ngữ mô tả phần cứng quan trọng nào khác ( ).

Xem thêm:


+1 để hiển thị những gì bạn đã làm và cả những gì người khác đã làm. Danh sách dài tốt.
Mystère

3

Các thư viện mã nguồn mở như bạn mô tả sẽ không hữu ích cho VHDL hoặc Verilog vì chúng dành cho ngôn ngữ lập trình mục đích chung. Điều này là do CÁCH bạn thực hiện một chức năng nhất định có thể rất nhiều tùy thuộc vào những gì bạn đang cố gắng thực hiện. Mã tốt cho và có lẽ không tốt cho ASIC và ngược lại.

Ngoài ra, vì chúng tôi đang mô tả phần cứng, một chức năng thực hiện FFT sẽ yêu cầu các chi tiết cụ thể như độ rộng từ và đồng hồ và chiến lược đặt lại mà nó sẽ trói tay bạn và hạn chế toàn bộ thiết kế của bạn. Nếu bạn thực hiện chức năng rất linh hoạt, nó sẽ có chi phí rất lớn.

Cuối cùng, hãy xem kích thước của tệp thực thi của bạn khi bạn bao gồm rất nhiều thư viện trong C. Có một tấn sưng lên ở đó. Điều đó không quan trọng đối với việc phát triển phần mềm (hầu hết thời gian) nhưng lại quan trọng rất nhiều đối với phát triển FPGA và đặc biệt là phát triển ASIC. Không có ý nghĩa tổng hợp một loạt các chi phí bạn không cần.

Vì vậy, điểm mấu chốt là không có thư viện như vậy, và cách tiếp cận hiện tại của bạn là âm thanh.


Các bộ tạo lõi (IP) thay thế cũng cung cấp các rủi ro Scylla và Chabydris khi khóa nhà cung cấp và dẫn đến sự phình to. Các khả năng của FPGA và ASIC đã phát triển đủ lớn để hỗ trợ sự phình to, vấn đề sau đó là chi phí và thử nghiệm, được hỗ trợ bởi tiêu chuẩn hóa phình to (ví dụ AMBA AXI4). Việc đánh đổi Time To Market so với "bạn không cần" đã được thực hiện bởi toàn bộ các ngành công nghiệp. Thiết kế hệ thống sử dụng các khối xây dựng thay vì thiết kế phần cứng, sau này là bailiwick của VHDL.
dùng8352

Đoạn thứ ba của bạn khá thờ ơ về cách trình biên dịch và công cụ tổng hợp hoạt động - các công cụ nên loại bỏ những thứ không cần thiết và kết quả không được sử dụng, thậm chí có thể là trong một thiết lập logic kỹ thuật số so với trong thư viện ngôn ngữ cấp cao, nơi có thể có một số cục bộ các biến và phân bổ bộ nhớ là chi phí chung của trừu tượng thư viện, đặc biệt nếu nó được liên kết động.
Chris Stratton

2

VHDL và Verilog là ngôn ngữ mô tả và chúng mô tả các khối phần cứng. Trình điều khiển nối tiếp trong C ++ có thể chuyển thành IP nối tiếp trong VHDL / Verilog.

opencores.org là cơ sở dữ liệu nguồn mở lớn nhất cho đến nay.

Để tạo điều kiện cho quá trình tìm kiếm, tải xuống và duyệt mã (thông qua Github), bạn có thể sử dụng giao diện hiện đại này:

http://freerangefactory.org/cores.html

Ví dụ, nếu bạn tìm kiếm nối tiếp, bạn có thể kết thúc tại đây:

http://freerangefactory.org/cores/cransication_controll/serial_uart_2/index.html

và trực tiếp nhảy đến mã trong GitHub. Ở đó bạn sẽ thấy rằng bạn có thể dễ dàng khởi tạo mô-đun nối tiếp và kết nối mạch của riêng bạn với nó và bắt đầu gửi và nhận dữ liệu. Điều này đơn giản như libs nối tiếp trong C ++.

Tôi hi vọng cái này giúp được.


0

Trang web đầu tiên tôi truy cập cho loại điều này (như @MarkU đã đề cập) là opencores.org.

Ví dụ, có một công cụ FFT được tham số hóa , được viết bằng VHDL, được phát hành theo giấy phép BSD. Trạng thái là "beta".


Đó không phải là những gì OP yêu cầu. Anh ấy hoặc cô ấy biết về việc xem opencores.org Một công cụ FFT được tham số hóa khác xa so với việc nhập một thư viện toán học tiêu chuẩn bằng Python và sử dụng nó. Không có thứ gọi là "phần mềm trung gian" trong phần cứng vì chi phí hoạt động.
crgrace

0

Để xác minh, có Phương pháp xác minh VHDL mã nguồn mở (OSVVM).
OSVVM là một phương pháp xác minh VHDL toàn diện, tiên tiến, giúp đơn giản hóa việc thực hiện bảo hiểm chức năng, ngẫu nhiên bị hạn chế và Ngẫu nhiên bảo hiểm thông minh (một phương pháp thử nghiệm thông minh). Nó cũng tạo điều kiện cho việc thực hiện các tệp bản ghi được chia sẻ, báo cáo lỗi, nhật ký (in có điều kiện) và mô hình hóa bộ nhớ.

Trang web và blog của OSVVM có tại http://osvvm.org . Các gói cũng có sẵn trên github tại: https://github.com/JimLewis/OSVVM

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.