VHDL và Verilog là HDL trong ngày. Những lợi thế của một trong hai người không có kinh nghiệm với HDL là gì?
VHDL và Verilog là HDL trong ngày. Những lợi thế của một trong hai người không có kinh nghiệm với HDL là gì?
Câu trả lời:
Tôi không thể cho bạn biết nên học gì, nhưng đây là một số điểm tương phản (từ một người dùng rất trung tâm VHDL, nhưng tôi đã cố gắng công bằng nhất có thể!), Có thể giúp bạn đưa ra lựa chọn dựa trên sở thích của riêng bạn về phong cách phát triển:
Và hãy ghi nhớ câu nói nổi tiếng đi theo dòng chữ "Tôi thích bất cứ ai trong số hai tôi hiện không sử dụng" (xin lỗi, tôi không thể nhớ ai đã thực sự viết bài này - có thể là Janick Bergeron?)
Rất nhiều lỗi biên dịch để bắt đầu, nhưng sau đó chủ yếu hoạt động như bạn mong đợi. Điều này có thể dẫn đến một đường cong học tập cảm giác rất dốc (cùng với cú pháp không quen thuộc)
Lỗi được tìm thấy sau này trong mô phỏng - đường cong học tập để "cảm thấy như hoàn thành một việc gì đó" sẽ nông hơn, nhưng sẽ kéo dài hơn (nếu đó là phép ẩn dụ đúng?)
Ngoài ra, ưu tiên của Verilog là xác minh cao cấp ngày càng nghiêng về SystemVerilog, một phần mở rộng rất lớn cho Verilog. Nhưng các công cụ cao cấp cũng có thể kết hợp mã tổng hợp VHDL với mã xác minh SystemVerilog.
Đối với một cách tiếp cận hoàn toàn khác: MyHDL - bạn có được tất cả sức mạnh của Python như một ngôn ngữ xác minh với một bộ các phần mở rộng tổng hợp mà từ đó bạn có thể tạo VHDL hoặc Verilog.
Hoặc Cocotb - tất cả sức mạnh của Python như một ngôn ngữ xác minh, với mã tổng hợp của bạn vẫn được viết bằng bất kỳ HDL nào bạn quyết định học (ví dụ VHDL hoặc Verilog).
Tôi đã học cả hai cùng một tuần. VHDL giống như ADA / Pascal và Verilog giống như C. VHDL dài dòng hơn và đau đớn hơn để có được một trình biên dịch, nhưng một khi bạn có được một biên dịch, cơ hội thành công của bạn sẽ tốt hơn. Ít nhất đó là những gì tôi tìm thấy. Verilog, giống như C, khá hài lòng khi cho phép bạn tự bắn vào chân mình. Một số ngành công nghiệp như hàng không vũ trụ / chính phủ nghiêng về VHDL, một số ngành khác nghiêng về Verilog. Vấn đề tôi tìm thấy với cả hai là khả năng của băng ghế thử nghiệm, và khi cố gắng học và cố gắng chuyển từ mô phỏng sang viết mã silicon / chỉ có thể tổng hợp là một cấp độ giáo dục khác.
Có một ngôn ngữ tôi thực sự thích gọi là CDL . Nó hoàn toàn có thể tổng hợp được, bạn viết các băng ghế thử nghiệm của mình theo những cách khác, nó tạo ra Verilog tổng hợp mà bạn có thể đưa vào các công cụ khác. Thật không may, các tài liệu CDL đang thiếu, tôi hy vọng sẽ lấy được một số mẫu trên thế giới để cho thấy nó dễ sử dụng hơn nhiều so với Verilog hoặc VHDL, nhưng chỉ không làm được điều đó. Nó đi kèm với môi trường sim / thử nghiệm riêng của nó. Với CDL và GTKWave, bạn có thể thực hiện một số lượng công việc đáng kể.
Một công cụ khác có tên là Verilator , khá cứng nhắc trong việc giữ cho Verilog của bạn sạch sẽ. Nó là một trình giả lập Verilog miễn phí với một cách rất dễ dàng để gắn vào sim hoặc tạo các băng ghế thử nghiệm trong C / C ++. Bạn cũng có thể sử dụng Verilog, không giới hạn bạn ở đó. Cũng có Icarus Verilog , lớn hơn và được nhiều người biết đến hơn, nhưng tôi muốn giới thiệu Verilator nếu bạn muốn học Verilog. Đối với VHDL có GHDL , trải nghiệm của tôi với nó không tốt bằng Verilator , nhưng ít nhất có một công cụ miễn phí để cố gắng làm ướt chân bạn. Nếu bạn có kinh nghiệm lập trình phần mềm, bạn có khả năng sẽ tiếp nhận và thưởng thức Verilog nhanh hơn VHDL.
Tôi chắc chắn đồng ý với Leon, hãy thử cả hai. fpga4fun và các trang web khác có một số thông tin tốt và một số trang đó sẽ cung cấp cho bạn cả tương đương Verilog và VHDL cho chủ đề họ đang thảo luận. Tôi thấy các trang như những trang hữu ích nhất để so sánh hai ngôn ngữ. Nếu sử dụng HDL là điều bạn muốn làm trong sự nghiệp, tôi khuyên bạn nên có ít nhất một số khả năng với cả hai, có thể thực sự tốt với một nhưng không hoàn toàn không thể sử dụng cái kia.
Nhiều cuộc chiến thánh đã được chiến đấu về điều này. Một nhược điểm đặc biệt của Verilog là hành vi không xác định của nó. http://www.sigasi.com/content/verilogs-major-flaw
Cả hai đều có mặt hại và mặt lợi. VHDL mang tính học thuật, dài dòng và phức tạp hơn. Bạn phải viết nhiều mã hơn, nhưng sự nghiêm ngặt có nghĩa là nó có khả năng hoạt động tốt hơn. Verilog đơn giản hơn cho thiết kế kỹ thuật số điển hình, nhưng giúp dễ dàng tạo ra các lỗi khó khăn. VHDL là phổ biến hơn tại các trường đại học. Verilog phổ biến hơn trong các công ty bán dẫn lớn.
Thông thường sự lựa chọn của cái này hay cái khác được điều khiển bởi các công cụ bạn đang sử dụng. Một số công cụ phổ biến làm tốt hơn với VHDL. Một số công cụ ASIC phổ biến làm tốt hơn với Verilog. Vì vậy, cái nào tốt hơn phụ thuộc vào những gì bạn muốn làm với nó.
Giả sử bạn muốn xây dựng các dự án nhỏ bằng cách sử dụng các Altera FPGA phổ biến trong các trường EE. Các công cụ miễn phí hỗ trợ cả HDL. Nhưng bạn có thể thấy cộng đồng người dùng chủ yếu sử dụng VHDL. Sẽ có nhiều mã ví dụ, các mô-đun có thể tái sử dụng, v.v. nếu bạn chọn ngôn ngữ đó.
Ngược lại, nếu bạn có ý định làm việc trong một công ty lớn làm công việc thiết kế chip nghiêm túc, hầu như tất cả đều sử dụng Verilog trong những ngày này. Các công cụ tổng hợp, mô phỏng và xác minh nhiệm vụ nặng nề được tối ưu hóa cho Verilog. Và gần đây, SystemVerilog - tiện ích mở rộng cho Verilog để hỗ trợ xác minh và thiết kế hệ thống cấp cao.
Thêm thảo luận ở đây và các liên kết hữu ích ở đây:
Đối với người mới bắt đầu / người có sở thích, lời khuyên tốt nhất là quyết định bạn muốn chơi loại chip nào và xem ví dụ nào nhà cung cấp cung cấp. Dùng nó. Khi bạn là một nhà thiết kế kỹ thuật số có kinh nghiệm, việc học ngôn ngữ khác sẽ chỉ mất vài ngày.
Câu trả lời ngắn : sử dụng SystemVerilog, nhưng cũng học VHDL . Tránh Verilog-2001 nếu bạn có thể.
Câu trả lời rất dài : hiện tại, tôi giả sử Ver Ver có nghĩa là Verilog-2001 có lẽ là điều mà hầu hết các câu trả lời khác giả định. Gợi ý tốt nhất có lẽ là học cả hai, nhưng không sử dụng (thêm về điều này ở cuối câu trả lời). Những khác biệt chính có thể được nối lại như sau:
wire
vs reg
)Điều đó nói rằng, các khái niệm quan trọng nhất được chia sẻ bởi hai ngôn ngữ, mặc dù có tên khác nhau (ví dụ always
vs process
) và trong mọi trường hợp, khó khăn trong việc học HDL có liên quan nhiều hơn đến các khái niệm phía sau (chẳng hạn như đồng thời của tất cả các quy trình, CTNH quy ước, vv) hơn so với ngôn ngữ chính nó. Xem xét sự khác biệt, nếu sự lựa chọn là giữa Verilog 2001 và VHDL, cá nhân tôi sẽ giải quyết bất kỳ người mới bắt đầu với VHDL.
Tuy nhiên, như tôi đã nói, đề nghị của tôi thực sự là sử dụng cả VHDL và Verilog-2001 nếu bạn không có quyền lựa chọn. Trái với những gì nhiều người cho rằng, SystemVerilog không phải là ngôn ngữ cấp cao hơn chỉ hữu ích cho thiết kế hoặc xác minh cấp hệ thống và ít chia sẻ với các ngôn ngữ có thể được đưa vào một công cụ tổng hợp cấp cao như SystemC.
Thay vào đó, SystemVerilog là một bản cập nhật đầy đủ các ngôn ngữ Verilog (dựa trên Verilog-2005, thấy http://en.wikipedia.org/wiki/SystemVerilog ) mà có một tập hợp con đầy đủ synthesizable phù hợp với conciseness của Verilog với expressivity cao hơn cả Verilog-2001 và VHDL, theo ý kiến của tôi là tốt nhất của cả hai thế giới.
Ví dụ về các cấu trúc / biểu thức rất có ý nghĩa có sẵn trong SystemVerilog không có sẵn trong Verilog-2001, VHDL hoặc cả hai bao gồm:
always_ff
, always_latch
, always_comb
Khối giúp các nhà thiết kế phân biệt ngay giữa khối thực hiện các loại khác nhau của logic, và - cho always_comb
và always_latch
- (! Một nguồn lỗi vô hạn trong VHDL và Verilog, đặc biệt là cho người mới bắt đầu) suy ra tự động các tín hiệu mà nên đi vào danh sách nhạy cảmlogic
các loại thay thế sự nhầm lẫn wire
và reg
các loại Verilog-2001logic [N-1:0][M-1:0][P-1:0]
), trong khi Verilog-2001 chỉ hỗ trợ các xe buýt hai chiều và VHDL buộc nhà thiết kế phải xác định các loại mới để xây dựng các cấu trúc tương tựstruct
(tương tự VHDL record
) và thậm chí cấp cao hơn interface
có thể được sử dụng rất hiệu quả để mô hình hóa các cấu trúc thông thường (chẳng hạn như các cổng của xe buýt)Tôi đã thử nghiệm tất cả sự khác biệt này "trên da của tôi" trong khi làm việc trên một hệ thống đa lõi khá phức tạp cho mục đích nghiên cứu. Hiện tại nó được hỗ trợ bởi nhiều công cụ và tôi biết chắc chắn (từ việc sử dụng chúng gần như mỗi ngày) rằng nó được hỗ trợ bởi các công cụ Synopsys (cả cho các luồng tổng hợp ASIC và FPGA), Xilinx Vivado (để tổng hợp FPGA) và các công cụ mô phỏng như như MentorGraphics Modelim, Cadence NCsim và Synopsys VCS.
Để hoàn toàn đầy đủ, có hai loại ngôn ngữ quan trọng khác trong hộp công cụ của nhà thiết kế phần cứng (mặc dù chất lượng của các công cụ này có thể thay đổi rất nhiều):
Sự nghiệp của tôi trong 13 năm qua là 80% ASIC và 20% FPGA.
VHDL đã được sử dụng trong 3,5 năm đầu tiên và phần còn lại là Verilog. Tôi không thấy việc chuyển sang Verilog khó khăn và vì lý do địa điểm (Thung lũng Silicon) và lý do tốc độ tôi chỉ viết mã trong Verilog ngày hôm nay.
Ngoài ra, tôi thực hiện rất nhiều giao diện Async, chốt và thiết kế bán tùy chỉnh cấp độ cổng cho hiệu suất, vì vậy VHDL hiện đang sử dụng rất ít trong cuộc sống của tôi. Thay vào đó, tôi thấy SystemVerilog và SystemC hữu ích hơn nhiều để chọn và sử dụng cho các dự án kỹ thuật lớn.
Ở một giai đoạn, các công cụ như Verilator (miễn phí! & Nhanh) đã tiết kiệm cho tôi rất nhiều quỹ cần thiết cho các mô phỏng quan trọng. Bạn chưa có tùy chọn này (chưa) cho VHDL. Và bạn có thể không bao giờ cần nó nếu bạn luôn bơi trong một hồ bơi giàu có hoặc bạn không làm> 1M thiết kế cổng.
Không bao giờ, VHDL tốt hơn cho người mới bắt đầu trước khi họ phát triển các nguyên tắc thiết kế CTNH vững chắc. Thông tin liên lạc của tôi với những người EDA ở đây cho thấy họ đã thực hiện ít phát triển VHDL trong 10 năm qua và có một ổ đĩa lớn đằng sau HLS ngày hôm nay. Vì vậy, sẽ không có nhiều nhà phát triển công cụ VHDL xung quanh ...
Tôi đã đi đến VHDL, chủ yếu là vì tôi biết C rất rõ và thấy rằng việc cố gắng viết verilog có xu hướng khiến tôi viết như thể tôi đang nhắm mục tiêu một CPU không mô tả phần cứng.
Rất khó chịu khi viết một trang mã và nhận ra những gì bạn đã viết thực sự là một chương trình tuần tự không phải là một thiết kế phần cứng, phải là nó sẽ tổng hợp, nhưng kết quả thật xấu xí và chậm chạp.
VHDL đủ khác biệt để tôi thấy dễ dàng hơn nhiều khi nghĩ về thiết kế logic và không kiểm soát dòng chảy.
Vào cuối ngày, ngôn ngữ hiếm khi khó, kỹ năng là trong thiết kế hệ thống chứ không phải gõ.
Trân trọng, Dân.
Năm ngoái, trường đại học mà tôi đã học đã thúc đẩy hai khóa học mở cho người mới bắt đầu. Cả hai đều có cùng một nội dung nhưng một sử dụng VHDL và Verilog khác.
Tất nhiên, tôi đã hỏi cả hai giáo sư về sự khác biệt của VHDL và Verilog. Cả hai không thể chọn tốt nhất.
Vì vậy, tôi đã phải làm cả hai khóa học để xem cái nào có thể tốt hơn với tôi. Ấn tượng đầu tiên của tôi là VHDL giống Pascal hơn và Verilog giống C hơn .
Sau này tôi đã quyết định chỉ làm VHDL vì tại thời điểm đó, tôi đang làm việc với Delphi.
Nhưng tôi không bao giờ làm việc với FPGA sau khóa học. Vì vậy, đây là điều tốt nhất tôi có thể giúp bạn.
Tôi sử dụng VHDL gần như hoàn toàn. Kinh nghiệm của tôi là VHDL phổ biến hơn ở châu Âu, Verilog ở Mỹ, nhưng VHDL cũng đang có những tiến bộ ổn định ở Mỹ. Việc gõ mạnh VHDL không làm phiền tôi vì tôi sử dụng nó như một ngôn ngữ thiết kế phần cứng lỗi thời như được sử dụng trong logic lập trình nhỏ, như AHDL của PALASM hoặc Altera.
Vấn đề lớn đối với hầu hết mọi người sử dụng VHDL là các loại mạnh. Họ muốn thực hiện các bài tập giữa std_logic_vector (mà tôi nghĩ là tập hợp các dây trong mục tiêu) và "int", (mà tôi nghĩ là một số được lưu trữ trong máy tính đang biên dịch thiết kế). Chuyển đổi loại khó chịu nhất mà tôi thường gặp phải là giữa bit_vector (mà tôi nghĩ là mô tả về bộ sưu tập dây trong máy tính biên dịch thiết kế) và std_logic_vector. Trong thực tế, điều đã kéo tôi đến stackexchange ngay bây giờ là tìm kiếm một chuyển đổi từ char (một biến ký tự được lưu trữ trong máy tính biên dịch) sang int.
Trước đây, cuộc xung đột nổi tiếng nhất giữa VHDL và Verilog là cuộc thi thiết kế do tạp chí ASIC & EDA sắp xếp. Google "Kết quả bất ngờ từ một cuộc thi thiết kế phần cứng: Verilog won & VHDL bị mất? - Bạn là người phán xét!", Ví dụ: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html
Cuộc thi là để thực hiện một thanh ghi 9 bit khá phức tạp. Nó có tính năng tăng / giảm cũng như một vài thứ khác. Kết quả là 8 trong số 9 nhà thiết kế Verilog có mã chạy sau 90 phút. Không ai trong số 5 người VHDL có bất cứ điều gì làm việc.
Tôi không sử dụng VHDL như bất kỳ ai khác. Cách tôi sử dụng nó, các loại không theo cách của tôi rất thường xuyên. Tôi đã thực hiện dự án trên giống như cách tôi làm mọi thứ khác, hoàn toàn trong std_logic và std_logic_vector, sử dụng (trở lại trong ngày) thư viện không dấu của IEEE. Thay vào đó, tôi tưởng tượng rằng các nhà thiết kế VHDL đã làm việc với int và bị lạc trong chuyển đổi loại.
Có hai nơi bạn có thể bị lạc trong chuyển đổi loại: (a) thiết kế của bạn và (b) băng ghế thử nghiệm của bạn. Đối với tôi, thật dễ dàng hơn để viết băng ghế thử nghiệm (gần như) hoàn toàn bằng std_logic để băng ghế thử nghiệm có thể được tổng hợp (gần như). Bởi "gần như" Tôi có nghĩa là tôi sẽ xác định đồng hồ với một nhiệm vụ bị trì hoãn không thể tổng hợp được. Nhưng khác với điều đó (và ý kiến), bạn không thể phân biệt băng ghế thử nghiệm của tôi với logic tổng hợp.
Dù sao, trước khi bạn quyết định học ngôn ngữ đầu tiên (hầu hết mọi người đều có sở thích nhưng hầu như mọi người đều sử dụng cả hai), tôi sẽ khuyên bạn nên tìm kiếm cuộc thi đó và đọc bình luận về nó.
Một trong những vấn đề tôi quan sát được với VHDL là vì đây là một ngôn ngữ rất dài dòng, dường như có một xu hướng (trong suy nghĩ của các nhà thiết kế) để tin rằng nó không cần bình luận. Tất nhiên là không đúng, bạn nên viết bình luận trước khi viết mã.
Tôi sẽ cân nhắc hai xu của mình: Bản thân tôi là một người dùng VHDL nặng, nhưng Verilog chắc chắn có thể hoàn thành công việc tốt như vậy. Bạn luôn có thể bọc cái này với cái khác (mặc dù có thời gian và chi phí đánh máy).
Những gì tôi đã tìm thấy là VHDL thô thiếu rất nhiều chức năng tiện dụng. (HOẶC hoặc AND: ing toàn bộ std_logic_vector xuất hiện trong tâm trí). Do đó, việc xây dựng cho mình một hộp công cụ gồm các chức năng tổng hợp, gỡ lỗi sẽ giúp tăng năng suất khi sử dụng VHDL.
Có lẽ ai đó có thể tham khảo một thư viện nguồn mở tốt cung cấp tất cả các chức năng "tốt để có" này?
Các câu trả lời trước bao gồm khá nhiều sự tương phản giữa hai ngôn ngữ và bài viết này cũng đề cập đến các điểm khá tốt: http://www.bitweenie.com/listings/verilog-vs-vhdl/
Tôi cũng muốn làm cho một vài điểm chưa được đề cập.
Tôi khuyên bạn nên học VHDL trước vì một vài lý do. Việc gõ mạnh giúp một số lỗi dễ dàng của người mới bắt đầu bị trình biên dịch bắt gặp. Tôi cũng đã nghe nói VHDL khó nhận hơn sau khi sử dụng Verilog trước.
Thành thật mà nói, bạn không thể sai với một trong hai ngôn ngữ; và nếu bạn làm việc trong ngành này rất lâu, cuối cùng bạn cũng sẽ học cả hai ngôn ngữ.