Làm thế nào để có được một thiết kế bộ xử lý trên FPGA


20

Gần đây tôi đã đi một hành trình dài của thiết kế logic tự dạy. Sản phẩm cuối cùng của nó là CPU 16 bit chức năng hoạt động chính xác như được thiết kế trong một trình giả lập . Bây giờ tôi mới bắt đầu xem xét khả năng đưa nó vào silicon bằng công nghệ đồ họa. Tôi biết rằng tôi sẽ phải điều chỉnh rất nhiều trong lĩnh vực đầu vào / đầu ra (thế giới thực khác với môi trường mô phỏng) và đã phát hiện ra rằng tôi đã thiết kế hoàn toàn trong một chương trình không xuất danh sách mạng hoặc mã HDL Vì vậy, tất cả những gì tôi thực sự có là một sơ đồ.

Nhưng, giả sử rằng bằng cách nào đó tôi đã đạt đến điểm mà tôi có mã netlist hoặc mã HDL trong thiết kế của mình, bước tiếp theo của tôi để đưa nó vào silicon là gì? Cho đến nay, những gì tôi đã đọc có vẻ như là giải pháp của tôi, nhưng nhìn vào các trang web Xilinx và Altera khiến đầu óc tôi quay cuồng. Có phải tôi đang sủa sai cây? Về cơ bản, tôi đang tìm kiếm một mô tả tiếng Anh đơn giản về bước tiếp theo dành cho một anh chàng với sơ đồ chức năng của CPU. Khi tôi biết phải đi theo hướng nào, tôi có thể bẻ khóa sách và tìm ra tất cả những gì tôi cần biết về cách đến đó. Cũng là một lưu ý, tôi đang dùng Mac OS X nhưng tôi có hộp XP của Window mà tôi có thể cắm nếu tôi thực sự phải làm.


Chương trình bạn đã làm thiết kế của bạn trong? Có thể có bên chuyển đổi bên thứ 3 ra khỏi đó.
Sói Connor

Câu trả lời:


17

Chúc mừng thiết kế CPU của bạn. Vâng, FPGA chắc chắn là bước tiếp theo của bạn. Nhưng bạn không rõ lắm những gì làm cho đầu bạn quay cuồng. Tôi đoán đó là số lượng lớn các thiết bị khác nhau được cung cấp. Bạn cũng không nói bạn đang sử dụng trình giả lập nào.
Khi bạn tổng hợp một thiết kế, bộ tổng hợp sẽ cung cấp cho bạn một báo cáo về các tài nguyên được sử dụng , như số lượng cổng và RAM. Điều này sẽ cung cấp cho bạn một ý tưởng những phần phù hợp cho thiết kế của bạn. Hãy chắc chắn rằng bạn có đủ khoảng không . Chọn một phần có thêm RAM , bạn sẽ cần thực hiện các chương trình trên CPU của mình.

chỉnh sửa (nhận xét của bạn)
Bạn cần một hệ thống phát triển cho một nhà sản xuất cụ thể. AlteraXilinx là những người chơi lớn và cả hai đều có những tín đồ của họ. Cái nào bạn chọn không quan trọng, cả hai đều có đủ các phần khác nhau để đáp ứng nhu cầu của bạn.
Nếu bạn chọn Xilinx, nó có Phần mềm thiết kế ISE WebPACK , miễn phí (tải xuống lớn ở mức 3,4 GB). Những hạn chế so với các phiên bản nâng cao hơn của phần mềm không nên làm phiền bạn vào lúc này.
Tiếp theo bạn cần một ban phát triển. Bạn cần phải có một ý tưởng về những gì bạn sẽ cần để chọn một. Nếu bạn đi Xilinx tôi sẽ chọn một Spartan, có thể là Spartan-6, Virtex đã là IMO quá cao cấp. Vẫn còn rất nhiều lựa chọn tuyệt vời, chủ yếu là khác nhau trong các tính năng bổ sung trên bảng. Bạn sẽ muốn một bảng với nhiều hơn một vài công tắc và đèn LED. Tôi sẽ tìm kiếm một đầu nối bàn phím và một mô-đun hiển thị.
Xilinx có một số bo mạch và đối với Xilinx FPGA cũng có Digilent , Avnet , Xess và nhiều loại khác.

Vì vậy, so sánh một số bảng (giá cũng sẽ đóng một phần, tôi đoán vậy) và tải xuống phần mềm phát triển cho FPGA mà bạn dự định sử dụng. Tổng hợp thiết kế của bạn để xác minh rằng nó sẽ phù hợp với FPGA đã chọn, và sau đó bạn đã sẵn sàng để mua một bo mạch xung quanh FPGA này.

Tôi quên nói một chút về các GPU. Một FPGA về cơ bản là một tập hợp lớn các cổng với các kết nối có thể lập trình giữa chúng, do đó bạn có thể tạo ra hầu hết mọi chức năng / hệ thống logic với chúng. Qua nhiều thế hệ, các GPU trở nên tiên tiến hơn và giờ đây đã tối ưu hóa các khối để tạo ra các chức năng hiệu quả như RAM. Bộ tổng hợp phần mềm phát triển của bạn tạo sơ đồ kết nối giữa các cổng. Điều này không được lưu trữ vĩnh viễn trong FPGA, nhưng phải được tải khi bật nguồn từ bộ nhớ Flash cấu hình bên ngoài. Đó là nơi thiết kế của bạn sẽ được lưu trữ. Giống như bất kỳ bộ nhớ Flash nào khác, nó có thể bị xóa và ghi lại rất nhiều lần.


Tôi đã sử dụng Logisim, một công cụ tuyệt vời cho sơ đồ, nhưng thiếu một phương pháp xuất ra bất cứ thứ gì trừ hình ảnh (png, jpeg, v.v.). Trên những nhầm lẫn mà tôi có, một phần là vấn đề về hàng loạt thiết bị, nhưng tôi cũng không tìm thấy tài nguyên giải thích các vấn đề cơ bản và cơ bản. Nếu tôi đặt CPU của mình ở đó, làm thế nào để giao diện với thế giới bên ngoài? Tôi cần thiết bị gì? Tôi có thể lập trình lại FPGA nhiều lần không? v.v ... v.v ... Nó thực sự chỉ là một sự thiếu quen thuộc hoàn toàn với chủ đề này. Tôi đoán tôi cần một người hướng dẫn, nhưng đừng tìm ở đâu cả.
Rory O'Hare

2
Câu hỏi của bạn, theo thứ tự: 1) Giao diện đồ họa với thế giới bên ngoài thông qua các chân I / O. Sự khác biệt là bạn có thể chọn các chân, không giống như các chip chuyên dụng. 2) Bạn có thể bắt đầu với bộ khởi động, bộ phát triển hoặc tương tự. Điều này sẽ có FPGA, một số đầu nối cho I / O và nguồn điện trên tàu. Hầu hết cũng bao gồm các lập trình viên; nếu một người không quên lấy một cái. 3) Có, bạn có thể lập trình lại FPGA. Chương trình được lưu trữ trên chip trong thực chất là một thanh ghi thay đổi khổng lồ. Khi khởi động, một máy trạng thái chuyên dụng hoặc nguồn bên ngoài sẽ tải nó vào chip.
Mike DeSimone

9

Tôi không quen thuộc với các công cụ của Xilinx, nhưng tôi với Altera, vì vậy tôi sẽ kể cho bạn nghe về các công cụ của họ. Xilinx và những người khác không nên quá khác biệt.

Phiên bản

Điều đầu tiên bạn sẽ cần làm là học Verilog . Điều này sẽ khiến bạn đau đầu vì Verilog (và VHDL hơi giống nhau) lần đầu tiên được thiết kế dưới dạng ngôn ngữ mô phỏng và nhiều cấu trúc (như #5có nghĩa là "chờ 5 bước thời gian", bước thời gian thường là nano giây). Vì vậy, có rất nhiều hạn chế mà bạn phải ghi nhớ để làm cho mã Verilog của bạn có thể tổng hợp được , tức là có thể biên dịch thành một dòng bit cho một FPGA.

Tuy nhiên, cú sốc lớn nhất là những gì bạn viết trong Verilog (và VHDL) là hành vi bạn mong đợi từ hệ thống và trình biên dịch đưa ra logic thích hợp từ mô tả của bạn. Nếu bạn không cẩn thận, bạn có thể nhận được rất nhiều lỗi khó chịu từ việc này.

Ví dụ, một flip-flop D trông giống như:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Phần này mô tả cách DFF hoạt động và trình biên dịch phải phân tích nó và tìm ra bạn muốn có DFF. Các @(...)được gọi là một danh sách nhạy cảm , đó là một danh sách các tín hiệu kích hoạt một tái thẩm định của khối mã; do đó, trong khối này, Qchỉ thay đổi nếu có cạnh tăng trên RESEThoặc CLK(đây là cho thiết lập lại hoạt động ở mức cao). Nếu bạn quên một cái gì đó trong danh sách độ nhạy (cần chứa tất cả các biến ở phía bên phải mà không có bất kỳ posedgehoặc negedgesửa đổi nào cho khối logic tổ hợp), trình biên dịch sẽ tổng hợp các chốt khi cần thay vì gọi lỗi. Thật điên rồ, nhưng nó là như vậy, bởi vì Verilog ban đầu là một ngôn ngữ mô phỏng ẩn (và do đó không yêu cầu) chi tiết triển khai. VHDL là như nhau nhưng dài dòng hơn nhiều.

Cuối cùng, một phiên bản mới của Verilog có tên SystemVerilog đã được phát hành vài năm trước, giúp việc viết mã tổng hợp dễ dàng hơn nhiều . Nếu có thể, hãy học ngôn ngữ này, vì Xilinx ISE và Altera Quartus II đều hỗ trợ nó. Vấn đề chính là thiếu tài liệu tham khảo tốt.

Phiên bản SystemVerilog của DFF sẽ dọn sạch một vài điều nhỏ:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Lưu ý rằng các tín hiệu trong danh sách độ nhạy được phân tách bằng dấu phẩy. Điều này là do orđã gây nhầm lẫn vì andkhông thể làm việc ở đó. Cũng lưu ý việc thay thế 1'b0(một đơn 0bit) với '0(một biểu tượng mà mở rộng tới tuy nhiên nhiều 0bit là cần thiết dựa trên những gì nó đang được giao nhiệm vụ; nhiều linh hoạt hơn với các module tham số). Cuối cùng, lưu ý thay thế always(có thể được sử dụng cho bất cứ điều gì; logic tổ hợp, chốt và dép xỏ ngón) với always_ffyêu cầu nội dung tổng hợp thành flip-flop. Ngoài ra còn có một always_combloại bỏ danh sách độ nhạy, vì nó chỉ tìm ra độ nhạy từ đầu vào đến khối.

Phần mềm thiết kế của Altera được gọi là Quartus II và bạn sẽ tìm kiếm Phiên bản Web . (Các phiên bản đăng ký khá đắt và chỉ cần cho các mô hình FPGA nhanh nhất hoặc gần đây nhất.)

Điều đáng buồn là tôi đã không tìm thấy một cuốn sách hay về chủ đề này. Những gì tôi đã học được tôi có được bằng cách ghép các thứ lại với nhau từ nhiều nguồn, chẳng hạn như các cuốn sách Verilog không làm tốt công việc cho bạn biết cái gì có thể tổng hợp và cái gì không, và mã ví dụ. Quartus II có lệnh "insert template" chèn mã mẫu cho một số cấu trúc phổ biến, từ D flip-flop đến các máy trạng thái.

Phần cứng demo

Khi bạn đã triển khai bộ xử lý của mình trong Verilog, bạn cần xây dựng nó. Hiện tại, hãy để Quartus chọn chip (bạn phải chọn gia đình; tôi muốn giới thiệu Cyclone IV) và sơ đồ chân. Một khi nó sinh học, bạn sẽ biết bạn cần bao nhiêu chip. Nó sẽ cho bạn biết có bao nhiêu phần tử logic, flip flop, bit RAM, v.v. bạn đã sử dụng. Hãy chắc chắn rằng bạn không quá 50% cho bất kỳ ai trong số đó; nếu là bạn, hãy nhìn vào con chip mà trình biên dịch đã chọn và chọn thủ công con chip lớn hơn (về phần tử logic) tiếp theo có ít nhất nhiều chân và lặp lại cho đến khi bạn sử dụng dưới 50%.

Sau đó, đi mua sắm cho một bảng demo có chip ít nhất là lớn như cái cuối cùng bạn đã xây dựng. Kiểm tra xem nó có các thiết bị ngoại vi và / hoặc I / O mà bạn cần. Không có gì lạ khi xây dựng một thẻ con gái cắm vào một đầu nối mở rộng để cung cấp bất kỳ phần cứng bị thiếu nào.

Bây giờ bạn đã chọn phần cứng của mình, hãy tìm ra sơ đồ chân thực và sử dụng Công cụ lập kế hoạch để đặt tín hiệu đúng vào các chân phải. Bảng demo sẽ có hướng dẫn người dùng cho bạn biết chân nào được nối với thiết bị hoặc chân kết nối nào trên bảng demo.

Khi bạn đã thiết lập sơ đồ chân, hãy xây dựng lại để nó sử dụng các chân bạn muốn. Hãy nhớ rằng một số tín hiệu như đồng hồ hệ thống sẽ cần các chân đầu vào chuyên dụng (để chúng định tuyến thẳng đến các PLL bên trong).

Sử dụng lập trình viên để tải thiết kế của bạn trực tiếp vào FPGA (thanh ghi thay đổi mà tôi đã đề cập một lúc trước). Bây giờ bạn đang trong chu trình gỡ lỗi chỉnh sửa-biên dịch chạy quen thuộc. Đánh cho đến khi nó hoạt động.

Khi nó hoạt động, bạn có thể sử dụng lập trình viên để tải mã vào thiết bị cấu hình trên bo mạch để chương trình của bạn sẽ tải và chạy khi bật nguồn.

Điều này là khá dài, và tôi hy vọng nó đã giúp một số. Có rất nhiều điều để học hỏi; nó không giống như học một ngôn ngữ lập trình mới cũng giống như học một mô hình lập trình mới, ví dụ như chuyển từ ngôn ngữ thủ tục sang ngôn ngữ chức năng. Verilog là một ngôn ngữ đồng thời; hầu hết các mã luôn luôn thực thi.

Chúc may mắn!


Tuyệt vời, điều này rất hữu ích. Chỉ để kiểm tra một điều, tôi đã nghe nói về chụp sơ đồ. Đó có phải là một sự thay thế khả thi cho việc học Verilog không? Tôi sẽ học nó nếu tôi phải, nhưng nếu nó không cần thiết 100% thì tôi không muốn thêm nó vào danh sách những thứ tôi cần phải tìm ra. Cảm ơn nhiều.
Rory O'Hare

Thành thật mà nói, không thực sự. Một vấn đề lớn là bạn rất tự hào về chương trình chụp sơ đồ: nếu nó lấy sơ đồ của bạn và tạo Verilog không chính xác, bạn có thể làm gì? Trong khi đó việc viết Verilog sẽ cung cấp cho bạn quyền hạn cần thiết để sửa tất cả các lỗi. Tuy nhiên, lý do lớn là có những thứ mà sơ đồ thu thập sẽ không bao giờ thực hiện được như Verilog: Các mô-đun được tham số hóa và phân tách và hợp nhất bus là những thứ ngay lập tức nhảy vào tâm trí.
Mike DeSimone

1
Có công cụ nào có thể biến ngôn ngữ "mô tả phần cứng" hơn một chút thành Verilog hoặc VHDL không (ví dụ: nếu tôi muốn net Z trở thành một flip flop có đầu vào dữ liệu là sự kết hợp của A, B và C, được đặt lại không đồng bộ trong khi C và D là đúng, thật tuyệt khi có thể nói điều gì đó giống như Z:= A & (B # C); Z.ar = C & D;mà không phải lo lắng về danh sách độ nhạy và như vậy).
supercat

Altera Quartus cho phép bạn nhập thiết kế của mình dưới dạng sơ đồ hoặc AHDL (phiên bản VHDL của Altera) hoặc bất kỳ kết hợp nào của chúng, có thể bao gồm các HDL khác. (đã lỗi thời, tôi chủ yếu sử dụng mục nhập sơ đồ cho các dự án CPLD và FPGA của mình, với một chút AHDL.)
Peter Bennett

Rõ ràng, AHDL không phải là một phiên bản của VHDL. Cả VHDL và Verilog đều là ngôn ngữ suy luận , trong đó mã của bạn mô tả hành vi của mạch mong muốn và trình biên dịch phải suy ra việc thực hiện từ mô tả hành vi đó. Đây là một di sản của thực tế là cả hai đều bắt đầu như ngôn ngữ mô phỏng và được sử dụng lại để tổng hợp. AHDL là ngôn ngữ khai báo , trong đó bạn khai báo các nguyên hàm (ví dụ: flip-flop, bảng chân lý) và cách chúng được kết nối, do đó trình biên dịch không phải đoán. AHDL có từ những năm 80 và gần với ABEL hơn nhiều.
Mike DeSimone

5

Vâng, gần như chắc chắn là giải pháp của bạn!

Bạn gần như chắc chắn sẽ cần sử dụng một trong các ngôn ngữ mô tả phần cứng hoặc nhập lại sơ đồ của bạn vào một công cụ khác. Tôi khuyên bạn nên chống lại cách tiếp cận sơ đồ như

  1. các nhà cung cấp công cụ FPGA không thực sự hỗ trợ họ tốt
  2. Nó không di động

Khi bạn đã viết HDL, miễn là bạn không chèn trực tiếp mọi thứ từ thư viện nhà cung cấp bằng cách sử dụng các "trình hướng dẫn IP" khác nhau hoặc bằng cách dán trực tiếp vào các thành phần từ thư viện của họ, bạn sẽ có mã mà bạn có thể chuyển sang các chip khác một cách công bằng dễ dàng (nhiều hơn so với ví dụ như nhúng C IME nhúng)

Ngoài ra, bạn có môi trường kiểm tra và xác nhận tốt hơn nhiều vì bạn có thể viết các bài kiểm tra "hiểu" chức năng của bạn và có thể kiểm tra kết quả cho bạn, thay vì bạn nhìn chằm chằm vào các dạng sóng để xem liệu tất cả có ổn không.

2 HDL lớn là VHDL và Verilog. Bạn có thể muốn đọc câu trả lời này về cách chúng khác nhau ...

VHDL hay Verilog?

Tôi cũng nói rằng MyHDL cũng đáng xem nếu bạn đã biết Python - mang đến cho bạn khả năng xác minh rất lớn, nhưng vẫn là hầu hết các điều khiển cấp thấp mà HDL "bình thường" mang lại.

Khi bạn chọn một HDL, và sau đó làm cho nó hoạt động (một lần nữa, xin lỗi!) Trong một mô phỏng, bạn sẽ ở trạng thái mà bạn có thể đẩy nó qua các công cụ của nhà cung cấp và tìm hiểu phần lớn của nhiệm vụ - một khi nó mô phỏng một cách chính xác, luôn có nhiều nỗ lực hơn bạn nghĩ để tổng hợp nó :)

Nếu bạn kết hôn với sơ đồ và có thể có giấy phép, LabviewFPGA có thể phù hợp với bạn.


3

Nhận bản sao Tạo mẫu nhanh của Hệ thống Kỹ thuật số của Hamblen et al:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Nó chủ yếu sử dụng VHDL, mà tôi thích Verilog hơn.

Nó bao gồm CPU 8 bit rất đơn giản, uP3, được tôi triển khai trên phần cứng Altera FLEX 10K của riêng tôi vài năm trước, sử dụng phiên bản trước của cuốn sách. Tôi sẽ chuyển nó sang bảng Cyclone II $ 25 này khi tôi nhận được PCB "bảng mặt trước" của mình. Nó cũng bao gồm bộ xử lý MIPS và Altera NIOS II. Bạn có thể làm việc thông qua các bài tập uP3 trong cuốn sách với các công cụ Altera Quartus II miễn phí, viết lại mã CPU của bạn trong VHDL và để nó hoạt động trên bảng Cyclone II. Ngoài ra, Quartus II có mục nhập sơ đồ, và bạn sẽ có thể nhập sơ đồ của mình trực tiếp, mô phỏng nó và chạy nó trên Cyclone II.


1

Nếu khó khăn là một đường cong học tập dốc với các kỹ năng công cụ, thì hãy đi theo con đường dễ nhất. Actel (nay là microsemi) có Libero , gói công cụ đồ họa không cần đọc và rất dễ bắt đầu sử dụng: ngay sau khi bạn cài đặt xong. Bạn thực sự có thể tạo sơ đồ ở đó bằng tay và chỉ với vài cú nhấp chuột đã được tải lên FPGA vật lý, các màn hình trên đường thực hiện nó rất tự giải thích.


0

Nếu bạn chọn học HDL, nơi bạn có thể ảnh hưởng đến ngôn ngữ nào tốt hơn. Ở châu Âu, VHDL phổ biến hơn. Ở Mỹ, Verilog phổ biến hơn, ngoại trừ ngành công nghiệp quốc phòng là VHDL. (Bộ quốc phòng Hoa Kỳ ban đầu tạo ra VHDL) Điều đó chỉ có nghĩa là những người ở gần bạn có thể giúp đỡ tốt hơn bằng ngôn ngữ này hay ngôn ngữ khác. Nhưng nếu bạn đang tìm kiếm sự giúp đỡ trực tuyến, thì điều đó có thể không liên quan.

Các cuốn sách khác cần xem xét là Tạo mẫu nhanh cho các hệ thống kỹ thuật số: Phiên bản SOPC đề cập đến các bảng Altera DE1 và DE2. Hiện đã có một số máy tính khác nhau được chuyển đến DE1 và DE2, để cung cấp cho bạn ý tưởng về cách chúng hoạt động. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), v.v. được chuyển đến bảng này để xem ví dụ.

Nếu bạn đi Xilinx, có hai cuốn sách tôi đang đọc ngay bây giờ. Tạo mẫu bằng bản đồ mẫu bằng các ví dụ Verilog: Phiên bản Xilinx Spartan-3 Bản mẫu của bản đồ bằng VHDL Ví dụ: Phiên bản Xilinx Spartan-3 Mặc dù tôi không biết một bảng cụ thể nào để giới thiệu với chúng. Tôi rất hào hứng về một hội đồng sắp ra mắt, Arcade Arcade nhưng tôi quên nếu nó sẽ có Xilinx hay thứ gì khác.


0

Tìm thấy biến thể này đang phát triển hơn nữa Logisim, bây giờ được gọi là Logisim Evolution. Họ đã triển khai một tính năng để xuất sang VHDL từ sơ đồ của mạch logic được xây dựng trong logisim.

Nó có thể được tìm thấy ở đây: https://github.com/reds-heig/logisim-evolution

Biết câu hỏi này là cũ, nhưng nó đã giúp tôi một đống, và hy vọng nó sẽ giúp người khác.

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.