Thông báo

Collapse
No announcement yet.

[PSOC] Beginner

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

  • [PSOC] Beginner

    Mấy bữa nay mình mới begin với PSOC, đã làm theo hướng dẫn mà bị báo lỗi.
    Mình xài bộ Quartus 9. 1 web edition ( Nios II tương ứng và Modelsim Altera tương ứng)

    _ Không hiểu sao trong Nios II software, build project luôn luôn có 8 lỗi ở mục Problem ( dù mình lấy ngay cái Hello World cũng vậy), còn mục Console ( cửa sổ hiện ra lúc build ) thì bình thường
    _ 1 thắc mắc là sao file system.h không thể add vào dc file .c chính( mở file system.h thì dc nhưng include nó thì ko dc), mình phải "chữa cháy" bằng cách copy những dòng define Address base ở file system.h sang file.c
    _Lúc mô phỏng trên modelsim, compile cứ báo là file nios.c (file chính do SOPC tạo ra) bị lỗi ( lỗi là ko tìm thấy các file như cpu_0.v, jtag_uart.v,.....) nhưng mình rõ ràng cùng add các file đó vào project của modelsim hết rồi mà

    _ Để minh hoạ, mình gởi các file chính cũng như hình chụp thư mục gốc ở quartus, các bạn coi dùm có thiếu gì ko

    Đề: dùng 8 switch control 8 led
    phần nhân Nios trong SOPC builder làm theo Hướng dẫn của Altera
    "tut_sopc_introduction_verilog.pdf" có trong link này

    http://www.alteraforums.com/forum/showthread.php?t=5136

    _top_level : bai1
    _project name : bai1
    _top module: bai1.v (kèm file)
    _SOPC name (tên đặt lúc mở SOPC) : nios
    _ten file trong Nios : Hello_World.c ( kèm file)
    _tên file testbench chính : sim_bai01.v




    Attached Files

  • #2
    Nguyên văn bởi phuongdua Xem bài viết
    Mấy bữa nay mình mới begin với PSOC, đã làm theo hướng dẫn mà bị báo lỗi.
    Mình xài bộ Quartus 9. 1 web edition ( Nios II tương ứng và Modelsim Altera tương ứng)

    _ Không hiểu sao trong Nios II software, build project luôn luôn có 8 lỗi ở mục Problem ( dù mình lấy ngay cái Hello World cũng vậy), còn mục Console ( cửa sổ hiện ra lúc build ) thì bình thường

    _ 1 thắc mắc là sao file system.h không thể add vào dc file .c chính( mở file system.h thì dc nhưng include nó thì ko dc), mình phải "chữa cháy" bằng cách copy những dòng define Address base ở file system.h sang file.c
    _Lúc mô phỏng trên modelsim, compile cứ báo là file nios.c (file chính do SOPC tạo ra) bị lỗi ( lỗi là ko tìm thấy các file như cpu_0.v, jtag_uart.v,.....) nhưng mình rõ ràng cùng add các file đó vào project của modelsim hết rồi mà
    - Bạn copy mấy cái problem đó lên thử.
    - Bạn bỏ file system.h ở đâu? có trong cùng folder với file .c ko? ... nếu không bạn thử dùng option lúc build để include file system.h
    - Bạn xóa mấy file binary rồi zip cai project đó lại rồi up lên dây.

    Comment


    • #3
      Mình mở Nios II 9.1 Software Build Tools for Eclipse (cho QTus 9.1) , chọn File --> New ---> Nios II Application and BSP from Template
      1. 1cửa sổ xuất hiện, mình chọn file *.sopcinfo trong project Quartus, đặt tên, chọn Template Hello World..... ---> kết thúc việc mình làm, phần còn lại là do nó tự tạo

      2. Kết quả tạo ra 2 thư mục Hello_World và Hello_World_BSP. File Hello_World.c nằm trong thư mục Hello_World, còn file system.h nằm ở thư mục Hello_World_BSP

      Note: tất cả cái này là do Nios II tự tạo ra
      ----> Nhưng mình có thể "tạm" chữa cháy dc và ko cần include system.h. Mình chỉ thắc mắc cái lỗi trong cửa sổ "Problem"

      Và điều quan trọng là modelsim ko compile dc file nios.v ( file chính do SOPC builder tạo ra)




      project của mình ( đã xoá file onchip_memory2_0.hex)

      http://www.mediafire.com/?qz0f2vztm2e

      Thanks bạn đã quan tâm. hic

      Comment


      • #4
        Nguyên văn bởi phuongdua Xem bài viết
        Mình mở Nios II 9.1 Software Build Tools for Eclipse (cho QTus 9.1) , chọn File --> New ---> Nios II Application and BSP from Template
        1. 1cửa sổ xuất hiện, mình chọn file *.sopcinfo trong project Quartus, đặt tên, chọn Template Hello World..... ---> kết thúc việc mình làm, phần còn lại là do nó tự tạo
        .....
        Nó báo là hệ thống không đủ RAM để chạy cái code đó.

        2. Bạn coi lại các đường dẫn.

        3. Không biết là web-license thì có thể mô phỏng nios ko. Web-license theo mình biết là không có core NIOS.
        a) có thể vẫn mo phỏng được. Chuyên này mình không chắc.
        b) Nhưng không tạo ra được file cuối cùng để chạy trên board. (cũng có thể chạy được nhưng bị giới hạn thời gian).

        Bạn copy mấy cái lỗi modelsim báo đi.

        Comment


        • #5
          bản web 9.1 có tích hợp thư viện IP, trong đó có Nios processor, tất cả bản Nios, Modelsim mình đều xài free theo altera cho version 9.1 , nên mình nghĩ là tương thích hoàn toàn
          _Nhưng dù sao, nếu ko dc, có thể mình sẽ cài lại bản quartus 7.2 *****, nhưng nếu cài lại bản này, mình sẽ ko có soft modelsim tương ứng ( mình từng down free từ trang modelsim nhưng ko bik vì lý do gì mà cài ko dc, nên mình mới chuyển qua down ở trang Altera). Nếu bạn có modelsim xài dc cho bản ***** Quartus 7.2 thì share mình, mình sẽ thử lại



          Nó báo kô mở dc các file ......., nhưng tất cả các file đó mình đã add cả vào project của quartus lẫn project của Modelsim hết rồi

          Trong Nios II, Mình cũng bik nó báo ko đủ RAM nhưng ko bik tại sao

          "2. Bạn coi lại các đường dẫn." ---> bạn nói rõ hơn đi
          Last edited by phuongdua; 20-03-2010, 11:42.

          Comment


          • #6
            Về system.h ... cách 1 bạn thử copy nó bỏ chung vô cùng 1 folder với file .c, cách 2 trong NIOS EDK --> Project --> Properties-->C++ Include path, add thư mục chứa file system.h vào.

            Về ModelSim, không biết tại sao không thấy file.v ... theo kinh nghiệm thì ModelSIM hơi user-unfriendly hay còn gọi là hơi ngu ... mình chưa mô phỏng verilog nên không chắc ... tạo project MODELSIM ngay trong cái thư mục chính thử để cho mấy file đó nằm cùng 1 chỗ.

            Comment


            • #7
              chào bạn, mình đã sửa dc lỗi, bây giờ thì mình bắt tay vào làm lab "computer oganization" của Altera. Trong phần này, mình có thắc mắc :
              - core Nios khá đơn giản : cpu và ram (32K) và nothing.....more
              _Nhưng phần mềm: mình sẽ đếm số bit1 trong chuỗi bit 1 dài nhất
              vd : 1000011110011 --> Kq: 4
              _ Thắc mắc như sau: khi viết code = assembly(có sẵn và mình đọc hiểu) thì Ok. Nhưng cuối cùng đề có yêu cầu chuyển sang code C. Và mình lúng túng hẳn, trong Ass thì có thể làm việc với các thanh ghi r4,r7,..... Nhưng C thì sao, dùng biến nào để lưu trữ? v. v . Mong bạn chỉ giáo

              -Nếu có thể, bạn cho mình hỏi System Base Address là gì? Cái này gán tự động nhưng mình muốn biết thêm về nó. Thanks

              Comment


              • #8
                C là ngôn ngữ cao hơn Assembly. Trong C, việc dùng thanh ghi nào được giao cho Compiler phụ trách. Trong C, người ta khai báo biến (variable) và sử dụng. Quan trọng nhất của biến là kiểu (datatype), quyết định biến này sẽ nằm trong bộ nhớ như thế nào.
                Ví dụ kiểu character, chiếm 1 byte, kiểu short: 2 byte, kiểu integer: 4 byte.
                .......
                Bạn tìm hiểu thêm về ngôn ngữ C trước... mình tin là trên internet có khá nhiều.
                Ngôn ngữ C cao hơn và hỗ trợ các construct gần gũi với thuật toán hơn: if else, while, for ... thay vì phải dùng Compare/Jump như trong assembly.
                ------

                Không chắc SYSTEM_BASE_ADDRESS của bạn nghĩa là gì. Có thể bạn thắc mắc cái này:
                Trong computer organization, một khái niệm quan trọng là Memory mapped peripheral, mỗi một ngoại vi được phân (allocate) cho một vùng nhớ gồm có BASE và RANGE. Trong khi thiết kế SOPC, bạn sẽ thấy mỗi ngoại vi được phân địa chỉ đầu và cuối (START ADDRESS và END ADDRESS). Khi CPU ghi vào vùng nhớ nào thì ngoại vi đó sẽ tự decode "ah, vùng nhớ này thuộc lãnh địa của mình" và lấy data trên bus.

                Comment


                • #9
                  Mấy cái lỗi kia cuối cùng là bị gì?

                  Comment


                  • #10
                    Trong C thì bạn dùng một biến như thanh ghi thôi, chẳng hạn int i=01101110b (8bits), rồi cũng dùng các phép dịch bit và so sánh để đếm số bit 1, mình ghi tạm cái mã đây nhá:
                    Code:
                    #define num_len=8;   //số 8bits
                    unsigned int num=15;
                    int num_1=0;   //số bit 1
                    
                    for (i=0;i<num_len;i++)
                    {
                         if(num%2!=0)//bit ngoài cùng bên phải là 1
                               num_1++;
                         num=num>>1;
                    }
                    Chưa test nên ko biết đúng sai thế nào.
                    Còn nếu bạn làm việc với các khối ngoại vi như thì có các hàm riêng, ví dụ như nếu bạn dùng uart để xuất lên console thì có thể khai báo stdout, stderr là uart, sau đó dùng các hàm printf bình thường, hoặc bạn muốn xuất nhập data ra/vào PIO thì dùng IOWR, IORD...Nói chung là bạn nên tìm 2 cuốn về Nios của Altera, hình như một cuốn là giới thiệu kiến trúc, còn cuốn kia là Software developer's handbook thì sẽ rõ hơn.
                    Còn cái BASE_ADDRESS có phải là cái khi dùng SOPC builder bạn cho nó gán tự động ko? Nếu vậy thì bác Jeff trả lời rồi đó. Khi giao tiếp với ngoại vi dạng PIO bạn phải biết địa chỉ này (thường nằm trong system.h đối với Nios IDE) để dùng các hàm IOWR, IORD...
                    Chuyện nhỏ như con thỏ,bắt thỏ mới là chuyện lớn!!!

                    Comment


                    • #11
                      Thanks all. Cái lỗi trên thật ra mình giải quyết = 2 bước (do thiếu Ram thật )
                      1. phải chuột lên Hello_World --> system library Properties--> check các ô "reduce C......" để thu gọn thư viện chương trình lại và ko tốn nhiều Ram
                      2. sửa Ram (Memory on chip) lên 32 KB ( hồi trước theo Tut để 4KB, Tut nó xài Altera Monitor nên ko sao, còn mình xài Nios II IDE với project Hello_World khá nặng nên ko đủ. Hihi


                      Thật ra mình biết viết C nhưng là do toàn viết C trên các trình biên dịch "bình thường" nên có đôi chút thắc mắc khi viết C kiểu này, mình thấy Led hay Switch trong vd trước đều có khai địa chỉ Base nên cứ nghĩ viết C trong đây ko dc tự tiện đặt biến .

                      @ it4rb : trong code của bạn, dòng define đầu tiên theo mình phải là
                      Code:
                       #define  num_len 8
                      (không chấm phẩy và ko có dấu "=" ??? Vì cũng khá lâu mình ko viết nên muốn check lại).Thanks

                      _ Nhưng file system. h thì tới giờ trong vd trước mình cũng ko thấy đâu, biên dịch thành công nhưng chẳng thấy tăm hơi file này đâu cả, nên phải copy base address vào code C. Hic. Các bạn có ai biết vụ này là sao ko?
                      Last edited by phuongdua; 23-03-2010, 18:38.

                      Comment


                      • #12
                        Ý bạn là ko tìm thấy system.h?, bạn thử tìm trong cái hello_word_sys_lib, phần system_description xem,ở cây thư mục bên trái của Nios IDE ấy.
                        Chuyện nhỏ như con thỏ,bắt thỏ mới là chuyện lớn!!!

                        Comment


                        • #13
                          Mình đã tìm thấy , nhưng ko biết cách nào để include nó đây, chẳng lẽ copy nó vào thư mục hello_world?

                          _Quay lại với khái niệm base address, mỗi thiết bị ngoại vi dc phân cho 1 vùng nhớ, vậy "vùng nhớ đó" ở đâu? nó là vùng nhớ dc cấp phát trên Ram on chip memory ( trong trường hợp này ) phải ko?

                          Comment


                          • #14
                            Ủa, mình nhớ là đâu có cần include nó đâu, IDE tự động nhận cái đó mà, bạn vô properties của hello_word, phần project reference xem đã check vào cái hello_word_sys_lib chưa.
                            Còn cái base address thì theo mình hiểu ko phải là vùng nhớ trên ram mà là ko gian nhớ của con CPU, thể hiện nó chiếm địa chỉ bắt đầu từ đâu, bạn hình dung là con cpu trần trụi chưa có ngoại vi gì hết, sau đó bạn đem các cục ngoại vi ghép vô, giả sử cái onchipmem có 4k byte, tức là nó cần 4096 địa chỉ của cpu, bạn có thể gán 4096 địa chỉ này vào bất cứ chỗ nào bạn muốn, giả sử là từ 1024-5119 đi, khi đó thì 1024 chính là base adr, còn 4096 là range. Bạn có thể đọc thêm ở sách Vi xử lý của thầy Mỹ BKHCM, phần thếit kế hệ vxl.
                            Cái #define mình bị sai, đúng là ko có ;
                            Chuyện nhỏ như con thỏ,bắt thỏ mới là chuyện lớn!!!

                            Comment


                            • #15
                              Thanks nhiều lắm.Sau này có gì lại mong các bạn cùng nhau giải đáp. hihi

                              ---------------
                              Hi, có 1 câu hỏi "rất chuối" nhưng mình phải hỏi. Giả sử làm xong, copy project của mình sang chỗ khác (sang máy khác hay sang thư mục khác chẳng hạn) thì làm sao mở project từ Nios II IDE . Vì hình như cái lệnh "open project" chỉ áp dụng cho project nào đang bị đóng nhưng vẫn "có mặt" trong cửa sổ "Nios C/C++ project". Còn project ko có sẵn trong cửa sổ đó thì sao (mới copy sang thì làm sao mà có trong Nios dc), mình cũng đã dùng lệnh "import " nhưng hình như tên project của mình mà lỡ trùng với cái nào đã có sẵn thì cũng ko dc( mà chuyện trùng tên project nhiều khả năng xảy ra, ví dụ như như khi bạn copy project từ D:\ sang E:\ , vậy thì chỉ có cái trong D là có sẵn trong "Nios C/C++ project", còn cái ở E thì phải import, nhưng nó ko cho vì tên project y chang nhau !!!)
                              Last edited by phuongdua; 23-03-2010, 12:33.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X