Thông báo

Collapse
No announcement yet.

Hỏi : Tạo clock tần số thấp cho FPGA

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

  • Hỏi : Tạo clock tần số thấp cho FPGA

    Xin chào các bạn

    Mình hiện đang học FPGA. Mình đang cần lấy mẫu tín hiệu ở tần số thấp, chỉ 6KHz. Mà PLL của FPGA có sẵn toàn hàng khủng tính bằng chục MHz. Vậy ta nên làm cách nào để tạo được clock 6KHz một cách ổn định ?

    Theo mình đọc trên diễn đàn thì thấy clock rất quan trọng, ko thể xem thường được, nên mình post câu hỏi cho chắc, vì ở đây có nhiều anh chị em đã có kinh nghiệm. Mình ko muốn xảy ra tình trạng mạch chạy ổn định do xung clock ko tốt.

    Mình xin cám ơn.

  • #2
    Bạn sẽ làm gì với clock 6kHz này?

    Comment


    • #3
      Mình có viết ở câu hỏi mà chắc là bạn mod ko để ý. Mình đang cần lấy mẫu tín hiệu ở tần số 6KHz.

      Hiện tại thì mình cứ dùng counter như cách thông thường, nhưng nếu bạn mod có cách nào hay hơn thì chỉ cho mình nhé.

      Cũng nói thêm là vì mình chỉ làm 1 phần, nên nguồn tài nguyên clock của mình chỉ có 1 clock từ PLL tần số 250Mhz fixed. Các PLL khác mình ko được phép đụng vào.

      hix, mà với giới hạn như mình nói thì chắc chỉ còn cách đếm xung

      Comment


      • #4
        Nguyên văn bởi klong19 Xem bài viết
        Mình có viết ở câu hỏi mà chắc là bạn mod ko để ý. Mình đang cần lấy mẫu tín hiệu ở tần số 6KHz.

        Hiện tại thì mình cứ dùng counter như cách thông thường, nhưng nếu bạn mod có cách nào hay hơn thì chỉ cho mình nhé.

        Cũng nói thêm là vì mình chỉ làm 1 phần, nên nguồn tài nguyên clock của mình chỉ có 1 clock từ PLL tần số 250Mhz fixed. Các PLL khác mình ko được phép đụng vào.

        hix, mà với giới hạn như mình nói thì chắc chỉ còn cách đếm xung
        Ý là clock này bạn output ra ngoài hay dùng nó để chạy 1 mạch logic trên? Bạn phải dùng counter thôi. PLL không chia nổi, và kHz thì hình như nằm ngoài vùng "phủ sóng" của PLL.

        Bạn cứ chia nó ra rồi dùng bình thường, xem nó có báo WARNING gì ko? Tần số quá thấp nên mình nghĩ ok thôi, không cần lo lắng quá.

        Comment


        • #5
          Cám ơn mod nhé

          Comment


          • #6
            Chào bạn Ldong19,

            Các PLL có thể tạo ra các tín hiệu đồng hồ có jitter cỡ khoảng 10/20ps. Giả sử như tín hiệu đồng hồ của bạn là 2 GHz (chu kỳ là 500 ps) thì jitter đã chiếm đến 4% cycle rồi. Vì thế tín hiệu đồng hồ rất quan trọng, và phải tạo ra một cách đặc biệt. Trong trường hợp của bạn tần số có 6KHz, thì dù jitter có là 1ns cũng chẳng là cái gì cả. Cái này giống như việc công nghệ 20nm cần có thiết bị 10 tỉ, nhưng công nghệ 1um có khi chỉ cần thiết bị 100 triệu là đủ.

            Comment


            • #7
              Cám ơn bạn Rommeo.
              Nhưng nói như bạn Romeo thì clock sẽ ảnh hưởng tới cái biến đếm của mình. Từ clock 250M, muốn trích ra clock 6K, mình phải đếm tới 41666. Mỗi chu kỳ của clock 250M sẽ ảnh hưởng cái biến đếm của mình 1 ít, đếm tới 41666 thì nó có bị gì ko?

              Comment


              • #8
                Nguyên văn bởi klong19 Xem bài viết
                Cám ơn Mod nhé.

                Thực ra thì ngay từ đầu mình chỉ nghĩ duy nhất tới 1 cách là counter. Nhưng dạo diễn đàn thấy bài của bạn viết về nhật ký FPGA, nhấn mạnh xung clock quan trọng, phải được để riêng ra chứ ko thì sẽ ko ổn định. Sau đó lại thấy bạn Romeo nói ở đâu đó là "ở VN dạy cho sv tạo xung clock bằng counter là sai ngay bước cơ bản của kỹ thuật". Lại ngẫm thấy nếu mà counter được thì chẳng mắc mớ gì mà Altera phải bỏ tới 4 cái PLL vào con Cyclone IV. Cho nên đi hỏi cho nó chắc.

                Xài counter, compile cũng ko có critical warning nào liên quan tới clock
                Hồi nãy post cái reply này mà nhầm bên thread bên kia

                Comment


                • #9
                  Nguyên văn bởi klong19 Xem bài viết
                  Cám ơn bạn Rommeo.
                  Nhưng nói như bạn Romeo thì clock sẽ ảnh hưởng tới cái biến đếm của mình. Từ clock 250M, muốn trích ra clock 6K, mình phải đếm tới 41666. Mỗi chu kỳ của clock 250M sẽ ảnh hưởng cái biến đếm của mình 1 ít, đếm tới 41666 thì nó có bị gì ko?
                  Chào bạn Klong19,

                  Có lẽ bạn hơi nhầm lẫn về khái niệm Jitter. Jitter là sai số ngẫu nhiên của chu kỳ xung đồng hồ. Vì là sai số ngẫu nhiên nên cho dù bạn đếm đến 41666 thì jitter cũng không tăng lên được. Theo như cách diễn đạt của bạn thì có lẽ bạn muốn nói đến sai số về tần số đồng hồ. Ví dụ như tần số đồng hồ của bạn trên lý thuyết là 250M nhưng có thể là 250.5M. Cái này sửa lại cũng dễ thôi. Bạn chỉ cần mạch calibration là đủ. Bạn không nên dùng một số cố định là 41666 để đếm. Thay vào đó, con số này lấy ra từ mode register mà bạn có thể lập trình được. Để calibration, bạn dùng một máy đo tần số, đo tần số đồng hồ tạo ra và điều chỉnh con số này trên mode register cho phù hợp. Tần số ra có 6 KHz thì dùng mấy cái máy vớ vẩn cũng đã thừa sức.

                  Comment


                  • #10
                    Cám ơn bạn Romeo.
                    Calibration đúng là 1 ý tưởng mềm dẻo
                    gud night bạn, hình như bạn ở xứ "tạp chủng quốc", giờ này là ngủ khì rồi

                    Comment


                    • #11
                      Nguyên văn bởi klong19 Xem bài viết
                      Hồi nãy post cái reply này mà nhầm bên thread bên kia
                      Vì clock của bạn quá chậm nên không cần dùng PLL.

                      Mình và Romel đều có lý do để nói rằng không nên tạo clock bằng counter. (Thật ra bạn muốn làm gì làm, không ai cấm, miễn là hiểu được hậu quả )

                      PLL thường dùng để tạo clock có mối liên hệ về pha. Nếu bạn tạo bằng counter, mấy cái clock tạo ra lệch pha tùm lum do các routing delay, sẽ rất khổ khi tính thời gian (timing analysis), nhiều khi không tính được luôn.

                      Bạn implement đi rồi sau khi chạy fitter, bạn vô chip-planner coi nó đặt đường clock của bạn như thế nào.

                      Comment


                      • #12
                        chào bạn Klong lâu lắm rồi mình không lên diễn đàn, vấn đề chia tần số 6kHz dùng counter là rất dễ, bạn thực hiện chia như sau: (tần số hệ thống - 1)/ tần số ngỏ ra = kết quả. trong chương trình thì bạn viết như sau :
                        if(counter == kết quả)begin counter = 0; out = !out; end
                        else begin counter = counter +1; out = out; end
                        chúc bạn thành công, nếu không hiểu gì thì hỏi mình qua mail.

                        Comment


                        • #13
                          Nguyên văn bởi huutien Xem bài viết
                          chào bạn Klong lâu lắm rồi mình không lên diễn đàn, vấn đề chia tần số 6kHz dùng counter là rất dễ, bạn thực hiện chia như sau: (tần số hệ thống - 1)/ tần số ngỏ ra = kết quả. trong chương trình thì bạn viết như sau :
                          if(counter == kết quả)begin counter = 0; out = !out; end
                          else begin counter = counter +1; out = out; end
                          chúc bạn thành công, nếu không hiểu gì thì hỏi mình qua mail.
                          Cám ơn bạn nhiệt tình trả lời, nhưng mình đâu có hỏi chia tần số bằng counter thế nào ? hehe, mình hỏi là ngoài cách đỏ ra thì có cách nào tạo ra clock 6Khz ổn định không. Nhưng các bạn có kinh nghiệm khác đã nói mình biết là 6Khz quá nhỏ, counter cũng đủ ổn định rồi, không cần gì to tát cả.

                          Cảm ơn bạn nhiều nhé

                          Comment


                          • #14
                            hihi. có lẽ là do mình đọc bài của bạn chưa kĩ , tìm hiểu về FPGA mình thích lắm, mình có thể viết theo ý của mình không ràng buộc như các loại MCU khác. Dạo này mình đang tìm hiểu viết cho thằng GLCD128x64 mà thấy khó quá, bạn đã làm cái này chưa thì mình cùng trao đổi.

                            Comment


                            • #15
                              Nguyên văn bởi huutien Xem bài viết
                              hihi. có lẽ là do mình đọc bài của bạn chưa kĩ , tìm hiểu về FPGA mình thích lắm, mình có thể viết theo ý của mình không ràng buộc như các loại MCU khác. Dạo này mình đang tìm hiểu viết cho thằng GLCD128x64 mà thấy khó quá, bạn đã làm cái này chưa thì mình cùng trao đổi.
                              Bạn tìm datasheet, dựa vào đó làm theo protocol để đọc ghi vào con controller, thông thường là làm bằng statemachine. Làm cái này quan trọng nhất là thiết lập các timing-constraint ở các chân IO.

                              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