2012-01-24 17 views

Trả lời

21

Các "luật chung" là

bất cứ điều gì mà quá trình của bạn cần phải biết về thay đổi của cần phải có trong danh mục nhạy cảm.


Đối với một thanh ghi synthesisable điển hình với một thiết lập lại đồng bộ:

process (clk) is 
begin 
    if rising_edge(clk) then 
     if reset = '1' then 
      -- do reset things 
     else 
      -- read some signals, assign some outputs 
     end if; 
    end if; 
end process; 

Chỉ có đồng hồ cần phải được trong danh sách, như mọi thứ khác chỉ nhìn khi đồng hồ thay đổi (do tuyên bố if rising_edge(clk).


Nếu bạn cần không đồng bộ reset:

process (clk, reset) is 
begin 
    if reset = '1' then 
     -- do reset things 
    elsif rising_edge(clk) then 
     -- read some signals, assign some outputs 
    end if; 
end process; 

sau đó tín hiệu reset cũng phải nằm trong danh sách nhạy cảm, như thiết kế của bạn cần phải kiểm tra giá trị của nó mỗi khi nó thay đổi, không phụ thuộc vào những gì mà đồng hồ đang làm.


cho logic tổ hợp, tôi tránh sử dụng các quy trình hoàn toàn vì trong những vấn đề giữ danh sách nhạy cảm với nhật, và tiềm năng cho mô phỏng sau đó hành xử khác nhau để mã tổng hợp. Điều này đã được giảm bớt bởi các từ khóa all trong VHDL-2008, nhưng tôi vẫn chưa thấy mình muốn viết logic tổ hợp phức tạp dài như vậy mà một quá trình sẽ giúp đỡ.

12

Nếu tín hiệu nằm trong danh sách độ nhạy của quy trình, quy trình sẽ "đánh thức" và được đánh giá bất cứ khi nào giá trị của tín hiệu đó thay đổi. Nếu nó không có trong danh sách độ nhạy, tín hiệu có thể thay đổi, nhưng một quá trình sẽ không được đánh giá lại để xác định đầu ra mới sẽ là gì.

Đối với logic kết hợp: Có thể bạn muốn tất cả các tín hiệu đầu vào của bạn được đưa vào danh sách độ nhạy. Nếu chúng không có trong danh sách độ nhạy thì điều đó sẽ dẫn đến kết quả của bạn không thay đổi ngay cả khi tín hiệu đầu vào thay đổi. Đây là lỗi thường gặp (do bất cẩn). Lưu ý rằng trong VHDL 2008 bạn có thể sử dụng "tất cả" từ khóa để tự động bao gồm tất cả các tín hiệu cần thiết trong quá trình của bạn và tránh tạo chốt.

Đối với Logic đồng bộ: Có thể bạn chỉ muốn đồng hồ (và có thể đặt lại) tín hiệu trong danh sách độ nhạy. Điều này là do bạn chỉ quan tâm đến giá trị của tín hiệu của bạn (ngoài đồng hồ) khi đồng hồ hệ thống của bạn đã thay đổi. Điều này là do bạn thường mô tả thanh ghi (bao gồm các flip flops) mà chỉ cho phép thay đổi giá trị đầu ra của chúng trên một cạnh đồng hồ.

Tất cả điều này có thể gây nhầm lẫn trong trường hợp sử dụng HDL để tổng hợp vì chỉ có một tập con của các mạch bạn mô tả trong VHDL thực sự có thể được triển khai trong một FPGA. Ví dụ, bạn không thể có một phần tử bộ nhớ nguyên thủy nhạy cảm với hai cạnh đồng hồ độc lập, mặc dù bạn có thể mô tả một mạch như vậy bằng cách bao gồm hai đồng hồ trong danh sách độ nhạy.

1

Ngoài ra, các công cụ tổng hợp (nói về Xilinx XST trong trường hợp này) không nhất thiết phải luôn luôn tôn trọng danh sách độ nhạy quá trình. Nếu bạn không liệt kê tất cả các quy trình có giá trị được đánh giá trong thân của quá trình, XST sẽ phát ra một cảnh báo nói rằng nó sẽ giả định rằng các tín hiệu có giá trị được đánh giá nằm trong danh sách độ nhạy. Điều đó có thể dẫn đến sự khác biệt giữa mô phỏng hành vi và phần cứng thực tế. Hãy ghi nhớ điều đó.

0

... cũng được cảnh báo, danh sách độ nhạy không ảnh hưởng đến hoạt động của thiết kế khi nó được tổng hợp. Nó chỉ được sử dụng trong quá trình mô phỏng. Do đó nó khá dễ dàng để giới thiệu một sự khác biệt trong hành vi giữa RTL và mã tổng hợp bằng cách thay đổi danh sách độ nhạy.

Các quy tắc mà Josh đưa ra là tốt, nhưng trên tất cả, hãy đọc các cảnh báo mà công cụ của bạn cung cấp cho bạn và hành động trên chúng. Họ thường kiểm tra danh sách độ nhạy là chính xác và sẽ gắn cờ bất kỳ vấn đề nào. Chế độ Emacs VHDL cũng có một lệnh để cập nhật danh sách độ nhạy, và nó thường khá tốt ở đó.


Hmmmm, Ninja'd

+1

Không chính xác! _ "danh sách độ nhạy không ảnh hưởng đến hành vi của thiết kế của bạn khi nó được tổng hợp." _ Tùy thuộc vào công cụ tổng hợp, danh sách độ nhạy có thể bị bỏ qua hoặc chốt có thể được suy ra. – Philippe

+1

Ok, "không có ảnh hưởng trong nhiều công cụ tổng hợp", trong đó 'nhiều' là những cái tôi đã sử dụng. –

Các vấn đề liên quan