VHDL cơ bản 5: Cấu trúc của một chương trình VHDL part4

Thảo luận trong 'VHDL CĂN BẢN' bắt đầu bởi Lu ROm, 31 Tháng mười 2015.

Chia sẻ trang này

Lượt xem: 3,143

  1. Lu ROm

    By:Lu ROmin: 31 Tháng mười 2015
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    475
    Đã được thích:
    102
    Phần 1: part 1
    Phần 2: part 2
    Phần 3: part 3
    3. Mô tả kiến trúc (ARCHITECTURE).
    a, Mô tả kiến trúc theo kiểu structural(cấu trúc)

    - Mô tả cấu trúc và sử dụng các module con giúp thiết kế của chúng ta được thực hiện theo nhiều cách khác nhau. Đầu tiên, mô tả structural(cấu trúc) tạo điều kiện thuận lợi cho thiết kế phân cấp. Một hệ thống phức tạp có thể được chia thành nhiều hệ thống con, được biểu diễn bởi một thành phần và thiết kế riêng. Các hệ thống con có thể được chia thành các module nhỏ hơn. Thứ hai, chúng cung cấp phương pháp để sử dụng các mạch đã thiết kế trước hoặc có sẵn. Cuối cùng, mô tả cấu trúc có thể được sử dụng để biểu diễn các kết quả của sự tổng hợp:gate- hoặc cell-level netlist. Về cơ bản, mô tả cấu trúc cho kết quả sát với kết quả tổng hợp nhất.
    - Sau đây, chúng ta cùng tìm hiểu mô tả kiểu cấu trúc bằng một ví dụ sau:
    sr_ltch2.gif
    Mã:
    architecture structure of latch is
      component nor_gate
        port (a,b: in bit;
          c: out bit);
      end component;
    begin
      n1: nor_gate
        port map (r,nq,q);
      n2: nor_gate
        port map (s,q,nq);
    end structure;
    - Những dòng đầu tiên là từ khóa và khai báo một kiến trúc của thực thể. Mình sẽ không giới thiệu lại các bạn có thể xem ở bài trước. Tiếp theo là phần khai báo thành phần gồm từ khóa component và tên của thành phần đó. Các phần chứa bên trong khai báo tương tự như khai báo thực thể,trong đó xác định các cổng đầu vào và đầu ra của một mạch. Có một sự khác biệt quan trọng giữa thực thể, thành phần, và một đối tượng thành phần trong VHDL. Các thực thể mô tả một thiết kế, thành phần mô tả giao diện của một thực thể được sử dụng như là một đối tượng (hoặc một sub-block), và các đối tượng thành phần là một bản sao khác biệt của thành phần đã được kết nối với các bộ phận và các tín hiệu khác.
    - Trong ví dụ này, thành phần nor_gate có hai đầu vào (a và b) và một đầu ra (c). Có hai đối tượng của thành phần nor_gate trong kiến trúc này tương ứng với hai cổng NOR trong các sơ đồ mạch. Tiếp theo là các câu lệnh gọi đối tượng thành phần. Có ba yếu tố trong câu lệnh gọi đối tượng. Đầu tiên là label: n1, cung cấp một tên duy nhất. Thứ 2 là gọi đối tượng thành phần nor_gate. Cuối cùng là port map quy định sự ánh xạ của các tín hiệu thực tế trong đối tượng thành phần.
    - Một số ví dụ khác để các bạn hiểu rõ hơn:
    htaax.png
    - FULL ADDER
    [​IMG]
    Mã:
    -- Example of a four bit adder
    library  ieee;
    use  ieee.std_logic_1164.all;
    -- definition of a full adder
    entity FULLADDER is
         port (a, b, c: in std_logic;
               sum, carry: out std_logic);
         end FULLADDER;
    architecture fulladder_behav of FULLADDER is
    begin
    sum <= (a xor b) xor c ;
    carry <= (a and b) or (c and (a xor b));
         end fulladder_behav;
         -- 4-bit adder
    library  ieee;
    use  ieee.std_logic_1164.all;
    entity FOURBITADD is
         port (a, b: in std_logic_vector(3 downto 0);
               Cin : in std_logic;
                    sum: out std_logic_vector (3 downto 0);
                    Cout, V: out std_logic);
         end FOURBITADD;
    architecture fouradder_structure of FOURBITADD is
         signal c: std_logic_vector (4 downto 0);
    component FULLADDER
               port(a, b, c: in std_logic;
    sum, carry: out std_logic);
               end component;
    begin
               FA0: FULLADDER
                    port map (a(0), b(0), Cin, sum(0), c(1));
               FA1: FULLADDER
                    port map (a(1), b(1), C(1), sum(1), c(2));
               FA2: FULLADDER
                    port map (a(2), b(2), C(2), sum(2), c(3));
               FA3: FULLADDER
                    port map (a(3), b(3), C(3), sum(3), c(4));
               V <= c(3) xor c(4);
               Cout <= c(4);
    end fouradder_structure;