Thông báo

Collapse
No announcement yet.

Thứ tự biên dịch trong VHDL

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Thứ tự biên dịch trong VHDL

    Em chào các anh chị
    Em mới bắt đầu học VHDL nhưng có chỗ không hiểu mong được các anh chị giải đáp:
    em tìm hiểu thì biết trong VHDL có 2 kiểu statement là sequential statement và concurrent statement. Nhưng em không biết 2 loại statement này sẽ được biên dịch thế nào? khi biên dịch cái nào được đặt phép trong process cái nào không? Cách sử dụng 2 kiểu này thế nào ạ?
    Em xin cám ơn nhiều! (

  • #2
    Nguyên văn bởi edwjnavan Xem bài viết
    em tìm hiểu thì biết trong VHDL có 2 kiểu statement là sequential statement và concurrent statement. Nhưng em không biết 2 loại statement này sẽ được biên dịch thế nào? khi biên dịch cái nào được đặt phép trong process cái nào không? Cách sử dụng 2 kiểu này thế nào ạ?
    Vấn đề này nếu bạn được bác Rommel.de, bác tonyvandinh hoặc bạn jefflieu trả lời thì tốt hơn mình nhiều vì mình không chuyên sâu về ngôn ngữ bằng các bác ấy. Tuy nhiên mình sẽ chia sẻ với bạn một số cách hiểu của mình khi mình sử dụng ngôn ngữ này trong thực tế công việc của mình:

    (1) vhdl là một loại ngôn ngữ dùng để mô tả phần cứng với ý nghĩa cốt lõi là máy tính đọc được nó rồi tổng hợp (biên dịch, synthesis) ra mạch thật.
    (2) mạch thật là mạch điện tử nên khi bật điện lên là tất cả các phần tử sẽ chạy ngay (các phần tử là concurrent).

    từ (1) và (2) --> trong ngôn ngữ mô tả phần cứng vhdl, các statement sẽ được biên dịch với ý nghĩa là concurrent statement nên bạn viết x <= a + b; y <= c+d thì mạch logic cho ra x và y sẽ được biên dịch song song hay nói cách khác không có chuyện thực hiện phép toán x trước rồi mới đến thực hiện phép toán y

    Các biên dịch thế nào thì tương đối dài dòng, bạn đọc tài liệu chắc chắn họ sẽ nói tới phần synthesis.

    Tuy nhiên, mạch thật nó rất phức tạp, nó yêu cầu có những phép tính tuần tự, vậy vhdl mới có process để làm nhiệm vụ này. Khi bạn đọc tài liệu bạn sẽ thấy process chỉ bị kích hoạt khi một trong các tín hiệu đầu vào "sensitive list" thay đổi trạng thái. Ngôn ngữ thì nó văn hoa thế thôi chứ thực ra mạch thật của nó là các Flip-Flop (FF), các FF chỉ cho phép đầu ra thay đổi trạng thái khi có clock, và data đầu vào thay đổi. Mạch FF này cho phép thực hiện hầu hết các phép toán tuần tự và nó chính là phần tử process cơ bản.

    Cũng ví dụ trên khi x và y nằm trong process thì tại một thời điểm chỉ một trong hai x hoặc y được thực hiện tùy vào a, b, c, d cái nào đến trước. Một ví dụ khác dễ hiểu hơn:
    - nếu câu lệnh if nằm trong process thì nó sẽ được biên dịch với ý nghĩa sequential tức là cứ phải đợi tín hiệu vào rồi mới thực hiện hàm if

    - nếu if không nằm trong process thì mạch if chỉ đơn giản là tổng hợp của các mạch cơ bản NOT, AND, NOR, ... và nó mang ý nghĩa concurrent nghìa là hàm if luôn luôn hiện diện ở đấy khi có điện và chạy ngay không cần đợi tín hiệu đầu vào nào cả.

    Vậy có gì mâu thuẫn với ý đầu tiên của mình không? Câu trả lời là không. Vì vhdl nhìn process như một concurrent statement mà thôi, nghĩa là bạn có thể viết x<= a+b; hoặc đưa x <=a+b vào một process cũng được. Tuy nhiên, nếu bạn cần chỉ cần tính x khi bạn đã tính xong giá trị a và chỉ muốn cộng với b sau một thời gian trễ nào đấy chẳng hạn thì bạn bắt buộc phải đưa vào process để có thể thực hiện nó sequential.

    Thế nhé, chúc bạn thành công!

    Comment


    • #3
      Em cám ơn nhiều!
      nghe anh nói có nghĩa là cái nào cần theo thứ tự thì mình vứt vào process còn không thì cứ để ngoài phải không ạ?

      Comment


      • #4
        Nguyên văn bởi edwjnavan Xem bài viết
        Em cám ơn nhiều!
        nghe anh nói có nghĩa là cái nào cần theo thứ tự thì mình vứt vào process còn không thì cứ để ngoài phải không ạ?
        hiện tại thì mình chưa biết cách nào khác

        Comment

        Về tác giả

        Collapse

        edwjnavan Tìm hiểu thêm về edwjnavan

        Bài viết mới nhất

        Collapse

        Đang tải...
        X