Tại sao không SRAM cho FPGA trong xử lý hình ảnh?


7

Tôi đang bắt đầu với mã hóa VHDL và tôi đã thực hiện một số xử lý hình ảnh cơ bản trên bảng phát triển của mình.

Tôi đã nhận thấy rằng hầu hết các bảng phát triển FPGA thường sử dụng DRAM (SDRAM, DDRAM) làm RAM. Ví dụ: tôi đang sử dụng bảng dev của TERASIC và nó sử dụng DRAM. Mặc dù bộ nhớ DRAM dường như rẻ hơn SRAM (RAM tĩnh), nhưng theo quan điểm của tôi, nó không được tối ưu hóa để xử lý hình ảnh, hãy để tôi giải thích: Dữ liệu DRAM được truy cập theo khối, dữ liệu SRAM có thể được truy cập (địa chỉ) theo byte (byte) hoặc từng chữ, hoặc 36 bit mỗi lần, bất cứ điều gì). Tính năng này phù hợp hơn với xử lý hình ảnh, ví dụ: bộ lọc trung bình đơn giản trong đó pixel là giá trị trung bình của hàng xóm, nói

Pix(x,y) = (Pix(x-1,y-1) + Pix(x,y-1) + Pix(x+1,y-1) + Pix(x-1,y) + Pix(x,y) 
           + Pix(x+1,y) + Pix(x-1,y+1) + Pix(x,y+1) + Pix(x+1,y+1))/9

rất khó thực hiện với DRAM, bạn cần có bộ đệm bên trong ít nhất hai dòng để ghi nhớ các dòng y-1y(thực hiện xử lý trên y+1dòng). Ngoài ra, có vẻ như phải mất một khoảng thời gian rất lớn để Quartus thực hiện quá trình xử lý đơn giản này (Tôi đang sử dụng 2ports FIFO).

Nếu bảng đã sử dụng SRAM như IS61LPS25632A từ ISSI chẳng hạn, việc xử lý sẽ đơn giản vì địa chỉ của pixel có thể là ví dụ

ByteAdress <= x + (LINEWIDTH*y);

Từ quan điểm phần cứng, với 9 chu kỳ bộ nhớ đọc / ghi, quá trình được thực hiện cho một pix và với một số thủ thuật xử lý song song, tôi có thể cải thiện điều này. Vậy thì, sự hiểu biết của tôi có đúng không? Nếu không, lỗi ở đâu?


BIÊN TẬP:

Sử dụng RAM RAM bên trong không phải là một lựa chọn đối với tôi vì không có đủ bộ nhớ trong thiết bị FPGA mà tôi sử dụng (Cyclone III) và tôi không biết việc trả tiền cho một bộ công cụ phát triển đắt tiền hơn chỉ để có thêm RAM bên trong FPGA là hợp lý .

Câu hỏi của tôi liên quan nhiều hơn đến hiệu quả mã. Nói ví dụ rằng một người có 8 MB SRAM. Theo quan điểm của tôi, mã được tạo ra với loại RAM này sẽ hiệu quả hơn (tốc độ và bộ đệm) trong trường hợp xử lý 2D (như xử lý hình ảnh) vì truy cập ngẫu nhiên thực sự rất phù hợp để truy cập dữ liệu có độ lệch (lớn) giữa sau đó, như trên tuyên bố này:

ByteAdress <= x + (LINEWIDTH*y);

Sắp xếp lại thông tin là tốn thời gian. Tôi sử dụng máy ảnh xuất ra các pixel dữ liệu theo tuần tự, từng dòng một. Tôi chỉ có thể lưu trữ những dữ liệu này trên hai cổng thành phần RAM FIFO được xây dựng với DRAM. Tôi thậm chí không thể thực hiện một chuyển vị đơn giản trước khi lưu trữ dữ liệu với điều này. Đáng ngạc nhiên là tôi đã không tìm thấy bất kỳ mã nào trên web liên quan đến vấn đề 2D này.


Có lẽ bạn có thể đề cập nếu bạn có một vấn đề về độ trễ. tức là bạn có thể có độ trễ 1 khung hình trong luồng video của mình hay không? Nếu bạn có thể, thì mọi thứ mà @DaveTweed nói sẽ phù hợp với bạn và là điển hình cho xử lý video thời gian thực.
giữ chỗ

Câu trả lời:


6

Không có lý do cơ bản tại sao không. SRAM đồng bộ thực sự là truy cập ngẫu nhiên, khá rẻ và dễ giao tiếp.

Nhược điểm của nó là chiếm một khoảng khá hẹp giữa BlockRam trên chip (không nhỏ hơn nhiều, miễn phí cho đến khi nó buộc bạn phải chọn chip lớn hơn, song song và linh hoạt hơn) và DRAM bên ngoài (dung lượng lưu trữ lớn với giá SSRAM có thể 't trận đấu).

Vì vậy, tối đa 0,5 hoặc 1 MB, SSRAM bên ngoài là không cần thiết và trên 8 MB hoặc 16 MB (số có thể thay đổi tùy theo ngân sách và giá hiện tại của bạn!), SSRAM trở nên đủ đắt để DRAM tiếp quản bất chấp giới hạn của nó. Sau đó - nếu bạn cần truy cập ngẫu nhiên - bạn phải tổ chức lại ồ ạt tính toán để đọc các đoạn (cụm hoặc trang) từ DRAM vào BlockRam, nơi bạn có thể xử lý nhanh trước khi viết lại cụm, v.v.

Nhưng nếu bạn có vai trò cho SSRAM trong cửa sổ đó, hãy thực hiện nó. Tôi đã thêm các bảng SSRAM làm tại nhà đơn giản để tăng cường các nền tảng thương mại FPGA khi cần thiết.


3

SDRAM thực sự là một lựa chọn rất tốt để xử lý hình ảnh, bởi vì cả dung lượng và băng thông (đặc biệt là với DDR) đều được cải thiện so với SRAM. Được kết hợp với việc sử dụng SRAM trên chip của FPGA làm bộ đệm dòng, nó cho phép khá nhiều tính toán toàn ảnh (bao gồm cả FIR FIR mà bạn đưa ra làm ví dụ) để được xử lý theo điểm mà bạn có thể xử lý một pixel trên mỗi đồng hồ. Nếu bạn đang làm việc với video HD trong thời gian thực, có thể làm điều này là điều cần thiết.

Đừng giảm giá tầm quan trọng của năng lực. Cảm biến hình ảnh hiện đại nằm trong phạm vi nhiều megapixel cho video và 10 megapixel cho hình ảnh tĩnh. Trong nhiều ứng dụng, cần có nhiều bộ đệm khung có 4 - 6 byte cho mỗi pixel, cho những thứ như dữ liệu hiệu chỉnh trên mỗi pixel và xử lý hình ảnh bóng bàn. Tổng bộ nhớ cần nhanh chóng vượt quá những gì có thể được thực hiện về mặt kinh tế với SRAM.

Ngay cả khi bạn chỉ quan tâm đến hình ảnh tĩnh, bộ công cụ phát triển được thiết kế để hỗ trợ phạm vi phát triển ứng dụng rộng hơn. BTW, tôi có một bảng Terasic có cả DDR SDRAM và ZBT SSRAM.


1
Vì có SSRAM DDR và ​​QĐR (2 cổng), tôi không chắc điều đó đúng với băng thông. Quan điểm về việc sử dụng RAM trên chip làm bộ lưu trữ dòng - cách sắp xếp lại mà tôi đã gợi ý - rất quan trọng để sử dụng DDR hiệu quả.
Brian Drumond

@BrianDrummond: Vâng, vấn đề về băng thông có thể là vấn đề, nhưng vấn đề năng lực thường quan trọng hơn. Xem chỉnh sửa của tôi ở trên.
Dave Tweed

không có tranh luận ở đó! Như tôi đã nói, cửa sổ nơi SSRAM thắng khá hẹp. Tôi thấy thuận tiện khi có cả SRAM và DRAM cho các mục đích khác nhau.
Brian Drumond

0

Cả SRAM và DRAM tôi nghĩ là cần thiết.

đối với mặt nạ gắng sức trên hình ảnh SRAM rất hữu ích vì tích chập. nhưng để lưu trữ kết quả của hình ảnh Dram là hiệu quả.

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.