Do đó, FPGA được sử dụng rất nhiều trong các lãnh vực kiểm thử ASIC, trong thiết bị mạng, các hệ thống nhúng cần tùy biến phần cứng riêng nhưng số lượng sản xuất thấp… Do FPGA có khả năn
TỔNG QUAN
Giới thiệu về FPGA
Field-programmable gate array (FPGA) là mạch điện tử tích hợp (integrated circuit), được thiết kế sao cho người dùng hoặc nhà sản xuất có thể cấu hình lại được (configurable), sau khi xuất xưởng
Mạch FPGA chứa các khối logic có thể cấu hình lại, được gọi là "logic blocks", và một mạng lưới các kết nối khả cấu hình (reconfigurable interconnects), sao cho các khối phần cứng có thể kết nối với nhau linh hoạt tùy vào cấu hình cụ thể Khối logic có thể được cấu hình để hiện thực các hàm tổ hợp phức tạp (complex combinational functions), hoặc chỉ đơn giản là cổng logic AND XOR Trong đa số FPGA, khối logic còn bao gồm các đơn vị nhớ Các đơn vị nhớ có thể đơn giản chỉ là mạch flip-flop hoặc khối bộ nhớ SRAM phức tạp
Hình 1.1: Cấu trúc chip FPGA
Một khối logic (gọi tên là Configurable Logic Block, CLB, hoặc Logic Array
Một tế bào logic thông thường chứa: bảng tra 4 ngõ nhập (4-input Lookup Table - LUT), bộ cộng (Full adder - FA), và một flip-flop loại D (D-type flip-flop)
Để thiết kế các mạch logic trên FPGA, người dùng có thể sử dụng ngôn ngữ mô tả phần cứng (HDL) hoặc một lược đồ thiết kế (schematic design) HDL mô tả hành vi của mạch logic, trong khi lược đồ thiết kế mô tả cách kết nối các cổng logic cơ bản như AND, OR, NOR, v.v.
Sau đó, người dùng sử dụng công cụ hỗ trợ thiết kế, thường do nhà sản xuất chip cung cấp, để tạo ra netlist Dựa trên netlist, công cụ hỗ trợ thiết kế sẽ tiến hành bước lựa chọn các vị trí tốt nhất trong chip để đặt các khối chức năng (place and route) Sau giai đoạn place-and-route, công cụ sẽ tiến hành phân tích timing, kiểm thử xem vị trí đặt có hợp lý chưa Cuối cùng file mã nhị phân (binary stream) được ghi ra để người dùng có thể nạp vào chip FPGA
Người dùng nạp nội dung nhị phân vào chip FPGA bằng giao tiếp serial (JTAG) hoặc ghi vào bộ nhớ EEPROM
Ứng dụng của FPGA
Ban đầu, FPGA chủ yếu được sử dụng như một thành phần liên kết logic trên bo mạch PCB, tương tự như CPLD Tuy nhiên, với sự gia tăng về độ phức tạp, tốc độ và khả năng tính toán, ứng dụng FPGA đã mở rộng đáng kể Hiện nay, một số chip FPGA tích hợp nhiều thành phần đến mức được quảng cáo như một hệ thống trên một chip (System-on-a-chip).
FPGA thường được sử dụng trong các ứng dụng có số lượng thành phẩm thấp, vì khi đó tổng chi phí cho FPGA thấp hơn tổng chi phí sản xuất ASIC
Sau đây là vài ứng dụng phổ biến của FPGA:
• Asic prototype: mẫu thí nghiệm chip asic trước khi sản xuất hàng loạt
• Digital signal processor: chip xử lý tín hiệu số
• Thiết bị mạng: switch 10Gbe Arista 7124FX, tường lửa Palo Alto PA-5060, load balancer F5 BigIP,
Giới thiệu board mạch DE2-115
Do mục đích của đề tài là chuyển nhân Linux + TCP/IP stack sang kiến trúc Nios2, và ứng dụng đi kèm sẽ tập trung về hướng router / firewall; nên việc đầu tiên là lựa chọn board mạch FPGA thích hợp Để thực hiện chức năng router / firewall, thì phần cứng phải có ít nhất 2 giao tiếp mạng Ethernet Vào thời điểm khảo sát khả thi trước khi nhận đề tài, trên thị trường có các board mạch thuộc phân khúc phổ thông (giá thấp hơn 1000 USD), và có nhiều hơn 1 cổng Ethernet sau:
• De2-115 của hãng Terasic Giá $300
• NetFPGA của hãng Digilent Giá $600
Do chi phí thấp, số đơn vị logic nhiều hơn, và trên board De2-115 có tích hợp các chip phụ trợ khác, nên tác giả đã chọn board De2-115
Board mạch De2-115 [1] là một kit lập trình FPGA do công ty Terasic sản xuất
Board mạch gồm có 1 chip FPGA Cyclone IV của hãng Altera, và các phụ kiện ngoại vi như chip Marvell GBit Ethernet, SDRAM, SRAM, Flash, Audio codec, VGA DAC, cổng hồng ngoại, cổng USB …
Hình 1.3:Mặt trên board De2-115
Các thành phần phần cứng có trên board De2-115:
• Chip FPGA Altera Cyclone IV EP4CE115F29, 114,480 LEs, 432 memory blocks, 3,888 Kbits embedded memory, 4 PLLs
• Chip flash chứa bitstream: Altera Serial Configuration – EPCS64, 64Mbit
• Mạch USB Blaster để nạp cấu hình và debug; hoạt động trong chế độ JTAG hoặc Active Serial (AS)
• Chip NAND flash 8MB, 4Mx16
• SD Card socket, SPI hoặc 4bit mode
• 18 công tắc dạng gạt (slide switch)
• Thạch anh cấp xung clock 50MHz
• Chip CODEC âm thanh 24-bit, nối với ngõ line-in, line-out, microphone
• Chip DAC VGA DAC (8-bit high-speed triple DACs) with VGA-out connector
• Chip giải mã TV (NTSC/PAL/SECAM), jack TV-in
• 2 chip Gigabit Ethernet PHY 88E1111 của hãng Marvell, nối với đầu RJ45
• Chip RS-232 transceiver, đầu nối 9-pin
• Đầu nối PS/2 mouse/keyboard
• Bộ nhận tín hiệu IR
• 2 đầu nối SMA để gởi/nhận xung clock bên ngoài
• Một đầu cắm mở rộng 40-pin
• Một đầu cắm card mở rộng tốc độ cao (High Speed Mezzanine Card - HSMC)
Sau đây là sơ đồ khối kết nối giữa các thành phần trên board mạch Dựa trên khả năng tái cấu hình linh hoạt của chip FPGA, người dùng có thể xây dựng bất cứ hệ thống nào
Hình 1.4: Sơ đồ kết nối board De2-115
Vì lý do board De2-115 chỉ có chip FPGA Cyclone IV, không tích hợp sẵn nhân CPU cứng, nên tác giả bắt buộc phải chọn lõi IP CPU mềm để thực thi hệ điều hành àClinux
Lõi IP cpu mềm hiện tại chạy trên chip FPGA của hãng Altera [2] có rất nhiều dòng: Nios2, ARM Cortex M1, ARM Cortex A9, MP32, Chỉ có dòng Nios2 là được cung cấp sẵn miễn phí cho mục đích nghiên cứu học thuật.
Cỏc cụng trỡnh liờn quan đến board mạch De2-115 và àClinux
Đề tài "QUẢN LÝ TẢI DỮ LIỆU TRÊN BOARD DE2 (HARDWARE DOWNLOAD MANAGER)" tổng hợp khối MAC cho chip ethernet Davicom DM9000A, sử dụng 1 card mạng ethernet 100Mbps và phiên bản àClinux với khai báo phần cứng custom/config.h Tuy nhiên, cách khai báo này không áp dụng được với các phiên bản àClinux mới và đề tài này sử dụng chip Nios2 không có đơn vị quản lý bộ nhớ MMU.
Kit De2-115 do hãng Terasic bán cách thời điểm quyết định giao đề tài 4 tháng
Phần cứng ethernet trên kit khác hoàn toàn với những kit cũ có trong phòng LAB ĐHBK, và các kit mà các nhóm (sinh viên) khác đã sử dụng Ứng dụng demo Webserver của hãng Terasic đi kèm theo kit có những vấn đề sau:
• Tại 1 thời điểm chỉ sử dụng được 1 card mạng
Tốc độ của card mạng chỉ có thể thay đổi được khi ngắt nguồn điện và cấp lại nguồn Điều này có nghĩa là card mạng không thể hoạt động bình thường nếu bạn rút dây mạng từ switch 1Gbps và cắm vào switch có tốc độ khác.
• Tốc độ 1Gbps không ổn định
• Do cấu trúc khối PLL nên không thể sử dụng đồng thời 2 card, mỗi card nối với một switch, nhưng 2 switch có tốc độ khác nhau
Tài liệu hướng dẫn cách nối kết các khối MAC - PHY, cung cấp xung clock sao cho đạt tốc độ 1Gbps, trên website hãng Altera không cung cấp đủ thông tin
Trong phạm vi tìm hiểu của tác giả, chưa đề tài nào có đề cập đến việc sử dụng Nios2 làm vai trò router / firewall Chưa có đề tài có sử dụng khối pipeline bridge, có sử dụng cross clock domain bridge
Trong quá trình thực hiện luận văn, đặc biệt trong lúc chuyển (porting) ứng dụng demo, có những vấn đề sau phát sinh:
• Ứng dụng iptables: cross compiler có bug, gây lỗi segfault
• Ứng dụng Snort: các thư viện phụ thuộc thiếu sót, dẫn đến việc không thể biên dịch được
Do đó, đề tài này tập trung vào hướng chuyển (porting) nhân linux, tcp/ip, qua kiến trúc cpu Nios2 Và sử dụng tất cả các khối phần cứng có liên quan đến mảng network, mà kit De2-115 cung cấp.
KIẾN TRÚC CPU NIOS-2
Tổng quan về vi xử lý mềm Nios2
Vi xử lý Nios 2 là chip thuộc dòng họ RISC (load store) do hãng Altera tạo ra
[4] Có những đặc điểm sau:
• Tập lệnh chiều dài cố định 32 bit
• Tính toán số thực dấu chấm động
• Giao tiếp được với nhiều thiết bị ngoại vi
• Tập lệnh tương thích với tất cả processor thuộc dòng Nios 2
• Tốc độ xử lý tùy thuộc vào tài nguyên phần cứng mà người lập trình lựa chọn cấp phát lúc tổng hợp
Nios 2 là một vi xử lý có khả năng tinh chỉnh cấu hình linh hoạt Nghĩa là người lập trình có thể tùy chỉnh các khối chức năng bên trong của vi xử lý Người dùng có thể bỏ bớt vài chức năng không sử dụng Người dùng cũng có thể tự tạo thêm các khối chức năng chuyên dụng, hoặc lệnh riêng để có thể đáp ứng yêu cầu ứng dụng đặc thù riêng
Từ “mềm” được mô tả là khả năng tổng hợp vi xử lý, với các thành phần bên trong linh hoạt, thành dạng bitstream, rồi nạp bitstream kia vào bất cứ chip FPGA nào của hãng Altera, với điều kiện chip FPGA còn trống đủ số logic element để hoạt động Điểm khác biệt của Nios II so với các vi xử lý cứng khác, là sự linh hoạt trong việc kết nối với các khối chức năng Do bản chất "mềm" của Nios II nên chúng ta có thể xây dựng hệ thống sử dụng Nios II có chính xác những khối chức năng, và các khối thiết bị ngoại vi mà ứng dụng yêu cầu Có 2 loại khối chức năng:
Khối chức năng chuẩn: Altera cung cấp những khối phổ thông như: Flash controller, SDRAM controller,…
Khối chức năng tùy chỉnh: người dùng tự tạo ra khối chức năng mới, và tích hợp vào trong hệ thống Nios II Để tăng hiệu năng, người dùng có thể thiết kế một khối chức năng xử lý một tác vụ mà làm tiêu tốn rất nhiều chu kỳ thực thi lệnh của CPU Với kỹ thuật này người dùng đạt được 2 lợi ích chính: phần cứng chạy nhanh hơn phần mềm, CPU rảnh có thể thực hiện các tác vụ khác trong lúc khối kia đang xử lý
Tập lệnh tùy chỉnh: người dùng có thể tích hợp một mạch logic vào trong bộ số học (ALU) của CPU nhằm làm tăng hiệu năng xử lý
Nios2 có 2 chế độ hoạt động:
Supervisor mode: thực thi tất cả các chỉ thị lệnh, truy cập được mọi vùng nhớ
In User mode, if the NIOS II system includes an MMU (memory management unit) or an MPU (memory protection unit), applications running in this mode have limited ability to execute instructions and access memory regions.
Các đơn vị chức năng
Vi xử lý Nios 2 có 32 thanh ghi
• Thanh ghi r0 luôn mang giá tr
• Thanh ghi r24 không thể truy c
Hình 2.1:Các khối chức năng bên trong Nios2 ị ức năng
Nios 2 có 32 thanh ghi đa dụng số nguyên 32 bit:
Thanh ghi r0 luôn mang giá trị 0
Thanh ghi r1 chứa giá trị tạm, không lưu giá trị khi có ng Thanh ghi r24wr và r29 được sử dụng trong xử lý exception, user mode ể truy cập r25 và r30 được sử dụng độc quyền bởi JTAG module.
Thanh ghi r27 và r28 quản lý stack Thanh ghi 31 chứa địa chỉ trở về khi gọi chương trình con. ng bên trong Nios2 ị khi có ngắt (interupt) ử lý exception, user mode ề ởi JTAG module ình con
Bảng 2.1: Chức năng thanh ghi
Nios2 có 6 thanh ghi điều khiển cơ bản Các thanh ghi này chỉ được truy xuất trong mode supervisor:
• Thanh ghi ctl0 chứa tình trạng hoạt động của cpu: supervisor hoặc user mode, interupt có được phép hay không, tình trạng của khối MMU / MPU
• Thanh ghi ctl1 chứa bản copy của ctl0, trước khi bị exception
• Thanh ghi ctl2 chứa bản copy của ctl0, trước khi xử lý debug break
• Thanh ghi ctl3 cho phép ngắt xảy ra Mỗi bit tương ứng với 1 ngắt
• Thanh ghi ctl4 cho biết có ngắt nào đang chờ được xử lý hay không
• Thanh ghi ctl5 chứa CPUID
Bảng 2.2: Thanh ghi điều khiển
2.2.2Bộ xử lý số học (ALU)
Bộ xử lý số học của Nios 2 hỗ trợ các tác vụ sau:
• Cộng trừ nhân chia số nguyên
• Dịch và quay Với 1 số cấu hình tiết kiệm, bộ nhân / chia sẽ không được tổng hợp Khi thực thi chương trình có chứa các chỉ thị nhân chia, một exception sẽ được phát ra để phần mềm có thể xử lý tình huống này
2.2.3Xử lý exception và interrupt
Nios2 cung cấp cơ chế xử lý exception đơn giản Khi gặp một exception, CPU sẽ chuyển tới thực thi tại một địa chỉ Địa chỉ này được xác định lúc tổng hợp ra hệ thống
Nios 2 hỗ trợ 32 ngắt cứng ngoài và hỗ trợ ngắt lồng nhau Độ ưu tiên của các ngắt được xác định bằng phần mềm
Phần mềm cũng có thể cho phép / cấm ngắt bằng cách gán / xóa bit trên thanh ghi điều khiển
Quá trình xử lý exception gồm các bước cơ bản sau:
• Chép nội dung trong thanh ghi status ctl0 vào thanh ghi estatus
• Xóa bit PIE trong thanh ghi status để cấm ngắt
• Lưu địa chỉ của lệnh thực thi tiếp theo vào thanh ghi r29
• Nhảy tới địa chỉ của trình xử lý ngoại lệ
2.2.4Tổ chức bus và giao tiếp I/O
Nios 2 sử dụng bus lệnh và dữ liệu độc lập với nhau Kiến trúc bus lệnh và dữ liệu do hãng Altera đề xuất, đặt tên là Avalon - Memory Mapped
Các thành phần IO được kết nối vào Avalon bus, hoạt động ở chế độ slave Nios 2 IO port kết nối vào Avalon hoạt động ở master mode
Bộ nhớ và thiết bị ngoại vi được ánh xạ vào không gian địa chỉ của master port
Data is stored in little-endian mode The instruction master port and data master port of Nios 2 can be combined with cache blocks to improve performance.
Ngoài ra, người dùng có thể tăng tốc truy cập bộ nhớ bằng cách tổng hợp khối tightly coupled memory (TCM) Khối TCM cho phép CPU truy cập bộ nhớ trực tiếp mà không cần thông qua Avalon bus Để kết nối với các thành phần ngoại vi như SRAM, SDRAM, Flash, cần phải tổng hợp các khối giao tiếp bộ nhớ tương ứng Các khối này sẽ kết nối với Avalon bus.
Hình 2.2:Sơ đồ kết nối cpu - bộ nhớ
Kiến trúc Nios II hỗ trợ khối debug JTAG trên chip, giúp điều khiển cpu từ máy tính Khối debug JTAG được kết nối với mạch JTAG trên chip FPGA Phần mềm debug có thể kết nối với khối JTAG để thực hiện những chức năng sau:
• Nạp chương trình vào bộ nhớ
• Sau khi nạp xong chương trình vào trong bộ nhớ, khối debug JTAG có thể thoát khỏi chế độ debug và chuyển sang thực thi lệnh
• Bắt đầu và kết thúc việc thực thi lệnh
• Có thể cho processor chạy từng bước để kiểm tra theo vết (tracing) dữ liệu
• Thiết lập các breakpoint mềm và cứng
• Breakpoint mềm cung cấp khả năng thiết lập breakpoint trong mã thực thi nằm trong bộ nhớ RAM Breakpoint cứng cung cấp khả năng thiết lập breakpoint nằm trong mã thực thi nằm trong bộ nhớ ROM hay Flash
• Xem nội dung các thanh ghi và bộ nhớ
• Thu thập các dữ liệu trong lúc cpu đang thực thi lệnh.
Các nhóm tập lệnh
Tập lệnh của Nios II được chia thành 7 nhóm lần lược mô tả trong các bảng sau
Nhóm lệnh chuyển dữ liệu:
Nios II sử dụng kiến trúc load và store Lệnh load và store có thể thực hiện chuyển dữ liệu giữa thanh ghi, bộ nhớ và thiết bị ngoại vi
Bảng 2.3: Nhóm lệnh chuyển dữ liệu 32bit
Lệnh Mô tả ldw stw
Lệnh ldw và stw dùng để load và store dữ liệu 32 bit từ/đến bộ nhớ Địa chỉ hiệu dụng được tính bằng tổng giá trị của một thanh ghi và một số tức thời ldwio stwio Dùng để trao đổi dữ liệu với các thiết bị ngoại vi
Bảng 2.4:Nhóm lệnh chuyển dữ liệu byte, half-word
Lệnh Mô tả ldb ldbu stb ldh ldhu sth ldb, ldbu, ldh và ldhu dùng để load 1 byte hay half-word từ bộ nhớ vào thanh ghi stb và sth dùng để store giá trị 1 byte và half-word ldb, ldh, stb, sth dùng cho dữ liệu có dấu ldbu, ldhu, stbu, sthu dùng cho dữ liệu không dấu ldbio ldbuio stbio ldhio ldhuio sthio ldbio, ldbuio, ldhio và ldhuio dùng để load 1 byte hay half-word từ thiết bị ngoại vi vào thanh ghi stb và sth dùng để store giá trị 1 byte và half-word ldbio, ldhio, stbio, sthio dùng cho dữ liệu có dấu ldbuio, ldhuio, stbuio, sthuio dùng cho dữ liệu không dấu
Lệnh Mô tả mov movhi movi movui movia mov chép giá trị 1 thanh ghi đến 1 thanh ghi movi chép số tức thời 16bit vào thanh ghi movuiand movhi chép số tức thời không dấu 16bit vào thanh ghi
Movia chép một địa chỉ vào một thanh ghi
Nhóm lệnh số học và luận lý
Bảng 2.6: Nhóm lệnh số học và luận lý
Lệnh Mô tả and or xor nor
Thực hiện các phép toán luận lý với 2 toán hạng là hai thanh ghi andi ori xori
Thực hiện các phép toán luận lý trên số tức thời có dấu, sau đó đưa kết quả vào thanh ghi andhi orhi xorhi
Thực hiện các phép toán luận lý trên số tức thời không dấu, sau đó đưa kết quả vào thanh ghi add sub mul div divu
Toán hạng là 2 thanh ghi, kết quả được lưu vào thanh ghi thứ 3 addi subi muli
Thực hiện pháp toán trên số tức thời có dấu mulxss mulxuu Dùng để truy xuất bit 33 trở lên trong pháp toán nhân 2 số hạng 32 bit mulxsu Dùng để nhân 2 số hạng 64bit
Bảng 2.7: Nhóm lệnh so sánh
Lệnh Mô tả cmpeq == cmpne != cmpge Có dấu >= cmpgeu Không dấu >= cmpgt Có đấu > cmpgtu Không dấu > cmple Có dấu , cần khối vi xử lý và SDRAM controller
Khi ngắt điện, nội dung trong Ram sẽ mất, do đó, cần nơi lưu trữ nội dung thực thi nhân Linux lâu bền (persistent) => Flash controller
Muốn hệ thống hoạt động với chức năng router / firewall thì tất nhiên phải có ít nhất 2 khối Ethernet => Triple speed ethernet
Do nhân Linux là multi-thread, nên cần bộ định thời => timer Để đơn giản trong việc thao tác nhập xuất với hệ thống, VGA controller không được sử dụng, chỉ sử dụng cổng serial RS-232 để giao tiếp
Quá trình tổng hợp của Quartus báo cáo có một số critical path không đáp ứng được yêu cầu về thời gian, do đó, tác giả đã sử dụng clock domain 10MHz cho các thành phần hóa trong giai đoạn place-and-route Để Avalon bus có thể giao tiếp được với nhau, cần phải có khối clock bridge.
Theo khuyến cáo của hãng Altera [6] , để giảm bớt các critical path, tăng throughput, tăng xung clock có thể tổng hợp, pipeline bridge nên được sử dụng
Hình 3.2: Sơ đồ logic khối router sẽ tổng hợp
Hình 3.3:Các khối chức năng trong SOPC Builder
CFI Flash Pipeline bridge CPU - Flash Onchip RAM
PIO Switch PIO LedG PIO LedR
Xây dựng CPU
Thành phần chính trong hệ thống đương nhiên là vi xử lý Dùng công cụ SOPC Builder, tạo ra CPU Nios2 với các thông số như sau:
• Có hardware nhân / chia số nguyên
• Reset vector chỉ về bộ nhớ flash
• Exception vector chỉ về bộ nhớ sdram
• MMU sử dụng onchip ram làm Translation Lookaside Buffer (TLB) cache
Hình 3.4: Chỉ định thông số chính của Nios2
Hình 3.6: Chỉ định tham số TLB cache
Xây dựng khối memory onchip TLB
Tạo một khối memory onchip RAM, dung lượng 4KBytes, dùng làm cache cho TLB Khối này khi tổng hợp sẽ sử dụng khối SRAM bên trong chip FPGA.
Xây dựng các khối memory SDRAM
Tạo SDRAM controller, dùng để kết nối vi xử lý - chip SDRAM bên ngoài Các tham số timing tham khảo từ project demo Golden SOPC trong dĩa CD đi kèm kit De2-115 Để tăng băng thông truy xuất SDRAM, cần nối thêm thành phần Pipeline Bridge Avalon-MM vào giữa CPU - SDRAM controller Pipeline bridge cho phép các yêu cầu trao đổi dữ liệu, thông qua avalon bus được xử lý pipeline, tăng băng thông
Hình 3.10:Kết nối Pipeline bridge CPU - SDRAM
Xây dựng các khối memory CFI Flash
Để Nios2 có thể nạp hệ điều hành từ bộ nhớ Flash, cần phải thêm flash controller vào hệ thống
CFI flash gồm 2 thành phần: Avalon tristate bridge và CFI flash controller
Cần sử dụng tri-state bridge vì bus dữ liệu giữa cpu - flash controller chia sẻ chân tín hiệu cho cả thao tác đọc và thao tác ghi
Hình 3.11:Avalon tri-state bridge
Tương tự, Pipeline Bridge cũng được sử dụng để kết nối CPU - CFI flash:
Hình 3.13: Kết nối Cpu - pipeline bridge - CFI flash
Bộ nhớ flash sẽ chứa compressed image của nhân linux Mỗi khi reset, cpu nios2 sẽ nhảy về reset vector trong bộ nhớ flash để nạp hệ điều hành.
Xây dựng các khối Phase locked loop (PLL)
Do xung clock nguồn thạch anh cung cấp từ bên ngoài là 50MHz, nên phải tổng hợp thêm 2 PLL để cấp xung clock cho các thành phần trên board DE2-115
• PLL_system: phát ra các xung clock sau: o c0: 100Mhz, dùng cho toàn bộ hệ thống o c1: 100Mhz, dịch pha sớm -65⁰, cấp xung cho SDRAM chip Phải dịch pha vì có độ trễ trên bus từ chip FPGA đến SDRAM chip o c2: 10Mhz, dùng cho các thiết bị ngoại vi phụ trợ như led, key, switch, timer Sử dụng xung clock thấp để giảm thiểu số lượng các timing path phải đạt tốc độ cao o c3: 125Mhz, dùng cho khối MAC bên trong chip FPGA, hoạt động ở 1GBit mode o c4: 125Mhz, dịch pha trễ 90⁰, cấp xung cho chip Ethernet Marvell 88E1111, hoạt động ở 1GBit RGMII mode
• PLL_network: phát xung clock cho các khối ethernet o c0: 25Mhz, dùng cho khối TSE MAC Hoạt động ở 100Mbit RGMII mode o c1: 25Mhz, dịch pha trễ 90⁰, cấp xung cho Marvell, 100Mbit RGMII mode o c2: 2.5Mhz, dùng cho khối TSE MAC 10Mbit RGMII mode o c3: 2.5Mhz, dịch pha trễ 90⁰, cấp xung cho Marvell, 10Mbit RGMII mode
Do chip SDRAM được gắn riêng biệt trên bo mạch nên xảy ra hiện tượng lệch pha xung nhịp (clock skew) Để khắc phục, cần cấp xung nhịp cho chip SDRAM sớm hơn xung nhịp cho chip Cyclone 3ns Tần số hoạt động của chip SDRAM và bộ điều khiển SDRAM là 100 MHz, do đó -3ns tương ứng với -65⁰.
Chế độ hoạt động m Reduce Gigabit Media Independance Interface (RGMII) input data tại cạnh lên và c cho chip Marvell phải có s pháp đơn giản cho việc canh bi trễ hơn xung clock của chip Cyclone 90
Tùy vào tín hiệu bắ MAC + PHY sẽ khác nhau tín hiệu RX và TX cho kh
// clock for eth0 wire ena_10_from_the_tse_mac_0 wire eth_1g_mode_from_the_tse_mac_0; wire enet_rx_clk_to_tse_0 = ENET0_RX_CLK
// mac tx line lấy clock tùy vào carrier sense mode wire enet_tx_clk_to_tse_0 = (eth_1g_mode_from_the_tse_mac_0)
// phy tx line wire enet_tx_clk_to_phy_0 = (eth_1g_mode_from_the_tse_mac_0) ạ động mặc định của chip Marvell Ethernet trên Reduce Gigabit Media Independance Interface (RGMII) [8] Mode RGMII ên và cạnh xuống của xung điều khiển [9] ải có sẵn tại thời điểm xung cạnh lên và xung c ản cho việc canh biên tín hiệu là dịch pha xung clock cho chip Marvell ủa chip Cyclone 90⁰ ệu bắt tay (carrier sense signal), mà xung clock c ẽ khác nhau [10] Sau đây là mã nguồn Verilog, cấ à TX cho khối MAC + PHY: wire ena_10_from_the_tse_mac_0; // 10mbit mode wire eth_1g_mode_from_the_tse_mac_0; // 1gbit mode wire enet_rx_clk_to_tse_0 = ENET0_RX_CLK; // rx line lấy clock từ Marvell PHY y clock tùy vào carrier sense mode wire enet_tx_clk_to_tse_0 = (eth_1g_mode_from_the_tse_mac_0)
? clk_eth_tse_1g : (ena_10_from_the_tse_mac_0 == 0 ? clk_eth_tse_100m : clk_eth_tse_10m); wire enet_tx_clk_to_phy_0 = (eth_1g_mode_from_the_tse_mac_0)
? clk_eth_phy_1g : (ena_10_from_the_tse_mac_0 == 0 ? clk_eth_phy_100m : clk_eth_phy_10m); chip Marvell Ethernet trên board De2-115 là
Chuẩn RGMII sử dụng xung mẫu để ghép vào dữ liệu đầu vào và xung cạnh xuống Giải pháp này giúp giảm gánh nặng xử lý cho chip Marvell bằng cách cung cấp xung clock cho khối xử lý Verilog và cấp xung clock cho
Vì lý do tín hiệu xung clock cấp cho 2 chip Marvell phải đi ra bên ngoài, hãng Altera khuyến cáo nên sử dụng bộ đệm DDR (double data rate buffer) để làm vuông tín hiệu xung clock
// sử dụng double data rate buffer để làm xung cạnh lên vuông vức hơn ddr_o clk_buffer_to_phy_0(.datain_h(1'b1), datain_l(1'b0),
outclock(enet_tx_clk_to_phy_0), dataout(ENET0_GTX_CLK) );
Xây dựng các khối Ethernet MAC
Hệ thống gồm 2 khối Ethernet MAC Mỗi khối ethernet MAC có cấu trúc bên trong [10] như hình sau:
Hình 3.15: Cấu trúc khối Ethernet MAC
3.7.2Triple speed ethernet MAC Đây là khối chức năng xử lý ethernet frame, tầng MAC trong mô hình OSI Chỉ định khối TSE MAC với cấu hình sau:
• Reduce Gigabit Media Independent Interface (RGMII)
• MDIO clock 2.5MHz (xung clock cấp cho TSE là 100Mhz => phải chia 40 để ra clock 2.5MHz)
Hình 3.16:Thông số khối TSE 3.7.3Scatter gather DMA Receive:
Khối SGDMA có chức năng chuyển kiểu dữ liệu tuần tự sang khối (block) 32 bytes, rồi ghi vào memory SGDMA có 2 loại giao tiếp Avalon bus:
Avalon MM: kết nối với SDRAM, đọc hoặc ghi dữ liệu theo khối byte
Avalon ST: kết nối với TSE MAC, đọc ghi từng bit
Hình 3.17:Thông số SGDMA receiver 3.7.4Scatter gather DMA Transmit:
Khối SGDMA chuyển dữ liệu từng block 32 bytes sang kiểu tuần tự để ghi ra chip Marvell PHY
Hình 3.18:Thông số SGDMA transmiter
3.7.5DMA descriptor memory: Đây là vùng nhớ chứa các entry thông tin cho khối Scatter Gather DMA hoạt động
Hình 3.19:DMA descriptor memory 3.7.6Module reset chip Marvell PHY
Khi được cấp điện, chip Marvell 88E1111 PHY cần tín hiệu reset trong trạng thái kích hoạt (active) trong khoảng 500ms [9] , thì mới hoạt động bình thường
Sau đây là mã nguồn Verilog của module phát xung reset: module gen_reset_n( tx_clk, reset_n_in, reset_n_out ); input tx_clk; input reset_n_in; output reset_n_out; reg reset_n_out; parameter ctr_width = 20; // richard 16; reg [ctr_width-1:0] ctr; // Reset counter begin if (!reset_n_in) begin reset_n_out /proc/sys/net/ipv4/conf/all/forwarding echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
Gõ lệnh make để biên dịch lại zImage
Sau khi biên dịch xong, trong thư mục nios2-linux/ucLinux-dist/image/ sẽ có file zImage Dùng lệnh sau để nạp zImage vào bộ nhớ của hệ thống: nios2-download -rg image/zImage Để giữ cấu hình khi mất điện, dùng công cụ elf2flash để chuyển thành định dạng flash, cuối cùng, dùng lệnh nios2-flash-programmer để ghi vào flash
Nạp file bitstream sof vào board De2-115, nếu đã nạp zImage vào flash, thì àClinux sẽ tự khởi động
Cắm cáp serial nối máy tính và cổng DB-9 trên board De2-115, các nhập xuất tương tác với linux console sẽ thông qua giao tiếp này
Để cấu hình giao diện mạng, bạn có thể sử dụng lệnh ifconfig để gán địa chỉ IP và khởi động giao diện Sau khi cấu hình giao diện mạng, bạn có thể sử dụng lệnh snort để bắt đầu phân tích gói tin Để thử nghiệm, hãy ping đến địa chỉ IP của giao diện mạng đã cấu hình và kiểm tra các tệp nhật ký trong thư mục /var/log/snort để xem các gói tin ICMP đã được phân tích.
Thử nghiệm board De2-115 làm tường lửa
Để thử nghiệm board De2-115 làm tường lửa, người dùng có thể kết nối board De2-115 giữa máy tính và modem / router Internet Sử dụng các giao thức http, pop3, ftp, voip
Sau đây là sơ đồ thử nghiệm băng thông của tính năng router + firewall + snort:
Hình 5.4: Sơ đồ kết nối mạng thử nghiệm băng thông
Server là một máy ảo, Windows 2008R2 64 bit, chạy trên server IBM 3650 M3
Server nối với switch gigabit Cisco 3560-X
Thông thường, người dùng sẽ cắm cáp nối máy tính với switch Cisco Trong kịch bản thử nghiệm, board De2-115 sẽ nằm giữa user và switch Cisco
Sau đây là kết quả thử nghiệm
Hình 5.5: ICMP delay khi thông qua De2-115
Hình 5.6: ICMP delay khi đi trực tiếp
Ping delay khi có thêm De2 vào chính giữa user và server vào khoảng +800 micro giây
Ping delay không cải thiện khi tăng xung clock cho vi xử lý Nios2
Hình 5.7: ICMP delay khi thông qua De2, xung 166MHz
Sau đây là kết quả thử nghiệm băng thông
Hình 5.8: Băng thông TCP giữa user và server thông qua De2
Hình 5.9:Băng thông giữa user và server không thông qua De2
Băng thông mạng đạt được vào khoảng 2.8Mbytes/s, với xung clock cấp cho Nios2 và các khối ethernet là 100MHz
Nếu tăng xung clock cấp cho cpu Nios2, các thành phần khác vẫn giữ nguyên xung clock 100MHz, thì băng thông có cải thiện chút ít
Biểu đồ sau thống kê băng thông trong trường hợp chỉ sử dụng chức năng NAT, và sử dụng NAT + Snort, ở các mức xung clock 100, 133, 166 Mhz Board De2-115 không khởi động được cpu ở xung clock cao hơn nữa
Snort thử nghiệm trong biểu đồ sau chỉ so khớp gói tin ICMP
Hình 5.10:Băng thông hệ thống ở các xung clock khác nhau