2009-06-22 26 views
10

Câu hỏi ban đầu là:Các tính năng ẩn của VHDL

Một số tính năng ngôn ngữ thực sự hữu ích nhưng bí truyền trong VHDL mà bạn thực sự có thể sử dụng để thực hiện công việc hữu ích?

Câu hỏi ban đầu đã bị xóa và tôi chỉ trả lời. Tôi nghĩ đây là một câu hỏi thú vị, đặc biệt là khi bạn so sánh VHDL với các ngôn ngữ lập trình khác (bình thường).

Tuyên bố từ chối trách nhiệm: Tôi chỉ thực hiện một số ví dụ nhỏ trong VHDL.

Nhưng những gì tôi đặc biệt thích, khi so sánh với các ngôn ngữ lập trình khác (mà có lẽ không phải những gì bạn đang hỏi về, nhưng tôi nghĩ chỉ cho những điều mà mọi lập trình viên nên biết VHDL một chút):

  1. Khả năng có nhiều triển khai khác nhau (kiến trúc) của một giao diện duy nhất và trao đổi chúng dễ dàng.

  2. Chủ nghĩa song song chi phí thấp vốn có của mô hình ngôn ngữ. Nó loại nhắc tôi về các ngôn ngữ dataflow.

+0

Biến nó thành CW ... bạn đang lôi kéo tôi đóng. – Shoban

+0

Tôi không chắc chắn làm thế nào để làm điều đó. Nếu bạn có thể, hãy làm điều đó. –

Trả lời

5

Tính năng tốt nhất của VHDL - được sử dụng để thiết kế và triển khai phần cứng. :)

Khả năng có nhiều triển khai (kiến trúc) khác nhau của một giao diện đơn lẻ và dễ dàng trao đổi chúng.

Tương tự với OOP trong C++: bạn có thể xác định một giao diện và nhiều triển khai. Nó rất hữu ích trong VHDL để tạo ra các mô hình mô phỏng và tổng hợp cho cùng một thiết bị.

Chủ nghĩa song song trên không thấp vốn có của mô hình ngôn ngữ. Nó loại nhắc tôi về các ngôn ngữ dataflow.

Thực ra, có thư viện SystemC để C++ triển khai ngữ nghĩa thực thi song song. Bạn có thể dễ dàng tải xuống và dùng thử: http://www.systemc.org. Tôi đang làm việc trên tổng hợp C + + - to-RTL. Vì vậy, tôi hy vọng trong 4-5 năm tất cả phát triển phần cứng sẽ được thực hiện bằng cách sử dụng SystemC và C++.

+3

Tại sao? VHDL được tạo ra bởi EE's, cho EE's. Nó chứa tất cả những gì cần và hướng thẳng về phía trước. Tại sao lại thêm một lớp khác vào nó? –

2

gì là một số thực sự hữu ích nhưng tính năng ngôn ngữ bí truyền trong VHDL

Thứ nhất, tôi không mua vào lý thuyết rằng VHDL có nhiều tính năng 'bí truyền'. Tuy nhiên, "phong cách" phổ biến của VHDL tồn tại trong tự nhiên thường bị ảnh hưởng bởi những gì tập hợp con của VHDL được hỗ trợ bởi các bộ tổng hợp phần cứng.

Phương trình trong thế giới VHDL rất đơn giản: nếu các công cụ hỗ trợ một tập con ngôn ngữ, nó sẽ được sử dụng. Nếu không, tính năng này có thể sẽ không được sử dụng.

đặc biệt là khi bạn so sánh VHDL với các ngôn ngữ lập trình (thông thường) khác.

Lưu ý rằng VHDL không phải là ngôn ngữ lập trình.Thay vào đó, nó là một ngôn ngữ để mô tả các hệ thống sự kiện rời rạc (với một hậu quả 'ngẫu nhiên' mà nó có thể được sử dụng để mô tả phần cứng kỹ thuật số). Tôi cho rằng việc so sánh với các ngôn ngữ lập trình bắt nguồn từ VHDL giống như một số ngôn ngữ lập trình thực tế.

Bây giờ, hãy trả lời một số câu trả lời thực tế cho câu hỏi của OP.

một số tính năng ngôn ngữ thực sự hữu ích nhưng bí truyền trong VHDL là gì ...

Dưới đây là lựa chọn của tôi, không theo thứ tự cụ thể.

  1. Kiến trúc: Bởi đến nay, khả năng lựa chọn kiến ​​trúc khác nhau cho một giao diện là tính năng hữu ích nhất VHDL đã và đang được sử dụng ở mọi thời điểm.
  2. Máy phát điện: sử dụng máy phát điện, bạn có thể dễ dàng mô tả cấu trúc phần cứng thông thường phức tạp. Hãy suy nghĩ nhân, người bổ sung, đường ống phức tạp và tương tự. Thật không may, nhiều công cụ làm cho một mess ra khỏi đầu ra được tạo ra.
  3. Khối: Cách rẻ để chia nhỏ thiết kế của bạn thành các khối phụ; không phải tất cả các công cụ đều hỗ trợ nó.
  4. Độ phân giải tín hiệu: Khá hữu ích khi mô phỏng mạch và các loại tương tự, chứ không phải để tổng hợp phần cứng.
  5. Thuộc tính: Một cách tuyệt vời để đính kèm hướng dẫn vào trình mô phỏng/bộ tổng hợp để giúp tìm ra cách tốt nhất để triển khai mạch của bạn. Trong khi hầu hết các trường hợp này có thể được thực hiện với các tùy chọn dòng lệnh để các công cụ tổng hợp/mapper/p & r, các thuộc tính cảm thấy tự nhiên hơn, vì tất cả thông tin cần thiết để tạo ra phần cứng của bạn bị giới hạn ở một nơi duy nhất.
7

một số tính năng ngôn ngữ thực sự hữu ích nhưng bí truyền trong VHDL là gì ...

người dùng định nghĩa các loại vật lý như "góc", "điện áp", "temperature_coefficient", nơi bạn có thể sau đó viết các nội dung như temp <= 45 deg; hoặc volt <= 3.3 V;.

2

Khá nhiều tính năng "bí truyền" của VHDL có nguồn gốc từ Ada. Tôi đề cập đến điều này bởi vì tôi không phải là chuyên gia Ada, nhưng việc học Ada đã cải thiện đáng kể tầm nhìn của tôi về những gì có thể đạt được trong VHDL.

6

Đôi khi, có nhiều cách để thực hiện điều gì đó. OK, hầu hết thời gian, bạn có thể thực hiện mọi thứ theo nhiều cách trong VHDL. Nhìn vào tình huống mà bạn muốn chỉ định các giá trị khác nhau cho tín hiệu, dựa trên giá trị của tín hiệu khác.

chọn Signal Phân

Cách cụ thể nhất để làm điều này là với như nhiệm vụ tín hiệu được chọn. Dựa trên một số giá trị có thể có của b, bạn chỉ định giá trị cho a. Không có dự phòng trong mã ở đây.

with a select b <= 
     "1000" when "00", 
     "0100" when "01", 
     "0010" when "10", 
     "0001" when "11"; 

tín hiệu có điều kiện Phân

Các cấu trúc của một phân tín hiệu có điều kiện là một chút tổng quát hơn. Đối với mỗi tùy chọn, bạn phải đưa ra một điều kiện. Điều này có nghĩa rằng bạn có thể viết bất kỳ biểu thức boolean như một điều kiện, mà cung cấp cho bạn tự do hơn kiểm tra bình đẳng. Trong khi cấu trúc này sẽ mang lại cho bạn nhiều tự do hơn, thì cũng có nhiều dự phòng hơn một chút. Chúng tôi đã phải viết kiểm tra bình đẳng (a =) trên mỗi dòng. Nếu bạn sử dụng một tín hiệu có tên dài, điều này sẽ làm cho mã của bạn to hơn. Ngoài ra, dấu phân cách được sử dụng trong việc xác nhận tín hiệu được chọn là dấu phẩy. Trong việc xác nhận tín hiệu có điều kiện, bạn cần từ khóa else. Thêm mã cho cùng một chức năng.

b <= "1000" when a = "00" else 
     "1000" when a = "01" else 
     "1000" when a = "10" else 
     "1000" when a = "11"; 

tổ hợp Process với Hộp Đựng Bản Tuyên Bố

Các cấu trúc nói chung có thể sử dụng hầu hết là một quá trình. Bên trong quá trình này, bạn có thể viết một câu lệnh case hoặc một chuỗi các câu lệnh if. Thậm chí còn có nhiều dự phòng hơn ở đây. Bạn mã bộ xương cho một quá trình (bắt đầu, kết thúc) và danh sách độ nhạy. Đó không phải là một nỗ lực lớn, nhưng trong khi tôi đang soạn thảo điều này, tôi đã đặt b trong danh sách độ nhạy thay vì a. Dễ mắc lỗi nhỏ. Bạn cũng cần phải xác định những gì xảy ra trong các trường hợp other.

process(a) 
begin 
     case a is 
       when "00" => b <= "1000"; 
       when "01" => b <= "0100"; 
       when "10" => b <= "0010"; 
       when "11" => b <= "0001"; 
       when others => assert "unreachable" severity failure; 
     end case; 
end process; 

Trong khi đoạn mã cuối cùng này là lớn nhất và có lẽ dễ bị lỗi nhất, nó có lẽ cũng là phổ biến nhất. Nó sử dụng hai cấu trúc quen thuộc và thường được sử dụng: quy trình và các câu lệnh case.

Sự cố với bài tập tín hiệu được chọn và có điều kiện là không có hệ thống nào trong cú pháp của chúng. Ý nghĩa là gần như giống hệt nhau, nhưng cú pháp chỉ đủ khác để ném bạn đi. Tôi biết nhiều kỹ sư thường xuyên có bản sao Hướng dẫn tham khảo vàng Doulos cho VHDL nằm trên bàn làm việc của họ. Điều này tốt cho Doulos, bởi vì tên của họ được nhắc đến mọi lúc.

1

Phân bổ tín hiệu có điều kiện giống với tuyên bố trường hợp - tức là các nhánh có trọng lượng bằng nhau. Chuyển nhượng tín hiệu được chọn là cấu trúc bộ mã hóa ưu tiên - tức là tương đương với các câu lệnh lồng nhau nếu/sau đó/khác. Lưu ý rằng tất cả các câu lệnh gán đồng thời trong vhdl giống hệt với một tiến trình với một danh sách độ nhạy bao gồm các tín hiệu ở phía bên tay phải của toán tử gán.

Tính năng bí truyền yêu thích của tôi là cấu hình (đặc biệt hữu ích khi bạn có nhiều kiến ​​trúc của cùng một thực thể) và loại truy cập. Điều này cho phép người ta tạo cấu trúc dữ liệu động. Không hữu ích cho thiết kế phần cứng, nhưng rất hữu ích cho việc tạo testbench. Phương pháp quá tải chữ ký kiểu đối số của tôi cũng làm cho mã rất dễ đọc - và là một tính năng đáng buồn thiếu trong SystemVerilog.

Paul.

+0

Rất tiếc - tôi có nó ngược. Tất nhiên, các phép gán tín hiệu được chọn tương đương với các câu lệnh case và các bài tập có điều kiện tương đương với lồng nhau nếu/then/else. –

0

Điều bí truyền nhất mà tôi biết là sự kết hợp của ba nguyên tắc:

  1. ký tự chữ: '\'
  2. định mở rộng: \ 'bar \
  3. thuộc tính: identifier'attribute

Bây giờ biểu thức này là gì ?: foo '\' bar \ Đó là \ 'thanh \ thuộc tính của foo.

Tôi đoán không có lexer vhdl nào tồn tại.

+0

Một cái gì đó gọi là [IR-1045] (http://www.eda.org/isac/IRs-VHDL-93/IR1045.txt) từ các vấn đề VHDL 93. foo '\' bar \ có thể được định hướng bởi một lexer. – user1155120

+0

Cảm ơn bạn đã liên kết – deepsubmicron

0
  1. Bạn có thể có tín hiệu trong gói.

  2. Bạn có thể tạo cổng mới trong cấu hình.

  3. Bạn có thể quá tải các chức năng dựa trên kiểu trả về.

  4. Bạn có thể xác định các tín hiệu trong một thực thể, có thể được sử dụng từ kiến ​​trúc. Điều này không hữu ích cho bất cứ điều gì mà tôi biết, nhưng nó ở đó.