Lập trình FPGA, bắt đầu từ đâu


29

Tôi là một nhà phát triển phần mềm (C, C ++, object-c, java ...) và tôi thích học lập trình các GPU. Bây giờ câu hỏi có thể đơn giản với bạn nhưng xin vui lòng dành thời gian để giúp tôi về vấn đề này vì tôi đang bị mắc kẹt ngay bây giờ. Công ty của tôi đã yêu cầu tôi làm quen với công nghệ và làm việc trên một sản phẩm lưới. Câu hỏi của tôi là bắt đầu từ đâu? Sau một số nghiên cứu tôi thấy rằng tôi có thể chọn giữa VHDL và Verilog, tôi chưa bao giờ sử dụng bất kỳ trong số họ. Có chuyên gia nào có thể gợi ý cho tôi nên bắt đầu từ đâu không? Học một ngôn ngữ, tìm hiểu về các thành phần phần cứng và sau đó lưới sản phẩm? Hoặc trực tiếp bắt đầu với sản phẩm Lattice (như tôi đọc được rằng các phương pháp lập trình rất khác nhau giữa các nhà cung cấp đồ họa)?


3
Nếu bạn đã quen thuộc với lập trình C / C ++, thì bạn nên chọn Verilog , thay vì VHDL. Cú pháp của Verilog tương tự như C.
m.Alin

1
@ m.Alin Tôi mới bắt đầu và tôi phát hiện ra rằng điều đó không quan trọng, nếu nó trông giống C, bởi vì tôi thấy rằng phần khó nhất không phải là cú pháp, mà là sự khác biệt trong các khái niệm. Các ngữ nghĩa thậm chí không gần với ngữ nghĩa của C.
Edgar Klerks

Thay đổi lớn nhất tôi tìm thấy từ C / C ++ / Java / etc. là các mô-đun bạn viết (tương đương với giả sử đơn vị dịch thuật) hoàn toàn là sự kiện. Trong C, được đơn giản hóa theo nguyên tắc cơ bản, một chương trình được biên dịch sẽ thực hiện dòng 1 mã của bạn, sau đó là dòng 2, rồi 3, 4, v.v. Không có điều gì như vậy trong Verilog / VHDL, nó giống như vẽ một bức tranh : chân đầu vào này kết nối với module1_input, module1Defput bật / tắt trạng thái mỗi khi module1_input tăng cao. Thay vì if(condition)when(condition). Hầu hết các IDE IDE thậm chí có đầu vào thiết kế đồ họa, như thể bạn đang vẽ nó trên giấy.
CharlieHanson

Câu trả lời:


40

Thiết kế kỹ thuật số không có nhiều điểm chung với phát triển phần mềm (có thể ngoại trừ cú pháp Verilog trông hơi giống ngôn ngữ C nhưng nó chỉ có vẻ). Vì vậy, rất khó để trả lời loại câu hỏi này đầy đủ. Nhưng với tư cách là một người đi theo con đường từ phát triển phần mềm đến thiết kế phần cứng, tôi sẽ thử. Nhìn lại bản thân mình, đây là cách tôi sẽ tự khuyên mình trở lại sau đó nếu tôi biết những gì tôi biết bây giờ:

Bắt đầu từ đầu

Quên mọi thứ về phát triển phần mềm. Đặc biệt là ngôn ngữ lập trình. Những nguyên tắc đó không áp dụng trong thiết kế kỹ thuật số. Có lẽ sẽ dễ dàng cho một anh chàng thiết kế CPU để lập trình nó trong trình biên dịch chương trình hoặc thậm chí là C, nhưng một lập trình viên trình biên dịch sẽ không thể thiết kế CPU.

Trên con đường học tập của bạn không có xu hướng giải quyết những gì dường như là một vấn đề dễ dàng với kiến ​​thức hiện có của bạn từ phần mềm. Một trong những ví dụ kinh điển là "vòng lặp for". Mặc dù bạn có thể viết một vòng lặp for, giả sử, verilog - nó phục vụ một mục đích khác. Nó chủ yếu được sử dụng để tạo mã. Nó cũng có thể là một vòng lặp for vì các nhà phát triển phần mềm nhìn thấy nó, nhưng nó sẽ không tốt cho bất cứ thứ gì ngoại trừ mô phỏng (tức là bạn sẽ không thể lập trình được như thế).

Vì vậy, đối với mọi nhiệm vụ bạn muốn giải quyết, đừng nghĩ rằng bạn biết cách thực hiện, thay vào đó hãy nghiên cứu - kiểm tra sách, ví dụ, hỏi những người có kinh nghiệm hơn, v.v.

Tìm hiểu ngôn ngữ phần cứng và HDL

Các ngôn ngữ HDL phổ biến nhất là Verilog và VHDL. Ngoài ra còn có những nhà cung cấp dành riêng cho nhà cung cấp như AHDL (Altera HDL). Vì các ngôn ngữ đó được sử dụng để mô tả các thành phần phần cứng, chúng đều được sử dụng khá nhiều để diễn tả cùng một thứ trong một thời trang tương tự nhưng với một cú pháp khác nhau.

Một số người khuyên bạn nên học Verilog vì nó trông giống C. Có, cú pháp của nó là sự pha trộn giữa C và Ada nhưng nó không giúp nhà phát triển phần mềm dễ dàng dựa vào. Trên thực tế, tôi nghĩ nó thậm chí có thể làm cho nó tồi tệ hơn bởi vì sẽ có một sự cám dỗ để viết C trong Verilog. Đó là một công thức tốt để có một thời gian rất xấu.

Có ý nghĩ đó, tôi khuyên bạn nên nhìn chằm chằm từ VHDL. Mặc dù Verilog cũng ổn miễn là những điều trên được tính đến.

Một điều quan trọng cần ghi nhớ là bạn phải hiểu những gì bạn đang thể hiện với ngôn ngữ đó. Loại phần cứng nào đang được "mô tả" và cách thức hoạt động.

Vì lý do đó, tôi khuyên bạn nên mua cho mình một số cuốn sách về điện tử nói chung và một cuốn sách hay như cuốn này - HDL Chip Design (hay còn gọi là một cuốn sách màu xanh).

Nhận một giả lập

Trước khi bạn bắt đầu làm bất cứ điều gì trong phần cứng và sử dụng bất kỳ tính năng cụ thể nào của Nhà cung cấp, v.v., hãy tạo cho mình một trình giả lập. Tôi đã bắt đầu với một Verilog và đã sử dụng Icarus Verilog cùng với GTK Wave. Đó là những dự án nguồn mở miễn phí. Chạy các ví dụ bạn thấy trong sách, thực hành bằng cách thiết kế các mạch của riêng bạn để có được một số hương vị của nó.

Nhận một ban phát triển

Khi bạn cảm thấy muốn đi tiếp, hãy lấy một bảng phát triển. Nếu bạn biết rằng chủ nhân của bạn muốn đi với Lattice, thì hãy lấy bảng Lattice.

Các phương pháp lập trình rất giống nhau, nhưng có những chi tiết khác nhau. Chẳng hạn, các công cụ khác nhau, các tùy chọn khác nhau, các giao diện khác nhau. Thông thường, nếu bạn có kinh nghiệm với một nhà cung cấp, không khó để chuyển đổi. Nhưng bạn có thể muốn tránh đường cong học tập thêm này.

Tôi cũng đảm bảo rằng bảng đi kèm với các thành phần mà bạn dự định sử dụng hoặc có thể mở rộng. Ví dụ: nếu bạn muốn thiết kế một thiết bị mạng như bộ định tuyến, hãy đảm bảo bo mạch có Ethernet PHY hoặc nó có thể được mở rộng thông qua, giả sử, đầu nối HSMC, v.v.

Bảng thường đi kèm với một tài liệu tham khảo tốt, hướng dẫn sử dụng và thiết kế. Nghiên cứu chúng.

Đọc sách

Bạn sẽ cần phải đọc sách. Trong trường hợp của tôi, tôi không có bạn bè nào biết thiết kế kỹ thuật số và trang web này cũng không hữu ích lắm vì một điều đơn giản - tôi thậm chí còn không biết cách diễn đạt câu hỏi của mình. Tất cả những gì tôi có thể nghĩ ra giống như "Uhm, các bạn, có một điều dcfifo và tôi đã nghe một vài điều về những thách thức vượt qua miền đồng hồ, đó là gì và tại sao thiết kế của tôi không hoạt động?".

Cá nhân tôi bắt đầu với những điều này:

Các nhà cung cấp đồ họa có rất nhiều sách dạy nấu ăn với các thực hành tốt nhất. Nghiên cứu chúng cùng với các thiết kế tham khảo. Đây là một từ Altera, ví dụ.

Trở lại với những câu hỏi cụ thể hơn

Trong khi bạn xem qua các cuốn sách của mình, mô phỏng một thiết kế, nháy một số đèn LED trên bảng phát triển của bạn, rất có thể, bạn sẽ có rất nhiều câu hỏi. Hãy chắc chắn rằng bạn không thấy câu trả lời cho những người ở trang tiếp theo của cuốn sách hoặc trực tuyến (tức là trong diễn đàn dành riêng cho Lattice) trước khi hỏi họ ở đây.


Cảm ơn rất nhiều cho câu trả lời chi tiết này, nó thực sự giúp tôi thấy làm thế nào tôi có thể xử lý. Thật không may, tôi không có bất kỳ người bạn nào có thể giúp tôi. Nhưng bạn đã cứu tôi khỏi rất nhiều rắc rối và một lần nữa cảm ơn rất nhiều !!!!
Anila

5
Câu trả lời tuyệt vời.
Assad Ebrahim

Trở lại trường học, chúng tôi đã học C ++ trước khi chúng tôi học VHDL. Đã có rất nhiều khó khăn để hiểu nó nhưng điểm khi mọi thứ được nhấp là khi tôi hiểu rằng mọi thứ xảy ra trong thời gian thực và song song (song song, không đồng bộ như nodejs). Phát triển phần mềm theo một dòng tuần tự, nhưng trong HDL, mọi thứ xảy ra cùng một lúc (hầu hết thời gian). Nếu bạn có một cái gì đó như "x = 1; y = 2; y = x; x = y", ở SW, ở cuối y sẽ bằng 1, trong HDL, bạn có điều kiện cuộc đua vì cả x và y sẽ cố gắng thay đổi lẫn nhau cùng một lúc. Chỉ cần nhớ điều này và cuộc sống có thể dễ dàng hơn cho bạn.
PGT

@PGT Bạn sẽ kỳ vọng giá trị của y sẽ là giá trị khác 1 nếu 'y' có thể truy cập được đối với nhiều tiến trình chạy trên một lõi đơn hoặc nhiều lõi, có thể áp đặt thẩm quyền của nó lên một quy trình yếu hơn.
Adithya

1

Để thay thế, bạn có thể sử dụng một số kỹ thuật tổng hợp cấp cao như Vivado HLS của Xilinx và giải pháp OpenCL của Altera. Có lẽ điều này sẽ làm giảm bớt đường cong của bạn để học các ngôn ngữ mô tả phần cứng, xem xét nền tảng phần mềm của bạn.


-1

Đầu tiên tìm hiểu cơ bản về thiết kế kỹ thuật số. Máy Mealy / Moore, logic tổ hợp, bảng chân lý, bản đồ karnaugh, v.v. Bắt đầu tạo một thiết kế đơn giản trong sơ đồ (bộ đếm 7 đoạn) và sau đó tìm hiểu HDL. Ở Châu Âu VHDL được sử dụng, trong Verilog Hoa Kỳ. Cuối cùng thời gian là rất quan trọng, hãy lưu ý rằng các tín hiệu có độ trễ là thành phần tức thời và nhiệt độ phụ thuộc và mọi tín hiệu có độ trễ khác.

Sách để đọc: http://www.amazon.com/Advified-FPGA-Design-Arch architecture-Imcellenceation / dp / 0470054379

Kiến thức cú pháp ngôn ngữ hoàn hảo là để sau này, trước tiên hãy hiểu thiết kế kỹ thuật số và các vấn đề.


Ở Châu Âu VHDL được sử dụng, trong Verilog Hoa Kỳ. Không đúng chút nào ...
Matt Young

Thật vậy, tôi đã học Verilog và tôi đến từ Vương quốc Anh. Đó cũng là ngôn ngữ được dạy trong một trong những mô-đun tôi đã làm ở uni (cũng ở Anh).
Tom Carpenter
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.