Thông báo

Collapse
No announcement yet.

Hàm arcsin/cos cho FPGA

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

  • Hàm arcsin/cos cho FPGA

    Chào các bạn,

    Xin update trước tình hình project của mình : các bước lấy mẫu và xuất dữ liệu qua các ngõ nối tiếp (SPI) của ADC,DAC đã tạm ok.

    Bây giờ mình lại phải xử lý một số dữ liệu, trong đó có dùng hàm Arcsin/cos (12bit).

    Lúc đầu mình khờ dại định tính xấp xỉ nó bằng Taylor rồi code, nhưng mà cuối cùng ko ổn vì Taylor hàm arcsin(x) muốn đủ chính xác cho project của mình phải cần tới cỡ x^15 lận. Bó chiếu

    Rồi mình chuyển qua tính bằng các hàm logic. Ngõ ra 12 bit, ngõ vào 12 bit, thì mỗi bit ngõ ra là 1 hàm logic của 12 ngõ vào. Mình đã thành công cách này, simulation VHDL mình viết rồi. Nhưng mà cách này tốn tài nguyên kinh khủng, 1 cái hàm hàm arcsin đã tốn hết 8% con FPGA. Làm cho vài hàm như vậy nó sẽ chiếm hết. Mà quan trọng nữa là cái hàm logic của mình trâu bò lắm, nó tính toán chắc mất thời gian.

    Vậy giờ, mình đành phải dùng Memory để nạp sẵn bảng LUT, rồi cho FPGA địa chỉ và dò giá trị cho hàm arcsin. Câu hỏi mình thắc mắc hiện giờ là :

    -Làm thế nào để nạp giá trị cho external Memory nhỉ ? Nạp thông qua các chân của FPGA hay là nó có mạch nạp riêng nhỉ ?

  • #2
    Bạn phải nạp thông qua chân của FPGA thôi.
    Sao không dùng on-chip ram, nhanh hơn. Mình nghĩ bạn chỉ cần ghi từ 0 tới pi/2 thôi, chia ra 1024 khoảng, resolution là ~0.002 rad đủ không?
    1024*12 = 12kbit. Mình nghĩ bạn cần tăng so bit của đầu ra của arsin lên thành 32 bit.

    Comment


    • #3
      hi bạn,

      bây giờ mình cần luôn cả hàm sin lẫn arcsin. Trong trường hợp này thường người ta có làm 1 cái bảng 2 chiều ko hay làm 2 cái bảng ? Mình cảm giác làm 1 bảng 2 chiều thì tiết kiệm ROM hơn nhưng ... có làm được không nhỉ ?

      Comment


      • #4
        Nguyên văn bởi klong19 Xem bài viết
        hi bạn,

        bây giờ mình cần luôn cả hàm sin lẫn arcsin. Trong trường hợp này thường người ta có làm 1 cái bảng 2 chiều ko hay làm 2 cái bảng ? Mình cảm giác làm 1 bảng 2 chiều thì tiết kiệm ROM hơn nhưng ... có làm được không nhỉ ?
        Làm bảng 1 chiều cho dễ bạn.

        Bảng 2 chiều tốn logic và thời gian để seach.
        A --> B, A là Address, B là data

        Nếu muốn lookup ngược lại, có B, tìm A --> bạn có thể dùng binary search vì bảng của bạn được xếp theo thứ tự tăng dần rồi

        Giả sử bảng có 1024 ô, Bốc đại con B512 --> so sánh với con B, nếu lớn hơn B thì bốc con B256, nhỏ hơn B thì bốc tiếp con B(512+256).... cứ thế bốc bốc bốc

        Thời gian search = log2(TableSize) = số bit của address

        Bạn thích thì làm chơi cũng dzui áh

        Comment


        • #5
          Cám ơn bạn, mình chọn làm 2 bảng vậy. Lúc nào rảnh thì mới "thích thì làm chơi" cái binary search

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X