Thông báo

Collapse
No announcement yet.

Memory Buffer for FPGA

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Memory Buffer for FPGA

    Xin chào mọi người. Hiện tại mình đang làm 1 project sử dụng FPGA của Xilinx, mình đảm nhận khối sender buffer (Hình kèm theo ở dưới). Theo bài toán thì khối này giống 1 bộ nhớ đệm giúp truyền data giữa hai miền xung clock (200MHz/ 25MHz) tức là dữ liệu từ khối formatter được truyền qua và giữ lại ở đây, sau đó truyền qua SiTCP theo tín hiệu busy của khối này. Tuy nhiên vì là người không chuyên và ko được dạy về mảng này nhiều nên kiến thức mình đọc cứ chắp vá, mình ko biết là nên dùng kỹ thuật gì (Ram or pipeline or shift reg of buffer line...). Mình nghĩ bài toán là vấn đề thường gặp với mọi người. Bác nào chuyên về mảng này nhiều cho mình ý kiến đc k? có thể là ý tưởng, cũng có thể là tài liệu mà mình cần phải đọc để giải quyết vấn đề hay là kinh nghiệm giải bài toán nào liên quan thì giúp mình vs.
    Xin cám ơn nhiều!
    Click image for larger version

Name:	vme.png
Views:	1
Size:	116.3 KB
ID:	1422453
    https://mega.co.nz/#!N8hmDSLZ!kryJ5Q...nCfe1KnT9-DTOo

  • #2
    chào bạn, theo như hình vẽ, khối sender buffer đứng giữa 2 miền clock 200MHz và 25MHz.
    Bạn cần xác định xem nguồn sinh 2 clock này có liên quan gì với nhau không? tùy sự liên hệ giữa 2 nguồn clock đó, bạn sẽ phân loại chúng về các loại
    1. Synchronous
    2. Mesochronous
    3. Plesiochronous
    4. Asynchronous
    Từ đó bạn lựa chọn kĩ thuật đồng bộ phù hợp. Bạn search tìm hiểu thêm những khái niệm này. Mình đã có kinh nghiệm thực tế với loại 4 Asynchronous thôi. Theo kinh nghiệm của mình, bài tóan của bạn qui về asynchronous FIFO loại 4 hoặc synchronous loại 1. Loại 2,3 khó implement trên FPGA. Nói chung clock domain crossing là 1 vấn đề phức tạp.
    Nhất bộ khởi xuất vạn lý hành (Lão Tử)
    A journey of a thousand miles begins with one step.

    Comment


    • #3
      Mình thấy bạn đang làm việc với FPGA & tool của Xilinx, để tiết kiệm thời gian nhất và thiết kế an tòan nhất, bạn hãy sử dụng logic core về asynchronous FIFO (nếu bạn quy bài tóan của bạn về loại này).
      Mình ko nhiều kinh nghiệm với tool Xilinx, mình chỉ search 1 core gợi ý cho bạn
      http://www.xilinx.com/support/docume...async_fifo.pdf

      Thân
      Nhất bộ khởi xuất vạn lý hành (Lão Tử)
      A journey of a thousand miles begins with one step.

      Comment


      • #4
        Cám ơn bạn jcofee đã góp ý. Đúng như bạn nói thì đây là loại 4. Tuy nhiên ở đây minh đang thắc mắc là có dùng FIFO được không? Vì mình đã từng nghiên cứu file mà bạn gửi về logic core. Tuy nhiên chắc có lẽ mình cần hiểu sâu bài toán hơn nữa... có gì mình sẽ update ý tưởng lên, hy vọng bạn theo dõi và góp ý
        Last edited by trustinlife; 17-10-2014, 17:07.

        Comment


        • #5
          chào bạn,
          vấn đề gốc bạn phân vân là "(Ram or pipeline or shift reg of buffer line...)." dùng kĩ thuật nào?

          Lựa chọn phụ thuộc vào chức năng mà khối sender buffer phải làm.
          Bạn sẽ sử dụng FIFO nếu như:
          sender buffer không tác động gì lên dữ liệu ghi vào từ phía event-data formatter (ko thay đổi giá trị, ko sắp xếp lại nội dung, ko chèn thêm, ko xóa bớt). Phía event-data formatter ghi vào tuần tự (dấu hiệu là ko có địa chỉ ô nhớ cần ghi), Phía SiTCP đọc ra tuần tự (dấu hiệu là không có địa chỉ ô nhớ cần đọc).
          Nhìn từ góc nhìn của 1 lập trình viên, mình gọi loại cấu trúc dữ liệu có đặc tính như vậy là hàng đợi - queue hay FIFO, bất chấp bạn thực hiện sender buffer bằng kĩ thuật nào, bằng phần cứng hay phần mềm. Có lẽ chữ "buffer" trong sender buffer làm bạn bối rối 1 chút, nhưng nếu functional requirement cho khối sender buffer chính xác là như mô tả, bạn có thể mạnh dạn đổi tên thành sender FIFO!

          Để thực thi 1 cấu trúc dữ liệu FIFO bằng phần cứng, về mặt chức năng mình chia FIFO = RAM (physic-design RAM hoặc flip-flop based RAM) + mạch điều khiển đọc ghi (vị trí đọc ghi và điều tiết chống tràn dữ liệu).

          Thiết kế sẽ không phức tạp nếu như việc đọc và việc ghi được điều khiển bởi cùng 1 clock, vấn đề phức tạp nảy sinh là sender buffer đứng giữa 2 miền clock, nên mình đã gợi ý về logic core asynchronous FIFO.

          Hi vọng phân tích trên giúp ích cho bạn. Thân.
          Nhất bộ khởi xuất vạn lý hành (Lão Tử)
          A journey of a thousand miles begins with one step.

          Comment


          • #6
            Cám ơn jcoffee,
            Phân tích của bạn giúp mình sáng tỏ khá nhiều. Chính xác thì sender buffer không tác động gì đến dữ liệu. Ban đầu mình nghĩ sender buffer dùng để lưu lại từng gói dữ liệu từ khối trước nó theo clock 200 sau đó truyền qua SiTCP với clock 25, tưởng tượng như từng xe tải vào kho để lấy hàng, tức xe 1 vào lấy hàng đưa cho nhà phân phối, lúc đó xe 2 đang đợi, sau khi nhà phân phối báo "not busy" thì xe 2 sẽ đưa hàng qua, lần lược như vậy hàng trong kho sẽ đươc đưa vào các xe và chuyển từ từ qua nhà pp. Có lẽ mình sai, vì dữ liệu ở đây được lấy vào liên tục dựa trên quản lý của khối Trigger manager. Hiện tại mình đang cố gắng xem lại cấu trúc hai khối event formater và channel formater của những những người khác trong nhóm để nắm được định dạng dữ liệu sau khi truyền qua sender. Chắc sau đó sẽ đi sâu vào Asyschronous FIFO- đây có lẽ là kỹ thuật mình cần.
            P/s: Kiến thức mình còn khá mập mờ, nếu có lời khuyên gì khi làm về mảng FPGA, hy vọng bạn chia sẽ. Chúc bạn luôn vui.

            Comment

            Về tác giả

            Collapse

            trustinlife Tìm hiểu thêm về trustinlife

            Bài viết mới nhất

            Collapse

            Đang tải...
            X