xử lý thời gian trên FPGA


10

Tôi mới sử dụng fpgas và có một số sự tinh tế về thời gian mà tôi không chắc là tôi hiểu: nếu tất cả các quy trình đồng bộ của tôi được kích hoạt trên cùng một cạnh, thì điều đó có nghĩa là đầu vào của tôi được 'bắt' trên một cạnh tăng và đầu ra thay đổi trên .. cùng một cạnh? cạnh tăng tiếp theo?

nếu tôi có hai mô-đun, trong đó đầu ra của một mô-đun chảy vào đầu vào của mô-đun tiếp theo, có thể xảy ra tình huống các đầu vào cho mô-đun của tôi (đầu ra của mô-đun trước) thay đổi cùng lúc khi chúng bị bắt.

Ảnh chụp màn hình ISim

Điểm đánh dấu ở 205ns cho thấy những gì tôi đang nói, op và data_write là đầu vào của tôi. Mọi thứ dường như "chỉ hoạt động" trong trường hợp thử nghiệm này, nhưng trong mô phỏng không rõ chính xác những gì đang được chụp khi nào. Là data_write = "0001 ..." đang bị bắt ở 205ns hoặc (205ns + 1 chu kỳ đồng hồ)? Có cách nào để có được dạng sóng chi tiết hơn trong ISim hiển thị thời gian thiết lập và giữ không?

Cảm ơn.

Câu trả lời:


12

Luôn có một số độ trễ lan truyền thông qua flip-flop. Nó thường được gọi là độ trễ "clock-to-Q".

Điều đó có nghĩa là đầu vào của bạn được ghi ở cạnh và đầu ra của bạn thay đổi trên cùng một cạnh, nhưng chỉ vài nano giây sau. Độ trễ vài nano giây này là đủ (nếu flip-flop của bạn được thiết kế với "thời gian giữ không" như trong hầu hết các FPGA) rằng các thay đổi không ảnh hưởng đến bất kỳ flip-flop xuôi dòng nào cho đến cạnh đồng hồ tiếp theo.

Trong mô phỏng chức năng hoặc RTL (có lẽ là những gì bạn đang làm để tạo kết quả của mình), độ trễ sẽ không được mô phỏng dưới dạng nano giây kéo dài. Trong VHDL, nó sẽ là một chu kỳ delta duy nhất của đồng hồ giả lập, về mặt kỹ thuật không có thời gian nào cả. Điều này làm cho không thể thấy độ trễ trong đầu ra giả lập. Tuy nhiên, đối với các flip-flop mô phỏng như lý tưởng, thì những thay đổi đầu ra không ảnh hưởng đến các flip-flop xuôi dòng là đủ.

Nếu bạn thực hiện mô phỏng sau địa điểm và tuyến đường, nó sẽ có thể bao gồm các độ trễ phù hợp để bạn thấy rõ các hiệu ứng này, với chi phí cho nỗ lực mô phỏng tăng lên.


1
Trong một mô phỏng VHDL RTL, độ trễ là một chu kỳ delta duy nhất. Điều này mất thời gian chính xác bằng 0, nhưng cho phép mô phỏng tiến hành theo thứ tự khi tất cả các cập nhật trong chu kỳ delta hiện tại hoàn thành trước khi chu kỳ delta tiếp theo bắt đầu. Khi không có nhiều chu kỳ delta được lên lịch, thì thời gian có thể tiếp tục.
Martin Thompson

1

Ở cạnh đồng hồ mong muốn (tăng hoặc giảm), đầu vào tại D xuất hiện ở đầu ra Q. Việc này mất một khoảng thời gian hữu hạn (Đồng hồ đến trễ Q) và giả sử không có vi phạm thời gian, D sẽ chỉ đi qua một FF tại một thời điểm (tức là nếu có một đầu vào FF khác được kết nối với Q, FF thứ hai sẽ vượt qua giá trị FF1 Q trước khi nó thay đổi.

Để bao gồm thời gian trong mô phỏng của bạn, bạn cần tổng hợp và đặt và định tuyến thiết kế của bạn, sau đó chạy một vị trí bài và mô phỏng tuyến đường. Điều này sẽ có tất cả các độ trễ tổ hợp, đồng hồ đến Q, v.v. Mô phỏng HDL không có bất kỳ thời gian nào trong số này, vì vậy nó chỉ hữu ích để kiểm tra hoạt động cơ bản, không giới hạn thời gian. Bạn cũng sẽ nhận được một báo cáo thời gian, nó sẽ cho bạn biết giới hạn tốc độ của một miền đồng hồ cụ thể, cho bạn biết nếu có bất kỳ vi phạm thời gian nào và hiển thị cho bạn độ trễ thời gian cho các đường dẫn khác nhau. Bạn có thể sử dụng thông tin này để tìm ra nơi cần thiết phải thực hiện các quy tắc hoặc thêm quy tắc để nói với phần mềm rằng vi phạm không phải là vấn đề (ví dụ: đối với những thứ như đường dẫn nhiều chu kỳ hoặc đường dẫn đồng hồ chéo)


1

Điều này có nghĩa là một bổ sung cho các câu trả lời trước đó, từ tôi tin rằng bạn có ý tưởng.

Những vấn đề này thực sự có thể hơi khó khăn khi bắt đầu khi mô phỏng các thiết kế RTL vì người ta có thể thấy khó hiểu nguyên nhân và tác động của mô phỏng lý tưởng / chức năng / RTL là gì (= không có độ trễ lan truyền).

Với trình mô phỏng phù hợp, độ trễ delta thực sự có thể được hình dung. ISim không làm điều đó, nhưng trong ei ModelSim, bạn có thể kích hoạt mở rộng delta xung quanh các cạnh đồng hồ. Dưới đây là một ảnh chụp màn hình ví dụ từ IP của bên thứ 3 bị lỗi mà tôi gặp sự cố.

Mở rộng độ trễ Delta trong ModelSim

clà tín hiệu đồng hồ, và +1vv là các chu kỳ delta, được hình dung như thời gian.

Nếu một thiết kế được mô phỏng trong đó cả mô phỏng và thiết kế thực sự lý tưởng và đồng bộ , không có độ trễ mô phỏng, về nguyên tắc, bạn có thể xem tất cả các thay đổi tín hiệu trên một sườn đồng hồ cụ thể như xảy ra nhẹ sau khi sườn đồng hồ đó. Do đó, trong ví dụ của bạn, ở 205 ns, data_write= 0000...là những gì đang bị bắt. Một số logic khác trong đơn vị đầu tiên đang thay đổi tín hiệu data_writethành 0001...trên cùng một sườn và tín hiệu đó xuất hiện data_writemột chút sau khi sườn đồng hồ. "Hơi sau" này sẽ là một hoặc một số deltas mô phỏng trong một mô phỏng lý tưởng (ví dụ của bạn) (không hiển thị trong ISim, nhưng trong ví dụ ModelSim với mở rộng delta) hoặc một số ps / n sau này trong thế giới thực.

Lưu ý phụ: Một điều quan trọng với thiết kế RTL là đảm bảo rằng các đầu vào luôn được lấy mẫu trên sườn đồng hồ - ngay cả một chu kỳ delta sau đó là quá muộn. Đầu vào có thể không hợp lệ một delta sau này. Hay nói cách khác: "đừng lộn xộn với đường dẫn đồng hồ".

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.