Thông báo

Collapse
No announcement yet.

Liên kết các files .vhd trong một project (VHDL)

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

  • Liên kết các files .vhd trong một project (VHDL)

    Phần cấu hình coniguration có lẻ để hậu xét, vì tui cố đọc thì càng thấy rối.
    Tui lại gặp một vấn đề như sau:
    Trong một số project tui thấy trong cùng một project có nhiều file .vhd được add cùng với nhau. Chẳn hạn project một con vi xử lí (uP) thì có các file .vhd như ALU.vhd, math.vhd,...Mấy bác cho hỏi là giả sử tui muốn tạo ra nhiều file .vhd trong cùng một project, mỗi file là một khối chức năng riêng (như một module con ), và 1 file .vhd chính ( tạm gọi là main.vhd) sẽ sử dụng các file con này để tạo ra một thiết kế hoàn chỉnh thì phải làm như thế nào ? Ta có thể mô phỏng từng file con riêng lẻ trước khi mô phỏng cả thiết kế lớn không, cách làm như thế nào ? Từ file chính (main.vhd) ta có thể gọi các hàm (function), thủ tục (procedure) đã được viết sẵn trong các file .vhd con có được không, có cần khái báo thêm gì không, chẳn hạn tên của một tín hiệu (signal) khai báo trong các file con khi ta sử dung lại trong file chính thì nó có hiểu không ?
    Tui đang làm tới chỗ này và bắt đầu bí, mong các bác chỉ dẫn.

  • #2
    Bạn có thể mô phỏng từng modul riêng lẻ. Để mô phỏng thì thông thường có hai phương pháp:
    - Phương pháp 1: bạn viết scripts định dạng các tín hiệu lối vào (hoặc dùng tính năng khai báo tín hiệu lối vào của phần mềm mô phỏng). Phương pháp này dùng cho các modul /thiết kế nhỏ.
    - Phương pháp 2: bạn xây dựng một testbench cho mô đun cần kiểm tra.

    Về việc liên kết các files .vhd của một dự án cũng có nhiều cách để liên kết:
    - Bạn có thể khai báo các module dưới dạng các components trong file mẹ (trong trường hợp của bạn là main.vhd). Sau đó bạn chỉ việc gọi nó ra và mapping là xong.
    - Một cách khác là bạn có thể tạo gói (package). Nếu bạn muốn sử dụng các thành phần trong gói thì bạn phải khai báo gói và gọi tên từng thành phần khi sử dụng.


    Comment


    • #3
      cảm ơn anh yesme@. Sao anh không để thảo luận của chúng ta trong cái thread cũ cho đủ tập, sau này mình có bộ sưu tập các câu hỏi luôn...
      Ý câu hỏi của em có phần khác với anh trả lời :
      Nếu ta sử dụng các components hay package thì các components hay package này phải viết chung trong một file thôi (file main.vhd). Ở đây em muốn nói là mình có nhiều file .vhd riêng biệt. Ví dụ cái project em up lên đây là một con CPU 32 bit, cái project này có nhiều file .vhd lắm. Và em muốn hỏi cách thức mình tạo ra nhiều file con như vậy, đương nhiên là em ko có ý định làm cả con CPU như zậy đâu
      (file đính kem: Design CPU 32 bit by VHDL)
      Attached Files

      Comment


      • #4
        Bạn có thể tạo bao nhiêu file .vhd cũng được. Số file .vhd chỉ thuộc về vấn đề tổ chức thiết kế của bạn mà thôi. Tổ chức làm sao cho khoa học và tiện lợi khi tái sử dụng.
        Về việc liên kết thì mình đã nói ở trên.


        Comment


        • #5
          Nguyên văn bởi yesme@ Xem bài viết
          Bạn có thể tạo bao nhiêu file .vhd cũng được. Số file .vhd chỉ thuộc về vấn đề tổ chức thiết kế của bạn mà thôi. Tổ chức làm sao cho khoa học và tiện lợi khi tái sử dụng.
          Về việc liên kết thì mình đã nói ở trên.
          Nhưng theo tui được biết (tức không chắc lắm ) thì chỉ có mỗi cách PORT MAP là có thể dùng để liên kết các file vhd trong 1 project lại với nhau thôi, trong cái project về CPU 32 bit họ cũng dùng PORT MAP thôi.
          Bác yesme@ thấy có đúng không nhỉ ?

          Comment


          • #6
            Thay vì khai báo component và instantiate: U_pcimem: pcimem port map, bạn cũng có thể instantiate thẳng: U_pcimem: entity work.pcimem(rtl) port map. Work = default library, thay đổi cho phù hợp với tên library của bạn (nếu bạn để module vào library).

            Signal chỉ dùng trong module của nó thôi.

            Comment


            • #7
              Nguyên văn bởi nemesis21 Xem bài viết
              Thay vì khai báo component và instantiate: U_pcimem: pcimem port map, bạn cũng có thể instantiate thẳng: U_pcimem: entity work.pcimem(rtl) port map. Work = default library, thay đổi cho phù hợp với tên library của bạn (nếu bạn để module vào library).

              Signal chỉ dùng trong module của nó thôi.
              Tui chưa hiểu ý này cho lắm, bác có thể minh họa bằng ví dụ cụ thể được không ạ ?

              Bác cho hỏi là chúng ta có thể đặt PORT MAP vào bên trong process được không vậy,
              chẳn hạn như:
              process
              begin

              U1 : my_work PORT MAP (x,y,z) ;
              ...
              end process ;
              Last edited by thavali; 27-06-2007, 14:51.

              Comment


              • #8
                Nguyên văn bởi thavali Xem bài viết
                Tui chưa hiểu ý này cho lắm, bác có thể minh họa bằng ví dụ cụ thể được không ạ ?

                Bác cho hỏi là chúng ta có thể đặt PORT MAP vào bên trong process được không vậy,
                chẳn hạn như:
                process
                begin

                U1 : my_work PORT MAP (x,y,z) ;
                ...
                end process ;
                Đó chỉ là 2 cách port map với một mục đích như nhau thôi. Người nào thích dùng cách nào thì dùng. Dùng components thì phải khai báo, còn dùng instantiate thì không cần vì mình chỉ rõ nó ở đâu rồi.(U1: entity work.grabber_image(rtl) port map( ...))

                Ví dụ với components
                Trước tiên phải khai báo:
                COMPONENT sramctl
                PORT(
                clk_i : IN std_logic;
                rst_i : IN std_logic;
                adr_i : IN std_logic_vector(31 downto 0);
                dat_i : IN std_logic_vector(31 downto 0);
                stb_i : IN std_logic;
                we_i : IN std_logic;

                ......
                );
                END COMPONENT;
                Sau đó thì port map nó trong phần BEGIN ... END của architecture:
                Inst_sramctl: sramctl PORT MAP(
                clk_i => ,
                rst_i => ,
                adr_i => ,
                dat_i => ,
                dat_o => ,
                ack_o => ,
                stb_i => ,
                we_i => ,

                ....
                );

                Còn nếu bạn dùng cách kia thì dùng luôn trong phần BEGIN ... END của architecture, không cần khai báo với điều kiện thực thể này ở trong thư viện work)
                sramctl : entity work.sramctl
                generic map( num_write_waits => 0, num_read_waits => 0 )
                port map ( clk_i => clk,
                rst_i => rst,
                adr_i => adr_i_s,
                dat_i => dwr,
                dat_o => dat_o_s0,
                ...
                );

                Mình không hiểu bạn đang làm gì mà lại cho một component vào trong process vậy?? Theo mình đuợc biết thì không được!
                It's not a BUG, it's a FEATURE!

                Comment


                • #9
                  Nguyên văn bởi thavali Xem bài viết
                  Phần cấu hình coniguration có lẻ để hậu xét, vì tui cố đọc thì càng thấy rối.
                  Tui lại gặp một vấn đề như sau:
                  Trong một số project tui thấy trong cùng một project có nhiều file .vhd được add cùng với nhau. Chẳn hạn project một con vi xử lí (uP) thì có các file .vhd như ALU.vhd, math.vhd,...Mấy bác cho hỏi là giả sử tui muốn tạo ra nhiều file .vhd trong cùng một project, mỗi file là một khối chức năng riêng (như một module con ), và 1 file .vhd chính ( tạm gọi là main.vhd) sẽ sử dụng các file con này để tạo ra một thiết kế hoàn chỉnh thì phải làm như thế nào ? Ta có thể mô phỏng từng file con riêng lẻ trước khi mô phỏng cả thiết kế lớn không, cách làm như thế nào ? Từ file chính (main.vhd) ta có thể gọi các hàm (function), thủ tục (procedure) đã được viết sẵn trong các file .vhd con có được không, có cần khái báo thêm gì không, chẳn hạn tên của một tín hiệu (signal) khai báo trong các file con khi ta sử dung lại trong file chính thì nó có hiểu không ?
                  Tui đang làm tới chỗ này và bắt đầu bí, mong các bác chỉ dẫn.

                  Tốt nhất bạn lên đọc hoàn chỉnh một cuốn sách về VHDL đi. Nếu đọc rồi thì bạn sẽ hiều ngay thôi. Vì đây là các quy tắc cơ bản của VHDL.

                  Nếu bạn cần tài liệu thì mình sẽ gửi cho.
                  It's not a BUG, it's a FEATURE!

                  Comment


                  • #10
                    Còn nếu bạn dùng cách kia thì dùng luôn trong phần BEGIN ... END của architecture, không cần khai báo với điều kiện thực thể này ở trong thư viện work)
                    sramctl : entity work.sramctl
                    generic map( num_write_waits => 0, num_read_waits => 0 )
                    port map ( clk_i => clk,
                    rst_i => rst,
                    adr_i => adr_i_s,
                    dat_i => dwr,
                    dat_o => dat_o_s0,
                    ...
                    );
                    "thực thể này ở trong thư viện work" là thế nào vậy bác, bác có thể giải thích rõ hơn không ?
                    generic map( num_write_waits => 0, num_read_waits => 0 )
                    : cái generic map có ý nghĩa như thế nào vậy bác, tui chưa hiểu genericgeneric map là gì mặc dù đã đọc sách rồi . Bác giải thích giúp nhé .

                    Comment


                    • #11
                      Nguyên văn bởi thavali Xem bài viết
                      "thực thể này ở trong thư viện work" là thế nào vậy bác, bác có thể giải thích rõ hơn không ?
                      generic map( num_write_waits => 0, num_read_waits => 0 )
                      : cái generic map có ý nghĩa như thế nào vậy bác, tui chưa hiểu genericgeneric map là gì mặc dù đã đọc sách rồi . Bác giải thích giúp nhé .
                      Nếu bạn dùng ISE thì khi thêm một file mới vào thì file này đã thuộc trong thư viện mặc định của project.

                      Generic là các thông số được sử dụng để chuyển thông tin vào trong các thực thể.
                      Last edited by traidot; 29-06-2007, 17:06.
                      It's not a BUG, it's a FEATURE!

                      Comment


                      • #12
                        Nguyên văn bởi thavali Xem bài viết
                        generic map( num_write_waits => 0, num_read_waits => 0 )
                        : cái generic map có ý nghĩa như thế nào vậy bác, tui chưa hiểu genericgeneric map là gì mặc dù đã đọc sách rồi . Bác giải thích giúp nhé .
                        Generic map là một cú pháp của VHDL thực hiện việc mapping các thông số cụ thể vào một design dạng generic của bạn.
                        Ví dụ, bạn đã design một thanh ghi N bits. Bây giờ bạn muốn sử dụng design đó để tạo một thanh ghi 8 bit thì bạn cần map thông số độ dài của thanh ghi N = 8.


                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        • nhathung1101
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi nhathung1101
                          Vừa thử lại, con loa kẹo kéo Tầu giá 1tr2 và loa Pionner.

                          Thử đọc chứ chưa hát:

                          - Ủa ái ni thì loa tàu ra đúng.

                          - Ủa ái ni trên con Pionner thành Ùa ái ni. Mà từ "ái" lại rõ to.

                          Thử "chèm...
                          hôm nay, 00:23
                        • nhathung1101
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi nhathung1101
                          Nhưng anh em nào còn đam mê sửa nguồn thì cứ cố gắng.
                          Tiền số đang có giá, mà nguồn cho bọn "trâu cày" toàn vài Kw.
                          Làm được vẫn sống tốt. Tôi thì nghỉ hưu rồi.

                          Hôm trước có ku em năn nỉ tôi sửa cho nó cái nguồn 12V/170Amp. Tôi bảo đi mua cái mới.
                          hôm nay, 00:02
                        • nhathung1101
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi nhathung1101
                          Ngày xưa, còn làm với bên viễn thông (giờ chẳng thèm làm vì công bèo).
                          Tôi sửa nguồn, tối thiểu phải đủ công cụ:
                          - Osciloscope.
                          - Logic Analyzer (để làm với chuẩn truyền thông)
                          - Đồng hồ đo dòng. Đồng hồ đo áp. Đồng...
                          Hôm qua, 23:43
                        • nhathung1101
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi nhathung1101
                          Thì không cấp nguồn là an toàn nhất rồi còn gì? Lo gì cháy nổ.
                          Còn đo đạc thì kiểm tra huyết áp hay nhịp tim ở cô hàng xóm vậy.

                          Còn Mèo thì toàn xúi thâm, thằng nào nghe cứ lãnh đủ. Chuyên lừa chuột non....
                          Hôm qua, 23:32
                        • nhathung1101
                          Trả lời cho Trình điều khiển bước rời rạc
                          bởi nhathung1101
                          "Chú ấy" ở bên Quảng Đông đấy. Đang bị "rã rời" rồi, nên đừng hướng vào con đường tội lỗi nữa....
                          Hôm qua, 23:26
                        • nhathung1101
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi nhathung1101
                          Loa Tầu nó đáp ứng được tiếng VN, vì mấy câu hát kiểu "oăng oẳng như sủa" Nhật nó không có. Nó chỉ hát kiểu "đục đục chạc chạc" thôi.
                          Nếu thấy loa Tầu hay, thì gỡ cái mác SONY gắn vào là xong. Còn cái loa Nhật thì vứt luôn, chỉnh làm quái gì.
                          ...
                          Hôm qua, 23:17
                        • since0501
                          Trả lời cho Pin Li-FePO4 (pin sắt) rất dể hỏng! Các biện pháp ngăn ngừa.
                          bởi since0501
                          Mình đào mộ xíu, cho mình hỏi là pin của bác vẫn ok chứ? Mình vừa đóng khối pin 16 cell 40135 thì khi chạy điện áp nó sụt so với khi nghỉ như video mình dẫn link, vậy cho mình hỏi là dung lượng pin sẽ tính khi áp nghỉ hay áp đang hoạt động, và pin sụt áp như vậy là bình thường hay pin kém?
                          ht...
                          Hôm qua, 17:56
                        • mèomướp
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi mèomướp
                          Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                          10-01-2025, 13:11
                        • tuyennhan
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi tuyennhan
                          Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                          10-01-2025, 09:25
                        • tuyennhan
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi tuyennhan
                          Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                          Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                          10-01-2025, 09:10
                        Đang tải...
                        X