Tại sao độ trễ không thể được tổng hợp trong Verilog?


8

Tôi đã luôn luôn đọc rằng sự chậm trễ được khai báo trong mã RTL không bao giờ có thể được tổng hợp. Chúng chỉ dành cho mục đích mô phỏng và các công cụ tổng hợp hiện đại sẽ bỏ qua các khai báo chậm trễ trong mã.

Ví dụ: x = #10 y;sẽ được coi là x = y;công cụ tổng hợp.

Những lý do khai báo độ trễ trong bất kỳ ngôn ngữ mô tả phần cứng nào (ví dụ, VHDL, Verilog hoặc Sytem-Verilog) không thể được tổng hợp?


1
Đây là một câu hỏi được đăng chéo vì nó nằm giữa sự chồng chéo của SO và ElectronicsSE.
pre_randomize

Câu trả lời:


14

Tổng hợp có nghĩa là bằng cách nào đó chuyển đổi những gì bạn đã mô tả (trong Verilog ở đây) thành phần cứng thực sự .

Bây giờ trong Verilog của bạn, bạn nói rằng bạn có độ trễ 50ns. Ok, nhưng bây giờ, về phần cứng, bạn sẽ chuyển đổi nó thành phần cứng thực tế như thế nào?

Nếu bạn đang sử dụng một FPGA, bạn thực sự sẽ xây dựng độ trễ 50ns của mình bằng cách sử dụng các tài nguyên FPGA có sẵn (LUT, Đăng ký, phần tử Ram, ...)? Bằng cách thêm độ trễ định tuyến bổ sung? hãy tưởng tượng rằng bạn chỉ định độ trễ 1s! Không thể sử dụng TẤT CẢ khả năng định tuyến của chip của bạn (có thể không đủ). Thiết kế của bạn không thể được trang bị. Tương tự cho một ASIC. Bạn sẽ sử dụng 80% bề mặt silicon để thêm độ trễ cho MỘT dòng.

Cách thức hoạt động là bạn sử dụng thiết kế đồng bộ và bạn tự thực hiện độ trễ bằng cách sử dụng bộ đếm hoặc các kỹ thuật khác. Nhưng độ trễ phải là bội số của đồng hồ của phần tử đó.

Thông thường bạn tìm thấy những thứ như "sau 10 ns" là sự chậm trễ lan truyền. Khi thực hiện một mô phỏng lý tưởng trên trình giả lập Verilog, đầu ra xảy ra chính xác khi đầu vào thay đổi. Điều này không thực tế và không mô tả cách thức hoạt động của phần cứng thực sự. Để giải thích cho điều đó, bạn có thể chỉ định sau bao nhiêu thời gian đầu ra của bạn sẽ được thay đổi: sử dụng khai báo độ trễ.


2
Tôi sẽ lưu ý rằng "bởi vì nó sẽ chiếm toàn bộ chip" thực sự không phải là lý do tại sao một cái gì đó không thể được tổng hợp, đó là lý do tại sao một cái gì đó không thể được trang bị hoặc đặt trong giới hạn xác định.
W5VO

@ W5VO Bạn nói đúng. Nó được dự định để hiển thị một cái gì đó vô lý mà sẽ biện minh để tìm cách khác. Đã sửa.
Blup1980

5

Chuyển câu trả lời của tôi từ SO . Mà tập trung vào lý do tại sao nó là không thực tế để tổng hợp sự chậm trễ tuyệt đối

Khi tổng hợp cây đồng hồ, công cụ tổng hợp sẽ cân bằng những điều này bằng cách thêm độ trễ để tất cả các nút nhận được đồng hồ cùng một lúc, do đó có vẻ như công cụ tổng hợp có khả năng thêm độ trễ.

Tuy nhiên, khi ASIC được sản xuất có sự chênh lệch về tốc độ, ở mức cao, điều này có thể được xem là Chậm, Điển hình và Nhanh. Trong thực tế, có hàng trăm biến thể của các góc này trong đó một số loại thiết bị trong silicon chạy nhanh và các loại khác chậm.

Các góc này của silicon cũng có mức nhiệt độ, trường hợp xấu nhất có thể là + 140C Silic nhanh và silicon chậm -40C. Sự thay đổi của độ trễ thông qua bộ đệm trong trường hợp này có thể là từ 1ns đến 30ns.

Để mang lại điều này cho Verilog nếu có thể #10tổng hợp, bạn thực sự sẽ nhận được 155 + -145 tức là 10ns đến 300ns, nếu bạn cũng đã thiết kế một cái gì đó #20để trở thành một phần của cùng một giao diện hoặc cấu trúc điều khiển, nó sẽ có phạm vi từ 20ns đến 600ns . Do đó, toàn bộ điều này không thực sự hợp lệ đối với thiết kế của bạn. Bạn không nhận được chính xác #10#20đã được chỉ định.

Các cây đồng hồ được thiết kế theo cách hạn chế độ trễ tối đa và tối thiểu và do đó tất cả các nút trên cây đồng hồ sẽ chia tỷ lệ tương đối với nhau. Họ không bao giờ được đưa ra một quy tắc nghiêm ngặt đến mức nó phải là # 10ns vì điều này là không thể đảm bảo về mặt vật lý trong một mạch tổ hợp.


3

Đơn vị thời gian tuyệt đối duy nhất sẽ là từ một chiếc đồng hồ bên ngoài. Sự chậm trễ tùy ý đến từ đâu - loại logic kỹ thuật số rời rạc nào sẽ tạo ra nó từ đồng hồ?

Nếu bạn muốn độ trễ tổng hợp thì bạn sẽ cần sử dụng đầu vào đồng hồ bên ngoài và một máy / bộ đếm trạng thái thích hợp sẽ tính cho số chu kỳ đồng hồ cụ thể.


Ý nghĩ này chỉ xuất hiện trong đầu tôi. Tại sao chúng ta phải dựa vào đồng hồ để tạo độ trễ? Tại sao không thể tổng hợp độ trễ cho mạch RC đơn giản với Vdd?
Anand

1
Tổng hợp chủ yếu điền các giá trị vào các bảng tra cứu và các yếu tố định tuyến. Tôi đoán việc tạo ra một mạch RC lập trình trường khó hơn rất nhiều, đặc biệt là mạch không bị ảnh hưởng quá nhiều bởi nhiệt độ. Dễ dàng đồng bộ hóa mọi thứ trên cùng một cạnh đồng hồ hơn là hy vọng cho thời gian lan truyền chính xác.
MAXY
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.