Thiết kế mô phỏng đồ họa mà không cần phần cứng thực tế


9

Tôi mới sử dụng FPGA và hiện đang tham gia lớp HDL (đặc biệt là Verilog). Tôi có đủ kiến ​​thức về thiết kế kỹ thuật số như các mạch tổ hợp và tuần tự.

Tôi muốn tạo một dự án tương tự như dự án được hiển thị trong video YouTube này .

Tôi cũng biết rằng Xilinx ISE có thể xử lý tín hiệu logic và mô phỏng dạng sóng. Liệu nó có khả năng bổ sung như nhận tín hiệu đầu vào qua USB, máy ảnh, v.v. và xuất nó trong máy tính của bạn.

Có thể chạy dự án này (giống như một mô phỏng trong máy tính) mà không cần mua một bo mạch đồ họa thực tế không? Ý tôi là, tôi có thể xây dựng, mã hóa và chạy dự án đó trong máy tính của mình không và chỉ cần kết nối máy ảnh của mình qua USB, sau đó để các tín hiệu video đến được xử lý bởi các trình giả lập HDL như Xilinx ISE, v.v. một bảng mạch và tổng hợp dự án của bạn ở đó, hiện tại tôi không có ngân sách để có)

(Điều tôi thực sự muốn nói là giao diện thiết kế HDLl thành các nguồn trong thế giới thực, mã C, v.v.)


5
Tôi không biết liệu bạn có thể làm điều đó với trình giả lập của Xilinx hay không, nhưng một cái gì đó như Icarus Verilog sẽ cho phép giao diện mô phỏng của bạn thành mã C có thể lấy dữ liệu từ các nguồn trong thế giới thực; tuy nhiên, nó có khả năng chạy các đơn đặt hàng có cường độ chậm hơn thời gian thực, vì vậy việc xử lý nguồn video trực tiếp sẽ khó khăn.
Chris Stratton

1
ồ, đó là cụm từ tôi đang tìm, giao tiếp với các nguồn trong thế giới thực
WantIt

2
@vvavepacket upvote bình luận / bài viết để cảm ơn người bình luận / người đăng.
Chetan Bhargava

1
Các FPGA trong video trông giống như Altera DE2. Đó là từ 200 đến 600 USD tùy thuộc vào giấy phép và chip. Có các trình giả lập tại csc.kth.se/~emille/niisim
Niklas

2
Terasic DE0-nano có giá $ 80 và có thể giao tiếp với máy ảnh và LCD; trong thực tế họ có bản demo của nó trên trang web của họ. Không liên kết với chúng, nhưng DE0-nano có một đồ họa nhỏ xinh xắn trên một bảng giá rẻ. Tôi luôn ghét việc các bảng dev đắt tiền như thế nào.
akohlsmith

Câu trả lời:


5

Các công cụ Xilinx không thể giao tiếp theo thời gian thực theo như tôi biết, ModelSim cũng không thể (được sử dụng bởi Acto's Libero IDE)
Tôi không biết về các trình giả lập nguồn mở, có một số dự án khá kỳ lạ ngoài đó nên có thể có một cái gì đó có thể làm điều này.

Tuy nhiên, đây có thể là câu trả lời mà bạn không yêu cầu (Tôi sẽ xóa nó nếu nó không hữu ích), nhưng tôi sẽ xem xét việc xây dựng bảng mạch của riêng bạn để làm điều này hoặc ít nhất là bắt đầu theo hướng đó. Tôi đã khắc bảng đầu tiên của tôi và mặc dù nó rất đơn giản (bảng không phải là quy trình ;-)), nó đã dạy cho tôi rất nhiều điều khá nhanh chóng.

Ưu điểm:

  • Rẻ
  • Nhảy ngay vào phần cuối sâu và tìm hiểu tất cả những gì bạn cần biết về những cân nhắc về phần cứng. Buộc bạn phải đọc hầu hết các bảng dữ liệu trước tiên và viết mã khởi động của riêng bạn, IMHO thường tốt hơn phương pháp tiếp cận bảng cắm và phát triển để học.
  • Chỉ đưa lên bảng những gì bạn cần.
  • Đưa bạn tiến xa hơn tới mục tiêu của bạn về một thiết kế làm việc thực sự với nỗ lực / nghiên cứu có thể giống như việc tìm ra cách mô phỏng tất cả trong thời gian thực.

Nhược điểm:

  • Vẫn cần phải mua một lập trình viên, mặc dù các phiên bản giá rẻ của các lập trình viên Xilinx / Altera có thể được tìm thấy trên eBay.
  • Nếu thiết kế và vấn đề toàn vẹn PCB / tín hiệu không phải là thứ bạn muốn tập trung vào, thì bạn có thể không quan tâm đến nhiều kiến ​​thức cần có bằng cách thực hiện theo cách này.

Tôi hiểu rằng việc khắc bảng của chính bạn có lẽ là không cần thiết, tôi chỉ làm điều đó bởi vì tôi có các GPU ở đó, không kiên nhẫn và không muốn đợi 2 tuần để PCB đến. Có những giao dịch cực kỳ rẻ ở đây dành cho bo mạch 2 lớp, ít nhất sẽ chạy thiết kế của bạn (có thể ở tốc độ thấp hơn mong muốn - thông thường, số lớp tối thiểu cho thiết kế đồ họa tốc độ cao sẽ là 4, nhưng đây là đắt hơn nhiều)

Dù sao, Spirit Circuits thực hiện một thỏa thuận PCB "xương trần" 2 lớp hoàn toàn miễn phí (một tháng, một thiết kế, không mặt nạ hoặc màn hình lụa) có ích cho thiết kế một lần.
Ngoài ra, đối với các bảng nguyên mẫu giá rẻ 2 và 4 lớp thích hợp, ITead và Seed Studio có giá thấp nhất là 10 đô la cho 10 bảng (hoặc có thể là 5 với mức giá đó).


rất thú vị về điều này! và cũng đáng khích lệ
davidbak 16/07/19

6

Webpack Xilinx ISE tiêu chuẩn (phiên bản miễn phí mà bạn có thể tải xuống từ xilinx.com) bao gồm một trình giả lập có tên iSim. Nó không phải là một trình giả lập tuyệt vời, nhưng có đầy đủ chức năng và giá cả phù hợp.

Mặc dù tôi chưa sử dụng các công cụ Altera, nhưng nó sẽ làm tôi ngạc nhiên nếu không bao gồm một trình giả lập.

Nhưng ... Bạn cần biết một trình giả lập có thể và không thể làm gì. Đối với người mới bắt đầu, nó không thể mô phỏng một GPU chạy ở tốc độ tối đa. Trên thực tế, chúng khá chậm. Tùy thuộc vào độ phức tạp của FPGA được mô phỏng, tôi sẽ không ngạc nhiên khi thấy nó mất 1 phút để mô phỏng 1 ms "thời gian mô phỏng". Nếu bạn muốn mô phỏng một giờ "thời gian mô phỏng", thì sẽ cần 1000 giờ thời gian thực.

Ngoài ra, một GPU mô phỏng không thể giao tiếp trực tiếp với những thứ như cổng USB của bạn. Các FPGA mô phỏng không giao tiếp với một "testbench". Testbench là một đoạn mã VHDL hoặc Verilog cung cấp các đầu vào của FPGA (hoặc các bộ phận của FPGA) và xác minh đầu ra của FPGA của bạn. Bạn có thể thực hiện một số điều khá phức tạp trong testbench, như sử dụng số dấu phẩy động, đọc và ghi tệp và chạy logic không thể tổng hợp.


1
Altera đã có phiên bản Quartus miễn phí, bao gồm ModelSim. Phiên bản miễn phí của ModelSim giới hạn tốc độ mô phỏng của bạn và phiên bản Quartus miễn phí giới hạn số lượng lõi CPU được sử dụng để tổng hợp, nhưng về mặt khác thì có đầy đủ chức năng.
akohlsmith

1
Altera ModelSim không hỗ trợ đồng mô phỏng VHDL và Verilog trong cùng một thiết kế.
shuckc

3

Tôi không biết bất kỳ trình giả lập nào sẽ giao tiếp trực tiếp với các tín hiệu đến trên cổng USB (hoặc phần cứng khác).

Ít nhất là về mặt lý thuyết, có thể viết một số phần mềm nhận tín hiệu đến cổng và dịch chúng thành tệp testbench mà trình giả lập có thể xử lý. Thật không may, tôi không biết về bất kỳ phần mềm hiện có nào để làm điều này và việc tự viết nó sẽ không tầm thường.


sau đó, cách tốt nhất là để có được một cấp nhập cảnh, bảng fpga chi phí thấp cho
n00bs

Bạn thực sự không phải trải qua tệp testbench nếu bạn có trình giả lập hỗ trợ giao diện để mã tùy chỉnh như VPI, tuy nhiên, do trình giả lập sẽ chạy các đơn đặt hàng có cường độ chậm hơn thời gian thực, có thể dễ dàng xử lý hơn với dữ liệu được chụp trong một tệp có thể được đọc ở tốc độ mô phỏng.
Chris Stratton

@ChrisStratton Tôi quan tâm đến ý tưởng dữ liệu bị bắt trong một tệp. Bất kỳ nguồn lực cho điều đó? Cảm ơn
WantIt

Nó hoàn toàn phụ thuộc vào các thiết bị ngoại vi bạn muốn sử dụng làm nguồn dữ liệu.
Chris Stratton

3

Bạn sẽ cần sử dụng giao diện đồng mô phỏng (DPI, VPI, VHPI, FLI) cho phép bạn viết mã nối vào trình giả lập và do đó kết nối giữa RTL chạy trong mô phỏng và phần cứng thực trên máy của bạn.

Các vấn đề quan trọng bạn sẽ gặp phải (ngoài các giao diện tài liệu kém) là liên quan đến đồng bộ hóa và thời gian. RTL chạy trong mô phỏng chậm hơn nhiều so với phần cứng thực - bạn sẽ cần có khả năng từng bước tương tác với giao diện bên ngoài để phù hợp với tốc độ mô phỏng. Một số giao diện phần cứng sẽ không như thế này! Ví dụ: nếu sử dụng TCP, bạn có thể phải làm mờ bộ định thời trong ngăn xếp hạt nhân để tránh truyền lại giả, v.v.

Icarus hỗ trợ VPI và miễn phí để bạn có thể thử nghiệm mà không tốn bất kỳ khoản tiền nào cho giấy phép. Bạn có thể muốn xem xét các khung công tác hiện có thực hiện một số thao tác nâng đồng mô phỏng và cung cấp một bản tóm tắt rõ ràng hơn cho trình giả lập. Một khung như vậy là Cocotb , một thư viện mã nguồn mở cung cấp giao diện Python cho trình giả lập. ( Tuyên bố miễn trừ trách nhiệm: Tôi là một trong những nhà phát triển của cocotb.)

Một ví dụ có thể có liên quan: ngày hôm qua tôi đã gõ một số RTL để đáp ứng các yêu cầu ping và tạo ra một testbench mở giao diện TUN. Sau đó, bạn có thể ping giao diện bằng pinglệnh và RTL đang chạy trong mô phỏng sẽ nhận ping và trả lời. Toàn bộ testbench có ít hơn 50 dòng Python! Mã nguồn cho ví dụ này là trên Github và nó chạy trên Icarus trong Linux.


0

Trong phần lớn các trường hợp, bất cứ điều gì bạn làm trong mô phỏng đều nằm trong mô phỏng. Bạn không thể truy cập phần cứng thực từ nó - bạn phải có một mô hình mô phỏng của phần cứng thực.

Tuy nhiên, nếu bạn sẵn sàng bỏ ra một số nỗ lực, hầu hết các trình giả lập đều có giao diện để mã tùy ý. Trong Verilog, đó là một giao diện khá chuẩn theo như tôi hiểu, vì vậy phía Verilog của mọi thứ sẽ chuyển giữa các trình giả lập. Trong VHDL-đất, có một cách làm tiêu chuẩn nhưng ít nhất một trong những nhà cung cấp lớn có cách làm riêng của họ!

Cũng nên nhớ rằng việc giao tiếp trong thời gian thực (tức là với tốc độ mà FPGA sẽ làm được) là rất khó xảy ra - và phần còn lại của mô phỏng của bạn (HDL) cũng sẽ không chạy theo thời gian thực. Như đã lưu ý trong các ý kiến, việc xử lý video mô phỏng theo thời gian thực là không khả thi trong thời trang này.

Cá nhân tôi chưa bao giờ có nhu cầu thử điều này, tôi thấy tôi đang viết các mô hình phần cứng hiệu quả hơn và chạy tất cả trong VHDL.

Nhưng, đừng bỏ qua những lợi ích của việc thực hiện mô phỏng - đó là cách nhanh hơn để tìm ra nếu mọi thứ đang hoạt động (biên dịch mất vài giây) sau đó xây dựng các luồng bit (biên dịch mất hàng chục phút đến hàng giờ) và thử chúng trong phần cứng.


Không đúng, xem ý kiến ​​cho câu hỏi.
Chris Stratton

OK, tôi nên rõ ràng hơn - Tôi đã giới hạn câu trả lời của mình ở mức độ "Tôi mới sử dụng FPGA" :) Câu trả lời được cập nhật
Martin Thompson
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.