Việc sử dụng 'sự kiện trong vhdl là gì?


7

Trong mã vhdl cho bộ đếm đồng bộ, tôi đã thay thế phần sau

process(clock)
begin
    if(clock'event and clock='1')then
        count <= count + 1;
    end if;
end process

với

process(clock)
begin
    if(clock='1')then
        count <= count + 1;
    end if;
end process

kết quả vẫn như cũ. Vậy thì tại sao cách mã hóa thứ 1 clock'eventluôn được khuyến nghị. ?


Bạn có chắc chắn kết quả là như nhau? Chúng ta đang nói về kết quả mô phỏng hoặc một số cổng logic thực hiện mã đó?
Vladimir Cravero

Sự kết hợp của cả hai là chỉ định cạnh tăng. clock'event là bất kỳ thay đổi nào trên đồng hồ và clock = '1' là mức logic. Vì vậy, bất kỳ thay đổi dẫn đến logic cao = tăng cạnh.
efox29

kết quả mô phỏng @VladimirCravero
BOTin jose

"Đồng hồ là bất kỳ thay đổi nào trên đồng hồ" nhưng điều tương tự cũng được quan tâm nếu chúng ta đưa biến đồng hồ vào danh sách quy trình độ nhạy. Tôi có lầm không? @ efox29
thu phí từ

Tôi nghĩ rằng bạn cần ít nhất một sự kiện cho bất kỳ tín hiệu nào trong danh sách độ nhạy, hoặc tôi sai hoặc bạn đang sử dụng một trình giả lập lạ ... Tôi nói rằng bộ nhớ của tôi bị lỗi ở đây.
Vladimir Cravero

Câu trả lời:


8

Danh sách độ nhạy chủ yếu là một khái niệm được sử dụng bởi trình giả lập để lên lịch thực hiện các quy trình. Một công cụ tổng hợp thường sẽ loại bỏ danh sách độ nhạy.
Các kết quả khi chạy đoạn mã trên thông qua một công cụ tổng hợp là gì? Việc thực hiện mà không có khả năng 'eventsẽ tạo ra một chốt, bởi vì đó là những gì một công cụ tổng hợp "nhìn thấy" khi nhìn vào mã.

Kết quả của Xilinx XST cho if clk'event and clk = '1' then:

Adders/Subtractors : 1  
8-bit adder        : 1  
Registers          : 1  
8-bit register     : 1 

Kết quả của Xilinx XST cho if clk = '1' then:

Adders/Subtractors : 1  
8-bit adder        : 1  
Latches            : 8  
1-bit latch        : 8

Các kết quả ở trên, nơi thu được bằng cách tổng hợp bộ đếm lên 8 bit.

EDIT (2015/06/11): Trong IEEE-1.076,6-1999 "IEEE tiêu chuẩn cho VHDL Register Transfer Level (RTL) Tổng hợp" những biểu hiện đó "sẽ đại diện cho một lợi thế cạnh đồng hồ tích cực khi được sử dụng như một điều kiện trong một nếu tuyên bố" là một cách rõ ràng định nghĩa là:

  • RISING_EDGE (clk_signal_name)
  • clk_signal_name'EVENT clk_signal_name = '1'
  • clk_signal_name = '1' clk_signal_name'EVENT
  • không clk_signal_name'STABLE clk_signal_name = '1'
  • clk_signal_name = '1' không clk_signal_name'STABLE

Bạn có ý nghĩa gì khi nó chốt một chốt? Tôi không hiểu
Goldname

9

Bắt đầu với định nghĩa về VHDL từ wikipedia

VHDL (Ngôn ngữ mô tả phần cứng VHSIC) là ngôn ngữ mô tả phần cứng được sử dụng trong tự động hóa thiết kế điện tử để mô tả các hệ thống tín hiệu sốhỗn hợp như mảng cổng lập trình trường và mạch tích hợp. VHDL cũng có thể được sử dụng như một ngôn ngữ lập trình song song cho mục đích chung .

VHDL được sử dụng chủ yếu để mô tả các mạch kỹ thuật số cho ASIC hoặc FPGA nhưng nó có thể được sử dụng cho các hệ thống tương tự kỹ thuật số (tín hiệu hỗn hợp) hoặc thậm chí được sử dụng để mô tả các quá trình song song.

'Sự kiện có nghĩa là một sự thay đổi trong tín hiệu kỹ thuật số, đó là một cạnh . Kết hợp với '1' bạn xác định cạnh tăng . Điều này gần giống như chức năng tăng_edge (clk) . Ở đây có sự khác biệt nhỏ giữa chúng (đối với người dùng nâng cao).

Vì vậy, nếu bạn không sử dụng sự kiện ', bạn đang mô tả một quy trình được kích hoạt trong mức độ cao của clk. Ví dụ: đối với chu kỳ nhiệm vụ 50% của đồng hồ 40 MHz, đồng hồ ở trạng thái '1' trong 12,5ns. Điều gì xảy ra với quầy trong 12,5ns này? Bao nhiêu lần sẽ được tính trong 12,5ns? Và điều quan trọng nhất, hệ thống mà các mã này đã được viết có khả năng tăng bộ đếm bằng mức đồng hồ không? Có lẽ là không, mặc dù trình giả lập của bạn cho bạn kết quả tương tự. Hãy cẩn thận với kết quả giả lập , bởi vì trình giả lập khác với trình tổng hợp và có thể cung cấp kết quả rất khác nhau.

VHDL là một ngôn ngữ chung được sử dụng rộng rãi để mô tả các mạch kỹ thuật số. Vì vậy, mỗi nhà sản xuất có các mẫu tối ưu của họ để mô tả các bộ đếm, thanh ghi, bộ nhớ ... Và clock'event và clock = '1' hoặc tăng_edge (clk) là tiêu chuẩn thực tế để mô tả cạnh tăng của tín hiệu được liệt kê trong độ nhạy danh sách. Theo cách tương tự, nếu bạn mô tả thiết lập lại không đồng bộ, bạn đặt tín hiệu đặt lại trong danh sách độ nhạy và mức cao hoặc thấp để khởi tạo thanh ghi tất cả thời gian tín hiệu được xác nhận, không được xác định ngay lập tức với cạnh.

process (clock, reset) 
begin
   if reset='1' then 
      count <= (others => '0');
   elsif clock='1' and clock'event then
      <count> <= <count> + 1;
   end if;
end process;

Để tóm tắt , mỗi nhà sản xuất logic lập trình sử dụng một bộ định nghĩa VHDL giới hạn và được xác định để mô tả các hệ thống của họ. Tôi khuyên bạn nên tìm kiếm các mẫu VHDL hoặc Verilog cho Xilinx hoặc Altera. Các mẫu này được bộ tổng hợp hiểu chính xác để được dịch sang các phần tử của chip logic lập trình cụ thể, hoặc ASIC hoặc các hệ thống khác.


Có sự không nhất quán trong đó trích dẫn 'chính quyền' tìm kiếm các thuật ngữ trong chính Wikipedia. Ngôn ngữ lập trình mục đích chung có thể trùng lặp với ngôn ngữ cụ thể của miền là gì, miền duy nhất xảy ra trong VHDL là trong mô tả phần cứng. 'Bạn có thể triển khai máy phân tích, xây dựng và mô phỏng VHDL trong VHDL không?' Và không, bạn không thể, mặc dù bạn có thể mô tả phần cứng để làm những việc này, phần cứng sẽ rất lớn - mô phỏng quá lớn và chậm thay vì thực thi như trong triển khai C, không phải là ngôn ngữ cụ thể của miền. Chu kỳ Delta mô phỏng song song, đòi hỏi các sự kiện tín hiệu.
dùng8352

Ý anh là gì? Bạn đang nói là mô tả tốt hơn một hệ thống song song trong C thay vì VHDL? Tôi sẽ tự hỏi nếu có thể được tạo ra một quy trình công việc hoặc ngôn ngữ nhanh nhẹn hơn để mô tả các mạch xử lý phần cứng hoặc song song. Tôi thực sự đang mong đợi điều đó. Phần mềm HLS không đủ trưởng thành để cung cấp kết quả tối ưu.
David Quiñones

Tôi đang nói rằng trích dẫn hỗ trợ cho câu trả lời của bạn không áp dụng được.
dùng8352

Bạn đang đề cập đến trích dẫn "trích dẫn mục đích chung song song"? Tôi không phải là chuyên gia về các khía cạnh của VHDL. Có lẽ trong nguồn gốc của cô đã được nghĩ theo cách đó.
David Quiñones

Để nghiêm ngặt, chúng ta phải tham khảo tiêu chuẩn VHDL. Tất cả đều giống nhau, mục đích là làm rõ rằng mỗi trình giả lập và mỗi trình tổng hợp diễn giải theo cách của họ, và đôi khi có kết quả rất khác nhau, bởi vì tiêu chuẩn là chung chung và không bao gồm những gì phải làm trong mọi trường hợp.
David Quiñones
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.