Nguyên văn bởi tonyvandinh
Xem bài viết
Thông báo
Collapse
No announcement yet.
Làm cách nào để nhân chia lẻ cho xung clock?
Collapse
X
-
Nguyên văn bởi jefflieu Xem bài viếtKo rõ anh Tony du`ng gì để tạo clock 7/6 (Fout=6/7 Fin) ... A post code lên được ko?
Jeff hoặc bạn nào có ý tưởng để nghiên cứu thì email cho tôi. Tôi sẽ email code để nghiên cứu. Hy vọng mọi người thông cảm cho.
Comment
-
Dành cho bạn nào muốn hiểu PLL được thiết kế như thế nào trong IC:
+analog PLL: http://www.cppsim.com/PLL_Lectures/analog_pll.pdf
+digital PLL: http://www.cppsim.com/PLL_Lectures/digital_pll.pdf
Một trang web tham khảo hữu ích : http://www.cppsim.com/index.html
Mình cũng đã giới thiệu ở luồng analog IC design (#24) tuy nhiên mình thấy chủ đề này thích hợp hơn. Hy vọng đây là thông tin có ích.
Thân mến.
Comment
-
Nhân, Chia căn bản
Để tiếp tục trên vấn đề nhân/chia xung clock, tôi xin trở lại căn bản của nhân và chia.
Giả sử như muốn nhân một số nào đó (a) với một số khác (b) thì có 2 cách:
1) a + a + ... + a (làm b lần)
2) b + b + ... + b (làm a lần)
Xung clock có sự tuần tự cho nên nếu nhân với một số nào đó thì giống như số đó cộng liên tiếp cho mỗi nhịp của xung clock.
Tương tự như nhân, nếu chia thì trừ đi. Có một ngoại lệ trong phần cứng là xung clock ra không thể nhanh hơn xung clock vào cho nên số chia phải lớn hơn 1 (hoăc là số nhân phải nhỏ hơn 1). Trong trường hợp chia cho 2.33333 (7/3) thì cũng giống như nhân 3 chia 7.
Giả thử như bắt đầu số còn (R) là 0
0 + 3 = 3 (<7)
3 + 3 = 6 (<7)
6 + 3 = 9 (>7) - 7 = 2 (*)
2 + 3 = 5 (<7)
5 + 3 = 8 (>7) - 7 = 1 (*)
1 + 3 = 4 (<7)
4 + 3 = 7 (==7) - 7 = 0 (*)
trở lại từ đầu. Như vậy là cứ 7 xung clock đi vào thì sẽ co 3 xung clock đi ra cho nên pseudo code có thể viết như sau:
R : số còn; N : Tử số (3); D : mẫu số (7)
R = 0
Đầu :
R = R + N;
Nếu R >= D thì R = R - D và xung clock ra = 1
Nếu không, xung clock ra = 0
Tiếp tục lại từ Đầu cho mỗi nhịp của xung clock.
Đường vô
* Clock
* Reset
* N
* D
Đường ra
* Clock_out
Các bạn viết thử nhe. Chúc thành công.
Comment
-
Uh, cách làm này Jeff mới biết, trước giờ làm NCO thì max chỉ được fout=fin/2 ...
Chỉ khác chút là NCO dùng modulo n = 2^b (b=số bít của bộ đếm) ... nên tự động bộ đếm overflow mà không cần làm gì ... làm kiểu a Tony thì là dùng modulo lẻ ...
Nhưng chung quy thì xem ra fout<=0.5 fin mới đẹp được.... Tại sao vậy nhỉ?
Comment
-
Nguyên văn bởi tonyvandinh Xem bài viết
0 + 3 = 3 (<7)
3 + 3 = 6 (<7)
6 + 3 = 9 (>7) - 7 = 2 (*)
2 + 3 = 5 (<7)
5 + 3 = 8 (>7) - 7 = 1 (*)
1 + 3 = 4 (<7)
4 + 3 = 7 (==7) - 7 = 0 (*). (một sai lầm cơ bản về số học)
Chúc anh cuối tuần vui vẻ!
Thân mến.
@Jeff: bạn nghĩ thế nào về khái niệm xung "đẹp". Giả sử mình chỉ quan tâm tới leakage và thiết kế hoạt động dựa trên sườn xung (edge) thì mình nghĩ là vẫn được vì khi tần số giảm thì leakage giảm (đạt yêu cầu) và STA vẫn đảm bảo vì STA đã đảm bảo cho tần số cao nhất rồi.
Còn khi cần xung thật đẹp với duty cycle ~50% thì như anh Tony đã nói, phải nhân tần số xung lên sau đó chia lẻ để được xung lẻ có tần số cao sau đó chia chẵn (over flow như bạn nói) chắc chắn xung sẽ đẹp hơn (anh tony cũng đưa hình mô phỏng minh họa rồi) Tuy nhiên bạn lại tốn tài nguyên phần cứng để thực hiện việc nhân.
Comment
-
Duty cycle
Thật sự chu kỳ Xấu/Đẹp và ảnh hưởng của nó tùy theo là dùng như thế nào. Có hai trường hợp để suy đoán:
1) Source synchronous timing (kô biết tiếng Việt gọi là gì). Trong trường hợp này thì khi gửi tin tức data và xung clock được gửi đi đôi với nhau. Nếu chỉ dùng một cạnh của xung clock thì duty cycle hay sự thay đổi đột ngột của xung clock không có ảnh hưởng gì đến sự chính xác của thu nhận tin tức. Nếu khối nhận dùng 2 cạnh của xung clock thì duty cycle sẽ có một vài ảnh hưởng về thời gian.
2) Communication - Chỉ có data được modulate (xung clock ẩn trong data). Khối nhận phải dò trên biến động của data để lấy ra xung clock ẩn đó. Ví dụ chơi bắn súng trên những vật di động, bạn phải quan sát tốc độ và sự thay đổi của sự di động để đoán trước và bắn cho chính xác. Sự theo dõi, theo đuổi này trên data communication thường được hiện thực bằng Phase Lock Loop (PLL, thiết kế dùng phản hồi để giữ sự liên hệ qua những cạnh của data). Vì vậy sự thay đổi đột ngột của data vì xung clock thay đổi sẽ làm khó khăn cho PLL. PLL chi có hiệu nghiệm khi sự thay đổi từ từ. Giống như bắn súng, vật di động càng chậm càng dễ bắn trúng chừng đó. Khi độ thay đổi nhanh thì PLL chỉ có hiệu nghiệm nếu khoảng cách thay đổi ngắn.
Comment
-
Nguyên văn bởi hithere123 Xem bài viết
Thân mến.
@Jeff: bạn nghĩ thế nào về khái niệm xung "đẹp". Giả sử mình chỉ quan tâm tới leakage và thiết kế hoạt động dựa trên sườn xung (edge) thì mình nghĩ là vẫn được vì khi tần số giảm thì leakage giảm (đạt yêu cầu) và STA vẫn đảm bảo vì STA đã đảm bảo cho tần số cao nhất rồi.
Còn khi cần xung thật đẹp với duty cycle ~50% thì như anh Tony đã nói, phải nhân tần số xung lên sau đó chia lẻ để được xung lẻ có tần số cao sau đó chia chẵn (over flow như bạn nói) chắc chắn xung sẽ đẹp hơn (anh tony cũng đưa hình mô phỏng minh họa rồi) Tuy nhiên bạn lại tốn tài nguyên phần cứng để thực hiện việc nhân.
Lúc đó mình nghĩ tới việc tạo ra 1 clock "hoàn mỹ". Nên mình hiểu đẹp là duty cycle 50% với jitter nhỏ.
Như anh Tony nói, cần xung đẹp thì tùy trường hợp, khi dùng double-data-rate sẽ bị ảnh hưởng. Một khi rõ việc mình cần làm thì không có sao.
Còn Jitter lớn sẽ ảnh hưởng khi dùng clock này cho ADC chẳng hạn, các mẫu lấy được sẽ bị nhiễu, không tốt trong hệ thống communication. Một lần nữa một khi rõ việc mình cần làm thì không có sao hết àh.
Về mặt ASIC thì mình ko rành khi FF bị clock như vậy có ảnh hưởng gì không.
Comment
-
Nguyên văn bởi jefflieu Xem bài viếtVề mặt ASIC thì mình ko rành khi FF bị clock như vậy có ảnh hưởng gì không.
Comment
-
Nguyên văn bởi tonyvandinh Xem bài viếtKhông có ảnh hưởng gì hết. Chỉ khó hơn khi dùng STA (Static Timing Analysis) để xác định thời gian. Tốt hơn hết thì chỉ nên dùng xung ra này cho chân enable của MUX FF. Tác dụng giống như khi dùng làm xung clock cho FF. Trong trường hợp dùng cho enable của MUX FF, chân clock vẫn nối vô xung nguồn và khi dùng STA thì constraint như multi-cycle path.
Nếu vậy thì không được vì giả sử clock-mới ở mức cao nhiều hơn 1 chu kì của clock cũ thì FF sẽ được bật (enabled) trong 2 chu kì và sẽ không đúng so với khi nối clock-mới vào chân clock của FF.
Chỉ làm được khi thêm 1 khối logic edge-detect ?
if(rising_edge(clk)) then
if(new_clk='1' and new_clk_d='0') then
ff_en <= '1'; else
ff_en <= '0';
end if
end if
Comment
-
Nguyên văn bởi jefflieu Xem bài viếtJeff không hiểu "MUX FF" ... Đoán ý anh là clock của FF vẫn dùng clock ban đầu còn clock-mới thì nối vào Enable của FF.
Nếu vậy thì không được vì giả sử clock-mới ở mức cao nhiều hơn 1 chu kì của clock cũ thì FF sẽ được bật (enabled) trong 2 chu kì và sẽ không đúng so với khi nối clock-mới vào chân clock của FF.
Chỉ làm được khi thêm 1 khối logic edge-detect ?
if(rising_edge(clk)) then
if(new_clk='1' and new_clk_d='0') then
ff_en <= '1'; else
ff_en <= '0';
end if
end if
Code:process (clk) begin if (rising_edge(clk)) then if (enable) q <= d; end if end if end process
Comment
-
Xin phép chỉnh lại thiết kế của anh Tony một chút
Nguyên văn bởi tonyvandinh Xem bài viếtR : số còn; N : Tử số (3); D : mẫu số (7)
R = 0
Đầu :
R = R + N;
Nếu R >= D thì R = R - D và xung clock ra = 1
Nếu không, xung clock ra = 0
Tiếp tục lại từ Đầu cho mỗi nhịp của xung clock.
Đường vô
* Clock
* Reset
* N
* D
Đường ra
* Clock_out
Nếu không, enable = 0
Thêm một mạch "clock gate" có đầu vào là clock, enable nối vào enable ở trên và đầu ra là clock ra.
Tuy nhiên "clock gate" ở đây không đơn thuần là một mạch AND đơn giản mặc dù chức năng là mạch AND. Vì với mạch logic AND rất dễ tạo glitch ở xung ra và xung sẽ không "đẹp".
Ý tưởng là như mạch anh mô tả ở trên nhưng có lợi hơn một chút vì có thể điều khiển được "strong" của xung ra. Nhưng yêu cầu phải thiết kế thêm cell "clock gate" nếu trong standard cell không có.
Thân mến.
Comment
-
Xử lý bằng ngôn ngữ Verilog
Gần đây có một số bạn đã học về Verilog và cũng để làm sáng tỏ câu hỏi của Jeff, tôi sẽ dùng Verilog để xử lý cái chia lẻ của xung clock.
Trong bài trước, tôi có đề ra đường vào và đường ra, cho nên sẽ bắt đầu từ đây
Đường vô
* Clock
* Reset
* N
* D
Đường ra
* Clock_out
Code:module FD (clock, reset, N, D, clock_out);
Code:input clock; input reset; input [3:0] N, D; // Tôi chọn 4 bits, nhưng các bạn có thể thay đổi tùy ý output clock_out; reg [4:0] R; // R phải lớn hơn N và D một bit reg int_clk_out; // Dùng tạm thời cho clock_out
Tôi chọn async reset trong trường hợp này. Nếu muốn sync reset thì xóa reset ra khỏi sensitivity list.
Code:always @ (posedge clk or reset) if (reset) begin int_clk_out = 0; R = 0; end else begin R = R + N; if (R > D) begin R = R - D; int_clk_out = 1; end else int_clk_out = 0; end
Code:assign clock_out = int_clk_out & (!clk); endmodule
Code:reg [3:0] cnt; always @ (posedge clk or reset) if (reset) begin cnt = 0; end else if (int_clk_out) begin cnt = cnt + 1; end assign clock_out = cnt[3];
Comment
-
Nguyên văn bởi hithere123 Xem bài viếtThêm một mạch "clock gate" có đầu vào là clock, enable nối vào enable ở trên và đầu ra là clock ra.
Tuy nhiên "clock gate" ở đây không đơn thuần là một mạch AND đơn giản mặc dù chức năng là mạch AND. Vì với mạch logic AND rất dễ tạo glitch ở xung ra và xung sẽ không "đẹp".
Thân mến.. Coi bài viết ở trên nhe
Comment
-
Nguyên văn bởi tonyvandinh Xem bài viếtAND với !clk thì sẽ không có glitch. Coi bài viết ở trên nhe
Anh lùi phase 180 để mask glitch.
Nhưng nếu clock đến mạch int_clk_out sớm hơn clock đến mạch AND thì vẫn còn khả năng có glitch. Anh xem lại thử.
Thân mến.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi davidcopyTheo như A.I phân tích thì mạch này ghim điện DC ngõ ra, tụ 250VDC thì ngõ vào khoảng 220VDC là ok....
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 11:45 -
-
bởi davidcopybạn cần hỗ trợ gì sao không viết ra hoặc chụp hình kèm chú thích...
-
Channel: Hỗ trợ học tập
Hôm qua, 10:13 -
-
Trả lời cho Sạc bình acquy 30ahbởi dinhthuong80Đình Thường xin phép nhờ chủ đề này để chia sẻ về 1 bộ sạc bình. Xin được nói trước là không có ý xoi mói tìm lỗi, chỉ nhằm mục đích chia sẻ về vấn đề kĩ thuật cho ai quan tâm thôi ạ!
Chúng ta không nên dùng bộ sạc...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 10:05 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamBình thường là vậy. Họ không hiểu thì họ là người không bình thường.
Bác không có việc làm, vẽ chuyện kiếm niềm vui, không vui thì buồn vậy....-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 10:03 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi dinhthuong80Dạ, bình thường sẽ là vậy, ai cũng hiểu nhưng cháu vẫn rất sợ sẽ có người cố tình không hiểu và lí luận soi mói ấy bác ạ! Vì rõ ràng nó có tan... vài phân tử trong nước rồi mới thôi tan!!!!...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 09:33 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamAL là kim loại không tan trong nước là đúng vì khi tiếp xúc với nước sẽ tạo thành Al (OH)3 ngăn không cho phản ứng tiếp tục và phản ứng dừng lại ngay....
-
Channel: Tâm tình dân kỹ thuật
07-03-2025, 17:57 -
-
bởi mèomướpDạ chú nên dùng bếp gas ạ. Chơi với điện mùa hè cẩn thận khách chạy hết ấy ạ. Hôm nọ đi học về cháu thấy chị học trên cháu 1 lớp nhà chị ấy có điện 3 pha ấy ạ, nên chắc là lắp được nhưng tốn xiền ạ...
-
Channel: Điện tử gia dụng
07-03-2025, 16:10 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi dinhthuong80Có lẽ nào vì bác nói chưa rõ nên họ bắt bẻ chỗ
Bởi cháu nhớ ngày xưa họ nói nhôm là kim loại khá mạnh, nếu là nguyên chất nó sẽ phản ướng với nước tạo ra nhôm hidroxit có màu trắng xốp sệt như xà phòng...-
Channel: Tâm tình dân kỹ thuật
07-03-2025, 14:52 -
-
bởi gameba1993cảm ơn bạn, mình hộ kinh doanh gia đình thì xin điện 3 pha có được không nhỉ....
-
Channel: Điện tử gia dụng
07-03-2025, 14:21 -
-
bởi mèomướpDạ điện 1 pha dân dụng tối đa phụ thuộc công tơ điện, át tô mát, dây dẫn. Ví dụ công tơ 50A, át 30A, dây dẫn 8mm2 thì tối đa là 30A từ đó tính được công suất max khoảng 6kw. Của chú 10kw thì có lẽ điện 3 pha sẽ ổn hơn ạ...
-
Channel: Điện tử gia dụng
07-03-2025, 13:59 -
Comment