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

  • klong19
    replied
    Nguyên văn bởi thanhchuyen@ Xem bài viết
    cho mình hỏi là mình mới học FPGA nên mình chưa năm rõ cách tình tần sồ lắm
    mình có tần số hệ thống là 2048 MHZ mình muốn chia tần số 1 hz và 10 kHZ phải chia như thế nào có ai giúp mình với ah.
    Tần số hệ thống nào mà lên đến 2048 MHz dữ vậy bạn.

    Để tạo tần số thấp hơn thì bạn đếm clock thôi. Vd bạn có 1 cái là 10Hz mà bạn muốn tạo 1Hz thì bạn đếm clock của xung 10Hz, cứ đếm tới 10 thì nhảy 1 phát, vậy là có xung 1Hz rồi. Còn đếm từ 2048MHz xuống còn 1 Hz thì hơi căng đấy. Chờ người có kn hơn chỉ bạn vậy.

    Leave a comment:


  • thanhchuyen@
    replied
    cho mình hỏi là mình mới học FPGA nên mình chưa năm rõ cách tình tần sồ lắm
    mình có tần số hệ thống là 2048 MHZ mình muốn chia tần số 1 hz và 10 kHZ phải chia như thế nào có ai giúp mình với ah.

    Leave a comment:


  • jefflieu
    replied
    Nếu bạn làm được thì nên post lên đây, đây là sân chơi lớn, khá hữu ích, mình nghĩ controller của bạn sẽ có ích cho nhiều người
    Home :: OpenCores

    Leave a comment:


  • jefflieu
    replied
    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.

    Leave a comment:


  • huutien
    replied
    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.

    Leave a comment:


  • klong19
    replied
    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é

    Leave a comment:


  • huutien
    replied
    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.

    Leave a comment:


  • jefflieu
    replied
    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.

    Leave a comment:


  • klong19
    replied
    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

    Leave a comment:


  • Rommel.de
    replied
    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.

    Leave a comment:


  • klong19
    replied
    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

    Leave a comment:


  • klong19
    replied
    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?

    Leave a comment:


  • Rommel.de
    replied
    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à đủ.

    Leave a comment:


  • klong19
    replied
    Cám ơn mod nhé

    Leave a comment:


  • jefflieu
    replied
    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á.

    Leave a 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