Bắt đầu từ đâu khi xem xét việc tạo ra GPU?


8

Tôi đã xem video này vào một ngày khác và nó khiến tôi suy nghĩ về cách đi và thiết kế một cái gì đó giống như GPU. Bạn sẽ bắt đầu từ đâu? Tôi chỉ quan tâm đến việc đọc về cách chúng hoạt động và không tạo ra một cái nào ngoài TTL (dù sao đi nữa).

Tôi biết điều này nghe giống như câu hỏi "làm thế nào để bạn tạo ra một ngôn ngữ lập trình" nhưng bất kỳ điểm khởi đầu nào cũng tốt vì tôi không biết bắt đầu tìm kiếm từ đâu.


3
Bạn có thích "đồ họa 3D tốc độ cao" hay "cách lái CRT / LCD"
Toby Jaffey

@Joby atm chỉ hiển thị một cái gì đó trên màn hình. Một hình vuông màu sẽ là tốt đẹp.
Trưởng khoa

3
Ai đó có thể giải thích cho tôi tại sao tôi đã bỏ phiếu không? Vì vậy, tôi có thể giải quyết bất kỳ vấn đề với câu hỏi.
Trưởng khoa

1
Khó khăn tôi gặp phải với câu hỏi này là có RẤT NHIỀU giữa việc tạo ra một màn hình hiển thị 80x25 đơn sắc, cái mà trước đây có thể được gọi là trình tạo hiển thị video và 'GPU' nghĩa là gì. Gợi ý mà bạn có thể muốn thực hiện một 'ngoài TTL' sẽ đưa bạn đến gần hơn với phần cuối của trình tạo màn hình 80x25 cũ.
JustJeff

@JustJeff, Ok tôi không biết họ được gọi là gì nữa, tại sao họ lại khác nhau như vậy nếu họ làm một công việc tương tự?
Trưởng khoa

Câu trả lời:


16

Điều đó giống như đi đến bài kiểm tra cuối cùng của bạn cho lớp khoa học và có câu hỏi này như câu hỏi của bạn: Mô tả vũ trụ. Hãy ngắn gọn, nhưng súc tích. Không có cách nào có thể trả lời câu hỏi đó theo bất kỳ cách thực tế nào-- vì vậy tôi sẽ trả lời một câu hỏi khác.

Các loại điều tôi cần biết trước khi thử thiết kế GPU là gì?

Theo thứ tự thời gian thô, chúng là:

  1. VHDL hoặc Verilog.
  2. FPGA (khu vực hữu ích để chơi với viết logic kỹ thuật số).
  3. Công cụ đường dẫn dữ liệu cơ bản, như của FIFO.
  4. Giao diện bus, như giao diện PCIe và DDR2 / 3
  5. Triển khai nhị phân các hàm toán học, bao gồm dấu phẩy động, v.v.
  6. Thiết kế CPU.
  7. Video giao tiếp chuẩn.
  8. Công cụ tương tự tốc độ cao (phía tương tự của kỹ thuật số tốc độ cao)
  9. PLL và các công cụ đồng hồ bán tiên tiến khác.
  10. Thiết kế PCB của mạch tốc độ cao.
  11. Điện áp thấp, thiết kế bộ chuyển đổi DC / DC hiện tại cao.
  12. Rất nhiều và rất nhiều công cụ phần mềm.
  13. Và cuối cùng, ASIC hoặc thiết kế loại chip tùy chỉnh khác.

Tôi cũng sẽ dám nói rằng bạn sẽ không tạo ra loại điều này từ các chip logic TTL. Tôi nghi ngờ rằng bạn có thể có giao diện bộ nhớ DDR2 / 3 hợp lý làm việc với các chip TTL bình thường. Sử dụng một đồ họa lớn sẽ dễ dàng hơn nhiều (nhưng không dễ).

Đi đến bước 6 có lẽ sẽ "đủ tốt để làm dịu cơn khát trí tuệ của bạn". Điều đó cũng có thể được thực hiện trong một khoảng thời gian hợp lý - khoảng một năm - để đặt làm mục tiêu ngắn hạn.

EDIT: Nếu tất cả những gì bạn muốn làm là phát ra tín hiệu video thì điều đó tương đối dễ dàng. Về bản chất, đó là một đoạn bộ nhớ được chuyển ra màn hình ở tần số 60-ish Hz. Ma quỷ chi tiết, nhưng đây là một phác thảo sơ bộ về cách làm điều này:

Bắt đầu với một số RAM cổng kép. Nó không phải là ram cổng kép thực sự, chỉ cần một số RAM mà CPU có thể đọc / ghi và mạch video của bạn có thể đọc được. Kích thước và tốc độ của RAM này sẽ phụ thuộc vào loại màn hình bạn đang lái. Cá nhân tôi sẽ sử dụng DDR2 SDRAM được kết nối với giao diện bộ nhớ của Xilinx Spartan-6 FPGA. Lõi "trình tạo giao diện bộ nhớ" (MIG) của họ giúp dễ dàng biến điều này thành RAM cổng kép.

Tiếp theo, thiết kế một mạch sẽ kiểm soát cách đọc RAM này và nhổ dữ liệu này ra một chiếc xe buýt đơn giản. Thông thường bạn chỉ cần đọc RAM tuần tự. "Xe buýt đơn giản" thực sự chỉ có vậy. Đó là một số bit có giá trị pixel trên đó - và đó là nó. Mạch này sẽ cần thực hiện thêm hai điều nữa: nó sẽ phải quay trở lại điểm bắt đầu của RAM mỗi khung hình video và nó sẽ phải "tạm dừng" đầu ra trong các giai đoạn truy xuất ngang / dọc.

Thứ ba: tạo một mạch sẽ xuất các tín hiệu điều khiển video (HSync, Vsync, v.v.) cũng như cho biết mạch trước đó khi nào cần tạm dừng và khởi động lại. Những mạch này thực sự khá dễ làm. Tìm tiêu chuẩn video phù hợp là khó hơn, imho.

Và cuối cùng: Kết nối tín hiệu điều khiển và bus dữ liệu pixel video với "một cái gì đó". Đó có thể là một màn hình LCD nhỏ màu. Nó có thể là một bộ xử lý video để xuất tín hiệu tương thích VGA. Có các bộ mã hóa NTSC / PAL sẽ nhận các tín hiệu này. Vân vân.

Nếu độ phân giải thực sự nhỏ, bạn có thể thoát khỏi việc sử dụng RAM bên trong của FPGA thay vì DDR2 SDRAM bên ngoài. Tôi nên cảnh báo bạn rằng nếu DDR2 SDRAM được sử dụng thì có lẽ bạn sẽ cần một bộ xếp hình và một số thứ khác - nhưng điều đó cũng không quá khó khăn. Nhưng với DDR2 SDRAM, bạn có thể hỗ trợ màn hình độ phân giải khá cao. Bạn cũng có thể tìm thấy các bảng phát triển đồ họa có tích hợp VGA VGA và các dạng đầu ra video khác.


Wow không phải là một nhiệm vụ ngắn. Tôi hiểu không có câu trả lời súc tích. Nhưng bạn đã cho tôi một điểm khởi đầu tốt và tôi sẽ phải làm điều này trong thời gian rảnh rỗi rất hạn chế của tôi. Nhưng nên là một kinh nghiệm thú vị.
Trưởng khoa

@Dean Hmmm ... Có BA thứ khác nhau ở đây: CPU, GPU và thứ gì đó để phát ra tín hiệu video. Thật dễ dàng để tạo ra một cái gì đó để phát ra tín hiệu video. GPU giống như một CPU được thiết kế để xử lý liên quan đến video / đồ họa: đồ họa 3 chiều, đồ họa 2 chiều, v.v. Nếu bạn chỉ muốn một cái gì đó phát ra tín hiệu video thì bạn đã thiết lập. Nếu bạn muốn đồ họa 3-D hoặc thậm chí là 2-D bán tiên tiến thì bạn sẽ cần phải xem qua danh sách của tôi.

1
Làm thế nào dễ dàng để phát ra một tín hiệu video? Tôi nghĩ rằng điều này sẽ làm cho một bước đầu tiên tốt hơn.
Trưởng khoa

@Dean Tôi đã chỉnh sửa câu trả lời của mình để bao gồm các công cụ về cách nhổ tín hiệu video.

1
Tôi đã viết một cuốn sách về đồ họa máy tính một lần (ISBN 0-471-13040-0), nhưng nó rất giới thiệu. Quay trở lại những năm 1990 khi ATI chỉ có chip Mach64 của họ và muốn tham gia vào 3D, họ đã thuê tôi làm tư vấn dạy cho họ một số khái niệm, đưa chúng đi và giúp đỡ về kiến ​​trúc. Kết quả là các chip RAGE đầu tiên. Tôi là một anh chàng đồ họa hồi đó. Hãy xem bằng sáng chế Hoa Kỳ 5097427 nếu bạn không tin tôi. Tuy nhiên, tôi nghĩ rằng bằng sáng chế nội suy bậc hai (US 5109481) quan trọng hơn nhưng ít hào nhoáng hơn. Bạn có thể nhận ra một số tên khác trên đó ;-)
Olin Lathrop

8

Racing the Beam là cái nhìn chi tiết về thiết kế và hoạt động của Atari VCS. Nó có một điều trị triệt để của Bộ điều hợp Giao diện Truyền hình.

TIA là về GPU đơn giản, thiết thực nhất.

Hiểu một hệ thống làm việc nhỏ nhưng đầy đủ có thể là một cách tốt để học một môn học mới.

Sơ đồ hoàn chỉnh có sẵn, như là một hướng dẫn kỹ thuật .


Quy tắc Atari 2600! Hầu hết các hệ thống trò chơi sử dụng phần cứng để tạo ra màn hình, nhưng 2600 thực hiện tất cả bằng phép thuật. So sánh một cái gì đó như Combat hoặc thậm chí các tiểu hành tinh với những thứ như Toyshop Trouble (Asteroid và Toyshop Trouble đều là 8K). Combat cho thấy hai vật thể đơn màu với độ phân giải 2 dòng; Toyshop Trouble hiển thị 16 đối tượng với độ phân giải một dòng và tô màu trên mỗi dòng (và không nhấp nháy). Không có phần cứng bổ sung cho Toyshop Trouble ngoài bộ chuyển đổi ngân hàng để cho phép 8k mã. Chỉ cần một số mã hóa thông minh và một số phép thuật.
supercat

Lập trình BTW, 2600 có thể tối nghĩa, nhưng một thiết kế lớp phủ video dựa trên PSOC tôi đã làm cho một khách hàng cảm thấy khá 2600-ish. Định cấu hình phần cứng trên chip để tạo một số thời gian và sử dụng mã để cung cấp dữ liệu cho nô lệ SPI để nó có thể được hiển thị dưới dạng pixel.
supercat

không thể tin được rằng tất cả các mã trò chơi phải thực thi trong thời gian truy xuất chùm tia
JustJeff

5

Nếu bạn chỉ muốn đưa một số thứ lên màn hình và nghĩ rằng bạn có thể thực sự, thực sự thích đi dây, bạn có thể nhắm đến một hệ thống đồ họa nhân vật đầu năm 1980. Nếu bạn có thể đạt thời gian cho RS-170A, bạn thậm chí có thể đẩy tín hiệu vào đầu vào AV dự phòng trên TV plasma 50 "và chuyển sang chế độ retro theo cách lớn.

Một số hệ thống ban đầu đã sử dụng CPU 8 bit của họ để trực tiếp tạo ra màn hình, ví dụ là 6507 trong Atari 2600 và Z-80 trong Timex Sinclair ZX-81. Bạn thậm chí có thể làm điều tương tự với các bộ vi điều khiển hiện đại. Ưu điểm theo cách này là phần cứng đơn giản, nhưng phần mềm thường phải ở trong trình biên dịch chương trình, và rất chính xác, và kết quả sẽ thực sự áp đảo. Có thể cho rằng 2600 phần cứng được sử dụng thêm, nhưng TIA không có nhiều phần trăm, và 6502 (tốt, 6507, thực sự) đã phải chuyển byte sang thời gian thực. Trong phương pháp này, không có chế độ video tiêu chuẩn; mọi ứng dụng sử dụng video phải được kết hợp mật thiết với nhu cầu duy trì các pixel.

Nếu bạn thực sự muốn xây dựng một cái gì đó từ TTL, mức độ phức tạp tiếp theo sẽ là hiển thị văn bản dựa trên ký tự-ROM. Điều này cho phép bạn đặt bất kỳ, trong số 256 ký tự vào bất kỳ ví dụ nào trong số 40 cột và 25 vị trí hàng. Có một vài cách để làm điều này.

Một cách - làm những gì Mô hình TRS80 tôi đã làm. Một nhóm gồm 74161 quầy với một loạt các cổng tạo ra địa chỉ video; ba địa chỉ CPU được ghép thành 12 bit của 74157s với địa chỉ video, để cung cấp địa chỉ cho RAM tĩnh 2K. Dữ liệu RAM được đệm trở lại CPU, nhưng được cung cấp không được đệm làm địa chỉ cho bộ ký tự ROM. Không có trọng tài xe buýt; nếu CPU muốn RAM video, hệ thống video đã được bật, dẫn đến hiệu ứng 'tuyết'. Địa chỉ video được trộn được kết hợp với một số dòng từ phần truy cập để làm tròn các địa chỉ thấp; đầu ra ROM ký tự được đổ vào một thanh ghi thay đổi 74166. Toàn bộ mọi thứ chạy ra khỏi sự phân chia từ một tinh thể 14,31818 MHz. Theo cách tiếp cận này, bạn có chính xác một chế độ video được triển khai hoàn toàn trong phần cứng, như 40x25 hoặc 64x16, v.v.,

Một cách khác - đào một con chip CRTC được gọi là 6845. Chúng kết hợp hầu hết bộ đếm và logic dán, và cung cấp cho bộ xử lý một giao diện thanh ghi điều khiển để bạn có thể lập trình lại một số thời gian. Các hệ thống như thế này có thể được làm cho linh hoạt hơn một chút, ví dụ, bạn có thể nhận được 40x25 và 80x25 từ cùng một phần cứng, dưới sự kiểm soát đăng ký. Nếu bạn hiểu rõ về tần số xung nhịp, bạn có thể cho phép CPU của mình truy cập miễn phí vào RAM video trong một nửa đồng hồ và truy cập trình tạo địa chỉ video trong nửa còn lại của đồng hồ, do đó không cần phải phân xử xe buýt loại bỏ hiệu ứng tuyết.

Tuy nhiên, nếu bạn muốn sử dụng các chế độ đồ họa thực sự, bạn sẽ nhanh chóng thấy rằng việc tự lăn của mình là có vấn đề. Apple 2 ban đầu đã quản lý nó, nhưng hệ thống đó có thứ gì đó giống như 110 chip MSI MSI và thậm chí còn có một số điều thú vị để giải quyết, như ánh xạ phi tuyến tính của bộ đệm video vào màn hình và bảng màu cực kỳ hạn chế , để đặt tên hai. Và Woz thường được công nhận là đã có manh mối. Vào thời điểm '2e' xuất hiện, Apple đã đưa hệ thống video vào một con chip tùy chỉnh. C-64, cùng thời gian, có khả năng đồ họa với các chip tùy chỉnh.

Vì vậy, tôi muốn nói có hai cách để làm điều đó. Một cách - lấy thùng đựng đồ cũ của bạn ra và mong muốn hiển thị văn bản một màu 80x25; một cách khác - hãy tạo cho mình một bảng đánh giá đồ họa tốt, làm toàn bộ trong VHDL và bắt đầu với màn hình hiển thị văn bản 80x25.


1

Bạn sẽ cần bắt đầu với một số nguyên tắc cơ bản về kiến ​​trúc máy tính và song song, hãy bắt đầu với thiết kế ASIC cơ bản sử dụng VHDL hoặc ngôn ngữ mô tả khác.

Khi bạn đã học được những điều cơ bản về kiến ​​trúc máy tính, tôi sẽ khuyên bạn nên mạo hiểm với đồ họa máy tính, có lẽ bắt đầu với một số dự án OpenGL đơn giản. Việc cất cánh chính ở đây sẽ là ý tưởng về kiến trúc kết xuất đồ họa .

Bước tiếp theo sẽ là cách các đường ống kết xuất này có thể được thực hiện bằng phần cứng chuyên dụng thay vì trong phần mềm.

Về mặt thực sự xây dựng GPU và kết nối nó với máy tính của bạn, tôi không nghĩ rằng điều này là khả thi đối với ngân sách của người đam mê, nhưng có thể có một cái gì đó rất cơ bản bạn có thể thử với nền tảng ARM-linux nhúng (mà để lộ một bus hệ thống) và một GPU (trong trường hợp này là GPU của bạn được viết bằng VHDL) xuất ra màn hình VGA có độ phân giải thấp như một dự án kết hợp tất cả. Điều này sẽ yêu cầu trình điều khiển bằng văn bản là tốt. Nếu bạn có thể làm điều đó, nó sẽ là kẻ giết người trong một bản lý lịch.


1

Nhìn vào sơ đồ khối cao cấp của GPU từ AMD và NVidia. Bạn có thể sẽ tìm thấy khá nhiều thông tin từ những người làm công việc nghiên cứu, những người đang thiết kế phần cứng đồ họa là nguồn mở, với trình điều khiển nguồn mở.

Sau đó, bạn cần phải nhìn vào những gì bạn muốn.

  • Đầu ra, HDMI, DVI hay VGA?
  • Biến đổi Vertex?
  • Hoạ tiết?
  • Pixel Shading?
  • Cắt tam giác và rasterization?
  • Bất kỳ kết cấu?
  • Hoạt động raster?

Nếu bạn chưa thực hiện bất kỳ chương trình nào sử dụng các tính năng GPU, đó cũng có thể là một điều tốt để biết.

Tôi nghĩ Leon cũng đóng đinh. Tôi sẽ sử dụng Verilog nếu tôi làm điều này.

Nếu bạn chỉ muốn video compsite, như trong video bạn đã đăng. Có rất nhiều ví dụ ngoài kia. Heck, nhìn vào việc thực hiện Apple II của Woz. :)


1
@Leon có để lại bình luận không? Nếu vậy tôi không thể xem nó.
Trưởng khoa

Tôi đã xóa nó. Tôi đề nghị sử dụng một FPGA để thực hiện một CPU đơn giản. Tôi đã làm điều đó vài năm trước với một thiết kế từ một cuốn sách, được viết bằng VHDL, mà tôi đã sửa đổi cho phần cứng của mình.
Leon Heller

Ahh ok sau đó là lý do tại sao tôi có thể nhìn thấy nó.
Trưởng khoa

1

Âm thanh như bạn không muốn tạo ra một GPU (theo nghĩa 3d và tạo ra tất cả những thứ đó) nhiều như một trình tạo video. Nhiều bo mạch eval có một đầu nối trên chúng cho VGA hoặc các loại màn hình khác và các dự án mẫu từ nhà sản xuất hoặc người dùng khác để hiển thị mọi thứ trên màn hình đó. Ngoài ra còn có một số bảng mạch tích hợp màn hình LCD nhưng chúng có xu hướng thuộc loại $ 300 trở lên, trong khi những bảng cơ bản có thể điều khiển màn hình tiêu chuẩn có giá 60-120 đô la.

Hầu hết các FGPA không có đủ bộ nhớ trong để làm nhiều hơn một màn hình nhỏ, nhưng sau đó nhiều bảng có bộ nhớ ngoài với dung lượng lớn hơn. Rất nhiều trong số chúng điều khiển màn hình VGA analog kỹ thuật số, ví dụ, RG và B đầy đủ hoặc tắt hoàn toàn, mặc dù một số cung cấp cho bạn hai cấp độ và bạn có thể tìm thấy một với một bộ xử lý video hoặc đầu nối cho giao diện màn hình kỹ thuật số.

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.