Ràng buộc thời gian ASIC qua SDC: Làm thế nào để xác định chính xác đồng hồ ghép kênh?


10

Giới thiệu

Đã tìm thấy nhiều thông tin, đôi khi xung đột hoặc không đầy đủ trên internet và trong một số lớp đào tạo về cách tạo các ràng buộc thời gian theo định dạng SDC một cách chính xác, tôi muốn nhờ cộng đồng EE giúp đỡ về một số cấu trúc tạo đồng hồ chung mà tôi đã gặp.

Tôi biết rằng có một số khác biệt về cách người ta sẽ thực hiện một chức năng nhất định trên ASIC hoặc FPGA (tôi đã làm việc với cả hai), nhưng tôi nghĩ nên có một cách chung, chính xác để hạn chế thời gian của một cấu trúc nhất định , không phụ thuộc vào công nghệ cơ bản - vui lòng cho tôi biết nếu tôi sai về điều đó.

Cũng có một số khác biệt giữa các công cụ khác nhau để thực hiện và phân tích thời gian của các nhà cung cấp khác nhau (mặc dù Synopsys cung cấp mã nguồn trình phân tích cú pháp SDC), nhưng tôi hy vọng rằng chúng chủ yếu là một vấn đề cú pháp có thể được tra cứu trong tài liệu.

Câu hỏi

Đây là về cấu trúc bộ ghép kênh đồng hồ sau, là một phần của mô đun clkgen , một lần nữa là một phần của thiết kế lớn hơn: Sơ đồ ghép kênh đồng hồ

Mặc dù ext_clkđầu vào được giả sử được tạo ra bên ngoài cho thiết kế (nhập qua chân đầu vào), các tín hiệu clk0clk4cũng được mô-đun clkgen tạo ra và sử dụng (xem câu hỏi về đồng hồ gợn liên quan của tôi để biết chi tiết) và có các ràng buộc đồng hồ có tên baseclkdiv4clk, tương ứng.

Câu hỏi là làm thế nào để xác định các ràng buộc sao cho bộ phân tích thời gian

  1. Xử lý cpu_clknhư một đồng hồ đa kênh có thể là một trong những đồng hồ nguồn ( fast_clkhoặc slow_clkhoặc ext_clk), tính đến độ trễ thông qua các cổng AND và OR khác nhau.
  2. Trong khi đồng thời không cắt các đường dẫn giữa các đồng hồ nguồn được sử dụng ở nơi khác trong thiết kế.

Trong khi trường hợp đơn giản nhất của bộ ghép kênh đồng hồ trên chip dường như chỉset_clock_groups yêu cầu câu lệnh SDC :

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

... trong cấu trúc đã cho, điều này phức tạp bởi thực tế là clk0(thông qua fast_clkđầu ra) và clk4(thông qua slow_clk) vẫn được sử dụng trong thiết kế, ngay cả khi cpu_clkđược cấu hình để ext_clkchỉ khi use_extđược xác nhận.

Như được mô tả ở đây , set_clock_groupslệnh như trên sẽ gây ra những điều sau đây:

Lệnh này tương đương với việc gọi set_false_path từ mỗi đồng hồ trong mỗi nhóm đến từng đồng hồ trong mỗi nhóm khác và ngược lại

... Điều đó sẽ không chính xác, vì các đồng hồ khác vẫn được sử dụng ở nơi khác.

thông tin thêm

Các use_clk0, use_clk4và các use_extđầu vào được tạo ra theo cách mà chỉ một trong số chúng là cao tại bất kỳ thời điểm nào. Mặc dù điều này có thể được sử dụng để dừng tất cả các đồng hồ nếu tất cả các use_*đầu vào thấp, trọng tâm của câu hỏi này là thuộc tính ghép kênh đồng hồ của cấu trúc này.

Các X2 dụ (một bộ đệm đơn giản) trong sơ đồ chỉ là một nơi-giữ để làm nổi bật vấn đề tự động nơi & lộ trình cụ là thường tự do nơi buffers bất cứ nơi nào (chẳng hạn như giữa and_cpu_1/zor_cpu1/in2chân). Lý tưởng nhất, các hạn chế về thời gian nên không bị ảnh hưởng bởi điều đó.


Bạn có thể thử làm cho điều này ngắn gọn hơn bằng cách thu hẹp nó thành một câu hỏi rất cụ thể, rất hẹp không? Thật khó cho tôi để hiểu đâu là thông tin quan trọng và những gì bạn thực sự sau đây.
travisbartley

@ trav1s: Tôi tái cấu trúc câu hỏi. Xin vui lòng cho tôi biết nếu bạn cần bất kỳ làm rõ.
FriendFX

Câu trả lời:


3

Xác định chia cho 1 đồng hồ trên lưới and_ * và tuyên bố chúng là độc quyền vật lý. Trình biên dịch Cadence RTL xử lý tình huống một cách chính xác bằng cách tạo 3 đường dẫn thời gian cho các thanh ghi được ghi bởi cpu_clk (mỗi đường dẫn cho một đồng hồ). Các thanh ghi được điều khiển trực tiếp bởi clk0, clk4 và clk_ext có các cung thời gian riêng.

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

Cảm ơn đề nghị của bạn. Thật không may, hiện tại tôi không thể xác minh điều này, nhưng khái niệm của bạn có vẻ khá hứa hẹn với tôi. Bạn có thể kiểm tra xem các đường dẫn giữa cast_clk, cpu_clkslow_clkvẫn đang kiểm tra (tức là không phải là một ngoại lệ do các nhóm đồng hồ độc quyền), trong khi đồng thời bị hạn chế bởi đồng hồ đầu vào tương ứng của họ? Cuối cùng, tôi đang tìm kiếm một câu trả lời có thẩm quyền cho câu hỏi này.
FriendFX

@FriendFX Tôi đã kiểm tra mã trong trình biên dịch RTL và các đường dẫn được suy luận chính xác.
Revanth Kamaraj

Chỉ để cho bạn biết, tôi đã thêm một số thông tin về bộ ghép kênh đồng hồ đơn bào và một giải pháp (ít nhất là đối với một số công cụ).
FriendFX

1

Mặc dù đây là một chủ đề cũ chưa được trả lời ... nó bao gồm một số cách hiểu cơ bản về đồng bộ so với đồng hồ không đồng bộ

  • Về cơ bản, đồng hồ đồng bộ phải duy trì đồng bộ hóa theo pha với độ trễ tối thiểu được thêm vào để Mux'ing không tạo ra trục trặc.
    • Điều này thường được thực hiện bằng cách lấy lại tất cả các nguồn đồng hồ có kiểm soát ở đồng hồ tốc độ đầy đủ.
  • Đồng hồ Asynch không quan trọng đối với thời gian, vì vậy độ trễ được cho phép. chẳng hạn như Bộ đếm Ripple.

nhập mô tả hình ảnh ở đây


Cảm ơn đã xem xét câu hỏi cũ này. Trong trường hợp của tôi, tôi không (muốn) đồng bộ hóa lại đồng hồ với đồng hồ tốc độ đầy đủ, như được hiển thị trong mạch. Tuy nhiên vẫn còn thiếu là phần chính trong câu hỏi của tôi, cụ thể là các câu lệnh SDC chính xác để hạn chế mạch này có tính đến tính đồng bộ của đồng hồ nguồn cũng như chúng được sử dụng trong cùng một thiết kế đồng bộ, vì set_clock_groupsliên kết ví dụ được đề cập đã cắt không chính xác các đường dẫn giữa các đồng hồ.
FriendFX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.