Nghiên cứu triển khai hệ thống nhúng trên bộ công cụ Spartan-3E

MỤC LỤC

Cấu trúc một file VHDL

Một entity bắt đầu bằng từ khóa entity và sau đó là tên của nó và từ khóa is, tiếp theo là khai báo các port sử dụng từ khóa port. Khai báo entity mô tả giao diện của một thực thẻ thiết kế, qua đó thực thể này truyền thông với các thực thể khác trong cùng một môi trường. Giao diện điển hình bao gồm tất cả cỏc tớn hiệu ngừ vào(input) và ngừ ra(output) và hai chiều (bidirectional) được định nghĩa trong phần khai báo port, các thông số của mô hình được định nghĩa bằng cách sử dụng các khai báo chung (generic).

Một thực thể thiết kế bao gồm hai đơn vị thiết kế; một cặp entity-architecture. Entity cung cấp thông tin port của một đơn vị thiết kế cụ thể, trong khi architecture cung cấp mô tả chức năng của một thực thể thiết kế. Thực thể thiết kế này có thể sử dụng kiểu dữ liệu chung chứa trong một package.

Cấu trúc từ vựng

Biểu diển số theo những hệ khác ta tuân theo qui tắc sau hệ số#số#. Chuỗi bít: khi biểu diển phải tuân theo qui tắc nếu là số nhị phân phải có “B‟.

Các đối tƣợng dữ liệu trong VHDL

Kiểu dữ liệu

Kiểu dữ liệu hỗn hợp

VHDL hỗ trợ các lớp toán tử khác nhau, được thực thi trên tín hiệu, biến, hằng số. Toán tử logic: Bao gồm : and, or, nand, no, xor, xnor được định nghĩa cho kiểu bit boolean, std_logic và std_ulogic và các vector của chúng. Chú ý: toán tử “<= “ ( nhỏ hơn bằng ) giống với toán tử gán được sử dụng trong phép gán giá trị cho tín hiệu hoặc cho biến.

Toán hạng trái: kiểu mảng một chiều với các phần tử là bit hoặc Boolean; Toán hạng phải: integer. Dùng để biểu diễn cho các phép toán số học(cộng, trừ) trên các toán hạng thuộc kiểu số. ** Hàm mũ Kiểu số nguyên Kiểu số nguyên Cùng Kiểu toán hạn trái Dấu chấm động Kiểu số nguyên Cùng kiểu toán.

Các lệnh tuần tự

    Mệnh đề elseif có thể sử dụng lặp lại nhiều lần còn mệnh đề else là tùy chọn và chỉ sử dụng một lần. Cấu trúc điều kiện trong tất cả các trường hợp làm phát biể u luận lí cho kết quả đúng sai. Khi cho kết quả đúng, chuỗi các phát biểu theo sau được thực thi, nếu kết quả sai chuỗi phát biểu sau mệnh đề else được thực thi.

    Lệnh case thực thi một trong một vài phát biểu tuần tự, dựa vào giá trị của một biểu thức đơn. Phát biểu case gồm từ khóa case được theo sau bởi một biểu thức và từ khóa is biểu thức trả về một giá trị tương thích với một trong các phần phát biểu when hoặc tương thích với mệnh đề other. Phát biểu next được thực thi, việc xử lí được dừng lại tại điểm hiện tại và chuyển đến nơi bắt đầu của phát biểu loop.

    CẤU TRÚC KIT SPARTANT-3E, VI ĐIỀU KHIỂN MICROBLAZE VÀ PHẦN MỀM EDK CỦA HÃNG XILINK

    • Bộ biến đổi tương tự sang số
      • VI ĐIỀU KHIỂN NHÚNG MICROBLAZE

        Cấp xung thông qua đế cắm tám chân trên board, ngỏ ra được nối với chân B8 của chip FPGA.Cấp xung clock thông qua chân cắm SMA, chân cắm này chỉ nhận clock từ máy phát clock, khụng dựngtrực tiếp thạch anh được ngừ ra clock nối với chõn A10 của chip. Chân RS = 0 thanh ghi lệnh được chọn cho phép chúng ta gửi một lệnh như xóa màn hình, đưa con trỏ về đầu dòng…, khi chân RS = 1 thanh ghi dữ liệu được chọn cho phép chúng ta gửi dữ liệu lên màn hình LCD. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu.

        Kit Spartan_3E cung cấp hai kênh tín hiệu Analog, vi mạch LTC1407A là loại biến đổi tưong tự sang số gồm hai bộ biến đổi riêng biệt, vi mạch LTC6912 gồm hai bộ khuyếch đại có thể thay đổi được hệ số. Với LTC6912 tần số xung clock tối đa cho phép là 10Mhz nếu lớn hơn giá trị này thì hệ thống sẽ bị nhiễu do đó tần số xung clock thích hợp là 2.5MHz. Đây là IC thực hiện biến đổi tín hiệu tương tự sang tín hiệu số, nó cung cấp cho ta hai bộ biến đổi riêng biệt tương tự như LTC6912 cả hai bộ biến đổi này hoạt động một cách độc lập.

        Kết nối giao tiếp giữa FPGA và LTC1407A được trình bày ở hình 5, FPGA giao tiếp với LTC1407A thông qua các chân SPI_MOSI, SPI_MISO và SPI_CLK. Khi chân AD_CONV ở mức cao thì bộ AD sẽ thực hiện biến đổi các tín hiệu tương tự ở cả hai ngỏ vào của bộ biến đổi nhưng lúc này các kết quả sẽ không được chuyển đến ngỏ ra chỉ khi nào tín hiệu ỏ trên nhân AD_CONV chuyển xuống mức. Vi điều khiển MicroBlaze xử lý lệnh theo kiến trúc pipeline song song, hầu hết các lệnh của nó, mỗi giai đoạn mất 1 chu kỳ đồng hồ để thực hiện xong.

        Thông thường, nếu bỏ qua thời gian trễ nghỉ “stall” thì mỗi giai đoạn trên chỉ mất 1 chu kỳ đồng hồ, khi đó 3 lệnh có thể được xử lý cùng một lúc, mỗi lệnh được thi hành trong 1 đường ống gồm 3 giai đoạn. MicroBlaze có 1 bộ đệm tiền nhận lệnh (Instruction Prefetch Buffer) để làm giảm xung đột tiềm ẩn trong bộ nhớ khi thực hiện các lệnh đa chu kỳ. Khi Pipeline được tạo trễ nghỉ “stall” do thực hiện lệnh đa chu kỳ trong giai đoạn thi hành, bộ đệm tiền nhận lệnh sẽ tiếp tục nhận các lệnh ngay sau đó.

        Và khi Pipeline thi hành trở lại, giai đoạn nhận lệnh có thể lấy lệnh trực tiếp từ bộ đệm tiền nhận lệnh, thay vì đợi cho bộ nhớ lệnh truy cập để thi hành.

        Hình 2.1: Bộ tạo xung trên kít Spartan 3e
        Hình 2.1: Bộ tạo xung trên kít Spartan 3e

        Lệnh 2

        Quá trình xử lý lệnh được chia làm 3 giai đoạn: nhận lệnh (Fetch), giải mã lệnh (Decode), thi hành lệnh (Execute).

        Cycle 6 Cycle 7

        PHẦN MỀM EDK

          Chương trình EDK là một chương trình thân thiện với người sử dụng, giúp chú ng ta có thể dễ dàng thiết kế một hệ thống phức tạp mà chỉ thao tác đơn giản, vì thực chất EDK sử dụng các chương trình VHDL viết sẵn (gọi là các IP) nên ta không cần viết các IP đó, mà chỉ sử dụng nó, phần quan trọng là chúng ta phải viết phần mềm điều khiển chip nhúng đã được viết sẵn đó, và điều này cũng thực sự không phải là khó khăn vì chúng ta không cần sử dụng tập lệnh Asembly của chip nhúng ( được đặc tên là MicroBlaze) mà chúng ta sẽ sử dụng ngôn ngữ Standard C hay C++ để viết chương trình điều khiển MicroBlaze (tương đương với một vi xử lý 32 bit, đối với version 4.0 còn có thêm FPU/đơn vị xử lý dấu chấm động) và các thư viên hỗ trợ sẵn với các hàn điều khiển ngoại vi rất nhiều). Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. Đọc dữ liệu tại vị trí con trỏ đang chỉ tới, ở kênh GPIO được xác định.

          Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. Mọi thao tác muốn thực hiện trên thiết bị thì đầu tiên phải khởi động con trỏ, trỏ tới thiết bị đó, nếu không chương trình sẽ báo lỗi. Ghi dữ liệu vào vị trí (thiết bị) con trỏ đang chỉ tới,tương ứng với một kênh đã được xác định.

          Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. Sau khi hàm này được gọi thì việc nhận các dữ liệu nối tiếp sẽ không gặp phải bất cứ ngắt nào. Hàm này cho phép các ngắt được hoạt động trong quá trình nhận và truyền dữ liệu nối tiếp.

          Đối với một thiết bị có chứa 16 byte để truyền nhận dữ liệu theo kiểu FIFO thì bất cứ lúc nào cũng có thể có ngắt được cho phép trong quá trình truyền nhận dữ liệu. Hàm sẽ xác định liệu thiết bị truyền dẫn nối tiếp được chỉ ra có đang gửi dữ liệu hay không. Hàm này có thể được sử dụng trong các ứng dụng nhằm xóa các dữ liệu không mong muốn trong bộ nhớ FIFO.

          Ở hộp thoại này, phần mềm sẽ yêu cầu đặt tên cho thư mục chứa Project và các thư mục liên quan, nhần Browse và tạo một thư mục với một đường dẫn cụ thể, ở đây, mình sẽ đặt tên cho thư mục doan, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo ra file doan.xmp trong thư mục chúng ta vừa tạo. Chế độ giám sát : nhận dữ liệu và hiển thị trạng thái các thiết bị, nhiệt độ, góc xoay của camera theo một thông số được thiết lập thông qua chương trình từ trước.

          Hình 2.10: Cửa sổ XPS
          Hình 2.10: Cửa sổ XPS

          TRIỂN KHAI XÂY DỰNG HỆ THỐNG NHÚNG TRÊN KIT SPARTANT 3E

          Kit Spartan 3E

          XÂY DỰNG CÁC CHIP NHÚNG

            -- Bus protocol ports, do not add to or delete Bus2IP_Clk : in std_logic;.

            Sơ đồ giải thuật:
            Sơ đồ giải thuật:

            XÂY DỰNG CÁC ỨNG DỤNG NHÚNG

              XGpio_mSetDataReg(LCD_BASEADDR, 1, inst2); //turn off enable usleep(INST_DELAY);//delay used for writing commands. XGpio_mSetDataReg(LCD_BASEADDR, 1, rs_data); //turn off enable usleep(DATA_DELAY);//delay used for writing data.