FPGA: đếm ngược hay đếm ngược?


11

Tôi đang học cách sử dụng một FPGA (bảng phát triển Papilio, có một spartan3e xilinx, sử dụng vhdl).

Tôi cần chia một xung đến cho một số (mã hóa cứng).

Tôi có thể thấy 3 tùy chọn - đại khái là mã giả (sử dụng 10 số đếm làm ví dụ):

  1. Khởi tạo thành 0, trên đầu vào tăng cạnh 1, so với 10; nếu chúng bằng nhau, đặt lại về 0 và kích hoạt xung đầu ra
  2. Khởi tạo thành 10, trên cạnh tăng đầu vào giảm 1, so với 0; nếu chúng bằng nhau, đặt lại thành 10 và kích hoạt xung đầu ra
  3. Khởi tạo thành 9, nhưng đảm bảo có ít nhất 1 bit "0" hàng đầu, đó là bit đầu ra của tôi. Trên cạnh tăng đầu vào giảm 1. Trên cạnh tăng của bit đầu ra, đặt lại.

Chu kỳ nhiệm vụ là không quan trọng.

Là một trong những tốt hơn so với những người khác? Có một phương pháp nào tốt hơn mà tôi chưa từng nghĩ đến?

Có cách nào "chuẩn" sẽ mang lại cho trình biên dịch cơ hội tối ưu hóa tốt nhất không?


3
Đó chỉ là ba lựa chọn :-) ... Nhưng nghiêm túc mà nói, nó thực sự không quan trọng lắm trong một đồ họa. Các yếu tố logic riêng lẻ đủ chung để nó có cùng số lượng tài nguyên và cung cấp cho bạn hiệu suất tương tự cho dù bạn làm theo cách nào. Quyết định đưa ra liệu nó có hữu ích ở những nơi khác trong thiết kế để có các số đếm lên hoặc xuống hoặc một số mẫu khác.
Dave Tweed

2
Tùy chọn thứ 4: Thanh ghi dịch chuyển tròn 10 bit được tải với "1000000000" và được dịch chuyển trên cạnh tăng. Sử dụng một bit của thanh ghi thay đổi như là kích hoạt cho những gì bạn đang làm.
Lincoln

1
Như một lưu ý phụ - công cụ GUI của trình biên dịch / fitter của bạn, sau khi hoàn thành công việc, nên có một tùy chọn hiển thị cho bạn mạch thực tế mà nó đã tạo ở các mức độ trừu tượng khác nhau, xuống các cổng, vì vậy bạn sẽ có thể xem công cụ này phù hợp với mạch của bạn như thế nào và sau đó bạn có thể thực hiện các thay đổi thích hợp cho nguồn.
Ẩn danh

Câu trả lời:


12

Tối ưu hóa đến mức này sẽ phá vỡ trái tim của bạn. Kết quả có thể thay đổi do công nghệ của FPGA mà bạn đang sử dụng, các yếu tố khác trong FPGA, nhưng cũng vì các yếu tố ngoài tầm kiểm soát của bạn, bao gồm cả hạt giống số ngẫu nhiên của fitter.

Phải nói rằng, tôi tin rằng lựa chọn 3 sẽ là tốt nhất. Tùy chọn 1 và 2 có một cổng so sánh / HOẶC đi giữa các quầy để nó có thể báo hiệu rằng đã đạt được số mục tiêu. Tùy chọn 2 có thể nhanh hơn 1 chút, vì tất cả có thể thẳng HOẶC với nhau mà không có bất kỳ bộ biến tần nào, nhưng một lần nữa bạn lại gặp phải những khác biệt về công nghệ nhỏ, nơi nó có thể nhanh hơn với AND hoặc XOR.

Tùy chọn 3 bỏ qua so sánh với chi phí thấp của một bit thừa trong quầy. Điều này đáng giá, trừ khi bạn bị hạn chế nghiêm trọng trong dép tông.

Một sự thật thú vị về các bộ đếm là chúng có xu hướng được nhóm thành một kích thước cụ thể của thiết bị trong một khối logic và bạn sẽ thấy sự thay đổi thời gian nhiều hơn mong đợi nếu bit thừa này đẩy bạn ra khỏi nhóm đó.


+1, chặn tốc độ đồng hồ đẩy các hạn chế của công nghệ, nên để báo cáo thời gian hướng dẫn tối ưu hóa thời gian của chúng. Theo đuổi hàng trăm picosecond trên Spartan 3e, hoặc bất kỳ FPGA nào cho vấn đề đó, mà không có nguyên nhân thường là lãng phí thời gian.
jalalipop

4

Một tùy chọn khác là khởi tạo bộ đếm thành 6 (= 2 4 - 10), đếm ngược và sau đó đặt lại khi đầu ra mang theo kích hoạt (nghĩa là các FF đều là tất cả).

Ưu điểm của việc này là nó không yêu cầu thêm FF và nhiều FGPA có logic phụ trợ chuyên dụng để tăng tốc loại hoạt động mang này trong mạch đếm hoặc bộ cộng.


3

Phụ thuộc. Ví dụ: độ trễ lan truyền flip-flop cho 0 → 1 và 1 → 0 có thể khác nhau, và do đó độ trễ chuyển đổi của bộ đếm cho 000 → 001 và 001 → 000 có thể hơi khác nhau. Nó có thể cao hơn hoặc thấp hơn, tùy thuộc vào công nghệ cmos được sử dụng trong FPGA. Vì vậy, bạn phải tổng hợp và tìm ra cái nào có hiệu suất thời gian tốt hơn.


3

Từ quan điểm của người viết trình biên dịch: nếu bạn sử dụng integer, biểu diễn bên trong là không xác định và trình biên dịch có thể tự do lựa chọn triển khai hiệu quả nhất.

Nếu bạn buộc một đại diện nội bộ cụ thể, trình tối ưu hóa vẫn sẽ cố gắng cải thiện nó, nhưng nó sẽ bắt đầu từ một điểm thuận lợi tồi tệ hơn một chút.

N-1

Trừ khi bạn biết cấu trúc bên trong, các tài nguyên được phân bổ cho logic khác (nhiều GPU có logic cộng bội nhân chuyên dụng mà bạn cũng có thể sử dụng để thực hiện bộ đếm nếu bạn có các đơn vị còn sót lại) và hoàn toàn chắc chắn rằng bạn sẽ không chuyển đổi với một mô hình khác, câu trả lời là "đừng nghĩ về nó".

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.