Cách thực hiện bộ nhớ ánh xạ IO


8

Tôi đang mô tả một hệ thống trong VHDL. Hệ thống này đã chứa bộ xử lý, bộ điều khiển DDR SDRAM và bộ điều khiển VGA. VGA đọc các pixel từ SDRAM (đã được xác thực và chứng minh trong FPGA).

Mặc dù VGA và SDRAM đã liên lạc với nhau, tôi vẫn cần thực hiện kết nối giữa bộ xử lý và SDRAM. Cuối cùng, thứ tôi dự định có là một bộ xử lý rút ra bộ đệm khung được lưu trữ trong SDRAM. Sau đó, một lần lật trang xảy ra và VGA bắt đầu tìm nạp hình ảnh mới được bộ xử lý vẽ.

Để hướng dẫn VGA tìm nạp từ vị trí mới, tôi muốn thông báo cho bộ điều khiển VGA (sử dụng bộ nhớ ánh xạ io) địa chỉ mới của hình ảnh mới. Một chiến lược đơn giản mà tôi nghĩ là đặt một mux và xác minh xem phạm vi địa chỉ có nằm trong các thanh ghi của bộ điều khiển VGA hay trong dải địa chỉ của bộ đệm hay không. Ngoài ra, tôi có cần quan tâm đến các miền đồng hồ khác nhau không? Nếu có, những vấn đề có thể tôi nên quan tâm?

Ví dụ, đôi khi trong quá khứ tôi đã thấy mã từ x86 viết (sử dụng lệnh outb) và hướng dẫn tiếp theo là một inb đến cùng và / hoặc một vị trí liên quan. Trong trường hợp này, tôi có cần sửa đổi logic bộ xử lý để trì hoãn các hoạt động đó không? Nếu có, có bao nhiêu trường hợp để thực hiện? Có bao nhiêu giao diện để quan tâm?

Ngoài ra, khi khởi động, bộ đệm được sử dụng như thế nào nếu tất cả các mục không hợp lệ? Tôi tin rằng có một hình ảnh ROM với mã khởi động. Nó cũng có thể tồn tại một RAM cục bộ tạm thời cho các bài viết được tạo bởi mã được lưu trữ trong ROM (hướng dẫn sw)?

Tiếp tục: Tôi cần thông tin về cách triển khai mạch phân cấp bộ nhớ: bộ nhớ cache, bộ nhớ ánh xạ io, TLB, bộ nhớ ảo, v.v. Và làm thế nào tất cả những thứ này giao tiếp với nhau. Tôi biết cách triển khai cache và TLB chẳng hạn. Nhưng tôi không chắc chắn về cách kết nối chúng lại với nhau. Tôi chỉ có thể sử dụng một cái gì đó hoạt động (như ý tưởng mux). Nhưng tôi muốn làm theo các thiết kế được thành lập trong ngành công nghiệp.

Những gì tôi đã nghiên cứu: - cách chạy mips - kiến ​​trúc máy tính (Patterson) - Hướng dẫn sử dụng MIPS - Hướng dẫn của ARM - Hướng dẫn của Intel

Nhưng không ai giải thích chi tiết.

Nếu có nhiều cách để thực hiện, chỉ cho tôi một cách mà bạn biết, xin vui lòng. Ngay cả khi đó là mã nguồn hoặc sơ đồ khối. Một lần nữa, tôi không cần giải thích về cách thức hoạt động bên trong. Tôi chỉ cần biết các giao diện giữa các mô-đun.

Cảm ơn tất cả


Xấu hổ vì câu hỏi này không được chú ý. Bạn có thể xây dựng một chút? Chia sẻ một số mã của bạn? Giao diện cụ thể?
Dzarda

Chắc chắn rồi! Đây là giao diện sdram: link . Nó là một giao diện đơn giản với sự hỗ trợ cho ba khách hàng. Máy khách đầu tiên (client0) được ưu tiên hơn các máy khách khác. Những người khác được chọn bởi vòng tròn. Khách hàng chỉ cần cung cấp địa chỉ ban đầu, có bao nhiêu byte để đọc hoặc ghi và bộ đệm trong đó bộ điều khiển sdram tìm nạp hoặc ghi.
hdhzero

@Dzarda, đây là giao diện của VGA: vga . Nó được đính kèm dưới dạng client0 trong sdram, vì vậy việc đọc lên VGA là ưu tiên.
hdhzero

Đây là giao diện của bộ xử lý : bộ xử lý . Bộ xử lý là một vấn đề 2 VLIW (một dự án của tôi, với bộ hướng dẫn tùy chỉnh). Mặc dù các tên xuất hiện dưới dạng dcache và icache, nhưng nó chỉ được kết nối với một số ram khối được đính kèm để xác minh trong FPGA.
hdhzero

Rất thú vị. Muốn trả lời câu hỏi của chính bạn kể từ khi được 11 tháng?
lm317

Câu trả lời:



2

Sau tất cả thời gian này, tôi không tìm thấy bất cứ điều gì chi tiết về chủ đề này. Tôi quyết định chỉ viết mã một cái gì đó sẽ hoạt động và quên đi cách mà ngành công nghiệp làm. Điều này là sau khi đọc một số tài liệu về dự án xe buýt Wishbone nói rằng trong FPGA họ sử dụng một loạt các bộ ghép kênh để tạo các tuyến giữa các mô-đun.

Lời khuyên của tôi cho những ai đang thử một cái gì đó tương tự trong FPGA: chỉ cần làm một cái gì đó hoạt động. Tôi có thể sai, nhưng đơn giản là không có thông tin chi tiết xung quanh về cách làm loại công cụ này.

Trước hết, tôi đã chấp nhận thực tế của mình: Tôi là một anh chàng đồ họa, thường bị giới hạn bởi xung nhịp 50 MHz. Tôi cũng không dự kiến ​​một hệ thống để giao tiếp với bo mạch chủ hoặc PCI hoặc bất cứ điều gì. Đó là một SoC đơn giản và tất cả các giao diện vật lý mà tôi cần (bàn phím, chuột, VGA, SDRAM, v.v.) đều ở đó, sẵn sàng cho tôi sử dụng thông qua các bài tập pin (tất nhiên, tôi vẫn phải thực hiện logic trong VHDL).

Nói cách khác: Tôi chỉ cần quan tâm đến VHDL vì các công cụ vật lý đã được thực hiện bởi các chàng trai Altera / Xilinx / YourVendorHere.

Tôi sẽ giải thích ngắn gọn về cách tôi đã làm:

  • Tôi đã không thực hiện một chiếc xe buýt. Lúc đầu tôi muốn sử dụng xe buýt vì đó là cách nó được thực hiện nói chung. Nhưng sự thật là một chiếc xe buýt chỉ hữu ích nếu bạn định cắm các mô-đun và đây không phải là trường hợp của tôi (vui lòng sửa lại cho tôi nếu tôi sai). Vì vậy, cuối cùng tôi chỉ sử dụng một loạt các bộ ghép kênh để ánh xạ các địa chỉ.

  • Đối với các thanh ghi trạng thái / điều khiển / dữ liệu trong các mô-đun, tôi quyết định sử dụng một 'giao thức' đơn giản mà bạn có thể nghĩ là bắt tay / bỏ phiếu: trong một vòng lặp tôi tiếp tục đọc thanh ghi cho đến khi nó mang lại giá trị tôi mong đợi, sau đó tôi thực hiện thao tác Tôi muốn.

  • Tôi không biết làm thế nào các anh chàng ARM và Intel làm công việc của họ, nhưng ở đây tôi chỉ cần thêm một ROM và RAM (cả hai khối ram) cho mã bootstrap. Nó là đơn giản và nó hoạt động.

  • Giao diện giữa bộ xử lý và bộ đệm / tlb / mmu như sau: cache, tlb và mmu không tự hành động. Nếu có lỗi, đó là bộ xử lý phải hướng dẫn họ lấy dữ liệu cần thiết.

Có rất nhiều chi tiết mà tôi không biết nên giải thích điều gì hay không. Nếu bất kỳ ai trong số các bạn cần thông tin chi tiết về cách tôi đã làm, chỉ cần gửi thư cho tôi: hdhzero @ gmail. Tôi sẽ rất vui khi nhận được bất cứ điều gì ở đây trên stack hoặc trong email của tôi.

Tôi cũng sẽ để ở đây một số liên kết giúp tôi: http://www.st.ewi.tudelft.nl/~gemund/Publications/michel_bsc.pdf http://amir-shenodua.blogspot.com.br/2012/ 06 / đơn giản-quản lý bộ nhớ-với-vhdl.html

Tôi cũng đề xuất cuốn sách sau, có một số chương mô tả cách người ta có thể giao tiếp với bộ xử lý với các mô đun IO: http://www.amazon.com/FPGA-Prototyping-VHDL-Examples-Spartan-3/dp/0470185317

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.