User Tag List

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối
Hiện kết quả từ 1 tới 10 của 11

Chủ đề: Spartan-3, VHDL và các vấn đề liên quan

  1. #1
    svBK's Newbie Avatar của FFGmember
    Tham gia ngày
    Feb 2006
    Bài gửi
    9

    Mặc định Spartan-3, VHDL và các vấn đề liên quan

    Em xin mở luồng mới này để thảo luận về FPGA, VHDL. Dùng kit "Spartan-3 starter kit". Kit này được cái rẻ tiền dễ mua. Có thể mua tại Vietnam. ( đã có một công ty cung câp roài ) giá hình như là 99$.

    Về cái này em xin Update lại thông tin và sẽ có một bài giới thiệu về kit này sau.

    Lần sửa cuối bởi FFGmember; 05-02-2006 lúc 08:28 AM

  2. #2
    svBK's Member
    Tham gia ngày
    Aug 2004
    Bài gửi
    25

    Mặc định

    Hồi trước mình cũng có đi xem buổi giới thiệu của công ty NGÂN GIANG. Đáng tiếc là không có cơ hội để tiếp cận nó. Do vậy nếu ai đã làm hoặc có KIT thì mới tham gia đc bạn ah.
    Trong trường có đc học cái này đâu. Có lẽ vài năm nữa cái này sẽ có chỗ đứng.

  3. #3
    Uỷ viên ban điều hành Box khoa ĐTVT Avatar của nothingtolose
    Tham gia ngày
    Sep 2004
    Bài gửi
    1.817

    Mặc định

    Quote Nguyên văn bởi FFGmember
    Em xin mở luồng mới này để thảo luận về FPGA, VHDL. Dùng kit "Spartan-3 starter kit". Kit này được cái rẻ tiền dễ mua. Có thể mua tại Vietnam. ( đã có một công ty cung câp roài ) giá hình như là 99$.

    Về cái này em xin Update lại thông tin và sẽ có một bài giới thiệu về kit này sau.

    Nếu đúng là "Spartan-3 starter kit" thi giá 99 USD là chính xác, cần thêm cái Xilinx Foundation Tool nữa nhưng vấn đề là định làm gì.

  4. #4
    svBK's Newbie
    Tham gia ngày
    Oct 2005
    Bài gửi
    24

    Mặc định

    Anh nothing cho một bài overview về Microblaze được không ạ
    Cảm ơn anh

  5. #5
    Uỷ viên ban điều hành Box khoa ĐTVT Avatar của nothingtolose
    Tham gia ngày
    Sep 2004
    Bài gửi
    1.817

    Mặc định

    Lên xess.com tham khảo các ứng dụng của loại KIT này, còn về Microblaze thì hẹn chú CN tuần này nhé chứ tuần này thì chịu.

  6. #6
    svBK's Newbie
    Tham gia ngày
    Oct 2005
    Bài gửi
    24

    Mặc định

    Anh nothing ơi mai là CN rồi, em chờ bài viêt của anh cả tuần rùi đó.
    Cảm ơn anh. :d

  7. #7
    svBK's Newbie
    Tham gia ngày
    Oct 2005
    Bài gửi
    24

    Mặc định

    #include <xtmrctr_l.h>
    #include <xuartlite_l.h>
    #include <xintc_l.h>
    #include <xgpio_l.h>
    #include <xparameters.h>

    unsigned int count = 1; //Nhap nhay led don
    unsigned int driver_led=1; //Chon led
    unsigned int giay_chuc=0;
    unsigned int giay_dv=0;
    unsigned int phut_chuc=0;
    unsigned int phut_dv=0;
    unsigned int phut=0;
    unsigned int giay=0;

    //static char display_data[10] = {0x03, 0xC0, 0x12, 0x06, 0x4c, 0x24, 0x20, 0x0f, 0x00, 0x04};
    static char display_data[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

    void timer_int_handler1 (void * baseaddr_p) { //Ngat 1000 Hz-->quet led
    unsigned int csr;
    csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0);
    if (csr & XTC_CSR_INT_OCCURED_MASK) {
    //1. Tai sao khi ngắt timer lai phải đọc nội dung cua csr va tại sao laị phải & với bit XTC_INT_OCCURED_MASK
    2. Bit XTC_INT_OCCURED_MASK có ý nghĩa gì và tài liệu nào của xilinx nói về các bit kiểu này. Em không tìm thấy?

    if ((driver_led<<=1) > 8)
    { driver_led=1; }

    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,0xf f); //Tat led chong nhieu
    XGpio_mSetDataReg(XPAR_DRIVER_LED7SEG_BASEADDR, 1,~driver_led);//Thiet lap cho led 1 sang (or 3)

    switch (driver_led)
    {
    case 1:
    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,dis play_data[giay_dv]);
    break;
    case 2:
    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,dis play_data[giay_chuc]);
    break;
    case 4:
    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,dis play_data[phut_dv]);
    break;
    case 8:
    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,dis play_data[phut_chuc]);
    break;
    default :
    XGpio_mSetDataReg(XPAR_LED_7SEGMENT_BASEADDR,1,0xf f);
    }
    _wait (1000);

    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0, csr);

    }
    }



    void timer_int_handler(void * baseaddr_p) { //Ngat 1Hz
    unsigned int csr;
    unsigned int gpio_data;

    csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_0_BASE ADDR, 0);
    if (csr & XTC_CSR_INT_OCCURED_MASK)
    {
    if ((count <<= 1) > 128)
    count = 1;


    giay=giay+1;
    if (giay==59) {
    giay=0;
    phut=phut+1; }
    if (phut==59) {
    phut=0;}

    giay_chuc=giay/10;
    giay_dv=giay%10;
    phut_chuc=phut/10;
    phut_dv=phut%10;



    XGpio_mSetDataReg(XPAR_LEDS_8BIT_BASEADDR, 1,~count);
    //Xoa ngat timer
    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_0_BASE ADDR, 0, csr);
    }
    }


    void main(void) {
    unsigned int gpio_data;


    microblaze_enable_interrupts();

    //Bat dau trinh dieu khien ngat
    XIntc_mMasterEnable(XPAR_OPB_INTC_0_BASEADDR);

    //Thiet lap dau ra
    XGpio_mSetDataDirection(XPAR_LEDS_8BIT_BASEADDR,1, 0x00);
    XGpio_mSetDataDirection(XPAR_LED_7SEGMENT_BASEADDR ,1, 0x00);
    XGpio_mSetDataDirection(XPAR_DRIVER_LED7SEG_BASEAD DR,1, 0x00);

    //Thiet lap thoi gian ngat
    XTmrCtr_mSetLoadReg(XPAR_OPB_TIMER_0_BASEADDR, 0,50000000);
    XTmrCtr_mSetLoadReg(XPAR_OPB_TIMER_1_BASEADDR, 0,50000);

    /* reset the timers, and clear interrupts */
    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_0_BASE ADDR | XPAR_OPB_TIMER_1_BASEADDR,0,XTC_CSR_INT_OCCURED_MA SK | XTC_CSR_LOAD_MASK );


    /* Enable timer interrupts in the interrupt controller */
    XIntc_mEnableIntr(XPAR_OPB_INTC_0_BASEADDR, XPAR_OPB_TIMER_0_INTERRUPT_MASK | XPAR_OPB_TIMER_1_INTERRUPT_MASK);


    /* start the timers */
    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_0_BASE ADDR | XPAR_OPB_TIMER_1_BASEADDR, 0,XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK |XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK);

    /* Wait for interrupts to occur */
    while (1);

    }

    int _wait(loop_count)
    int loop_count;
    {

    int sum, data;

    sum = 0;

    for (data = 0; data < loop_count; data++) {
    sum = sum + data;
    }
    }


    Anh xem giúp em sao chương trinh trên lại không xay ra ngắt timer 1 (timer_int_handler1) và không thể quét led được. Cả 2 ngắt timer đã được config trong .mhs và .mss với mức ưu tiên ngắt định thời 0 lớn hơn.
    Ngắt timer 0 thì có xảy ra, nhưng ngắt timer 1 ko xảy ra (Em đưa các led đơn (leds_8bit) thì nó không hoạt động)

    Anh có chương trinh nào viết cho microblaze thì gửi cho em để em tham khảo với. Trên mạng hiếm ví dụ quá, mà tài liệu thì mênh mông
    Email: alpenliebe_bkhn@yahoo.com
    Cảm ơn anh

    Lần sửa cuối bởi bybb; 17-02-2006 lúc 09:57 AM

  8. #8
    Uỷ viên ban điều hành Box khoa ĐTVT Avatar của nothingtolose
    Tham gia ngày
    Sep 2004
    Bài gửi
    1.817

    Mặc định

    1. Lệnh csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0); -> [COLOR="Navy"] Kiểm tra trạng thái của time 0

    2. Lệnh if (csr & XTC_CSR_INT_OCCURED_MASK) : Nếu ngắt thực sự xảy ra thì trạng thái của timer(csr) = XTC_CSR_INT_OCCURED_MASK -> Bít XTC_CSR_INT_OCCURED_MASK có chức năng báo hiệu 1 ngắt thực sự xảy ra.

    3. Tiếp theo là thủ tục xử lí ngắt

    4. Lệnh cuối XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0, csr); -> Xóa ngắt timer

    * Chú cài bộ EDK vào, và xem kĩ các vi dụ của nó rồi mới làm cái mới thay đổi từng lệnh và kiểm tra.

    Một số link cho chú tham khảo

    1. http://www.mail-archive.com/lwip-use.../msg00547.html

    2. http://www.itee.uq.edu.au/~listarch/.../msg00059.html

    3. Lab trainning : http://www.cc.ntut.edu.tw/~tylee/Cou...206.3i).ppt#15

    4. http://128.138.224.40/ecen5633-f05/lab5-5633-ppc.pdf

    Dạo này tớ bận thật, nên đúng là không có thời gian viết cụ thể (nếu viết qua qua thì tớ không muốn) -> Hôm trước hình như tớ có gửi tài liệu về Xilinx cho ai thì phải, không biết có phải chú không)

    Microblaze và Nios thực sự rất hấp cho các hệ nhúng trung bình trên FPGA, hãy dựa vào đó để xây dựng các ứng dụng.

    À quên câu hỏi về hai thủ tục ngắt

    Thủ tục 1: void timer_int_handler1 (void * baseaddr_p) { //Ngat 1000 Hz-->quet led
    unsigned int csr;
    csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0); -> Kiểm tra timer 0;

    Thủ tục 2: void timer_int_handler(void * baseaddr_p) { //Ngat 1Hz
    unsigned int csr;
    unsigned int gpio_data;

    csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_0_BASE ADDR, 0); -> Cũng kiểm tra timer 0

    Ở cả 2 thủ tục chú đều nhìn vào Timer 0 và xóa timer 0 vậy timer 1 không hề được xử lí. Một ví dụ xử lí 2 timer ở đây

    void timer_int_handler(void * baseaddr_p) {
    Xint32 baseaddr = (int)baseaddr_p;
    Xuint32 csr0;
    Xuint32 csr1;

    Xuint32 count0 = 0;
    Xuint32 count1 = 0;

    /* Read timer 0 CSR to see if it raised the interrupt */
    csr0 = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0);

    /* Read timer 1 CSR to see if it raised the interrupt */
    csr1 = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 1);

    /* See if the timer0 went off */
    if (csr0 & XTC_CSR_INT_OCCURED_MASK) {


    // SOME DEBUG OUTPUT YAY
    // x=XTimerCtr_mReadReg(XPAR_OPB_TIMER_1_BASEADDR, 0, 0x08);
    // xil_printf("\r\n*** Timer 0 = ");
    // xil_printf("%x",x);
    // xil_printf(" *** ");

    //save/iterate count value

    // xil_printf("%D",count);
    count = count +1;

    // xil_printf(" ***");

    /* Clear the timer interrupt */
    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 0, csr0);
    }

    /* See if the timer1 went off */
    if (csr1 & XTC_CSR_INT_OCCURED_MASK) {


    /* Clear the timer interrupt */
    XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASE ADDR, 1, csr1);
    }
    // xil_printf("\r\n*** Leaving ISR ***\r\n");
    }
    Full link : http://www.itee.uq.edu.au/~listarch/.../msg00059.html

    Hỵ vọng giúp được chú phần nào. Enjoy

  9. #9
    svBK's Newbie Avatar của FFGmember
    Tham gia ngày
    Feb 2006
    Bài gửi
    9

    Mặc định Cách truyền dữ liệu nối tiếp trong FPGA

    Em đang phải giải quyết một bài toán thế này. Mọi người giúp ý kiến cho em nhé:

    Em có hai khối A, B truyền và nhận dữ liệu nối tiếp. A truyền cho B dữ liệu 8bit, và một lần truyền ( một Block ) là phải truyền liên tiếp 16Byte. Bên B sẽ nhận dữ lưu trữ và xử lý.

    Phương pháp truyền của em đó là:
    Dùng 8 bit truyền dữ liệu
    Dùng 1 xung clock_event để truyền từng byte một ( phải truyền 16 xung mỗi xung ứng với một byte dữ liệu )
    dùng 1 Xung clock_start để báo hiệu cho bên B biết bắt đầu một block dữ liệu mới. ( chỉ có 1 xung khi có dữ liệu vào )

    Nhưng cách này em làm vẫn chưa ổn vì có sự nhầm lẫn dữ liệu giữa A, B. Em nghĩ đó là sự đồng bộ xung giữa clock_event, clock_start.

    Hông biết có ai đã từng làm việc truyền nhận hai khối theo kiểu nối tiếp thì share cho em kinh nghiệm hay là một chuẩn truyền nào đó không ( ý tưởng cũng được )

    Thank all !!!

  10. #10
    svBK's Newbie
    Tham gia ngày
    Dec 2006
    Bài gửi
    1

    Mặc định

    Quote Nguyên văn bởi FFGmember
    Em đang phải giải quyết một bài toán thế này. Mọi người giúp ý kiến cho em nhé:

    Em có hai khối A, B truyền và nhận dữ liệu nối tiếp. A truyền cho B dữ liệu 8bit, và một lần truyền ( một Block ) là phải truyền liên tiếp 16Byte. Bên B sẽ nhận dữ lưu trữ và xử lý.

    Phương pháp truyền của em đó là:
    Dùng 8 bit truyền dữ liệu
    Dùng 1 xung clock_event để truyền từng byte một ( phải truyền 16 xung mỗi xung ứng với một byte dữ liệu )
    dùng 1 Xung clock_start để báo hiệu cho bên B biết bắt đầu một block dữ liệu mới. ( chỉ có 1 xung khi có dữ liệu vào )

    Nhưng cách này em làm vẫn chưa ổn vì có sự nhầm lẫn dữ liệu giữa A, B. Em nghĩ đó là sự đồng bộ xung giữa clock_event, clock_start.

    Hông biết có ai đã từng làm việc truyền nhận hai khối theo kiểu nối tiếp thì share cho em kinh nghiệm hay là một chuẩn truyền nào đó không ( ý tưởng cũng được )

    Thank all !!!
    1 Byte 8 bit, Vậy bạn phải truyền từng bit một chứ?
    Bạn nên tạo 1 bit báo chuẩn bị truyền, một bit báo kết thúc một block... Các tín hiệu này đồng bộ với xung clock truyền bit dữ liệu.

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Chủ đề tương tự

  1. Công nghệ FPGA và ngôn ngữ VHDL
    Gửi bởi Hue_bka trong mục Giảng đường khoa ĐTVT
    Trả lời: 22
    Bài cuối: 23-06-2006, 11:36 AM
  2. Kiều hối và những vấn đề liên quan
    Gửi bởi walktheweb trong mục Thảo luận
    Trả lời: 65
    Bài cuối: 31-05-2006, 11:44 PM
  3. VHDL và các vấn đề liên quan
    Gửi bởi WTDOng trong mục Giảng đường khoa ĐTVT
    Trả lời: 9
    Bài cuối: 09-10-2005, 12:13 AM
  4. Có ai muốn làm quan không ???
    Gửi bởi nothingtolose trong mục Thảo luận
    Trả lời: 4
    Bài cuối: 01-10-2005, 08:51 AM

Từ khóa (Tag) của chủ đề này

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube