-
“Install the Design Files”
일단 Quartus-II 를 설치하는 것이고 디자인 파일들을 알테라 웹에서 다운 받아서 설치한다.
Design Files for Nios II Hardware Development Tutorial
위의 링크에 파일이 있다.
-
“Analyze System Requirements”.
NIOS-II 프로세서 시스템의 데모를 간단하게 해보는 것.
- 왜 문서에서는 말로 설명하지 ?
실제 시스템을 구성하여서 경험을 쌓는다.
커스텀 NIOS-II 시스템을 만들어서 테스트 해보기
어떤 보드에서도 동작 가능한 NIOS-II 시스템을 만들어서 설치
이런 저런 시스템을 처리
여기서 만드는 시스템은 아래와 같다.
- NIOS-II Core/2K Cache
- 20KB On-Chip Memory
- Timer
- JTAG UART
- PIO
- System ID Component
-
“Start the Quartus II Software and Open the Example Project”.
(1) Quartus-II 프로그램 실행
(2) Open Existing Project로 하여서
(3) design files directory로 가서
(4) nios2_quartus2_project.qpf를 선택해서, Open 하여서 프로젝트를 오픈
(5) Block Diagram File을 열기 위해서 nios_quartus2_project.bdf를 이용하여 오픈하기 위해서
아래와 같은 순서로 진행한다.
(a) Open을 선택하여 다이얼로그를 연다.
(b) Design File Directory에 가서
(c) nios2_quartus2_project.bdf를 선택하여 연다. 그럼 아래와 같은 그림이 나타난다.
아래와 같이 창이 나온다.
Pin만 표시되고 나머지는 텅 비어 있다. 이제 여기에다가 Qsys를 이용해서 로직을 만들어 넣는다.
-
“Create a New Qsys System”.
Qsys를 이용해서 NIOS-II 프로세서 시스템을 만든다.
새롭게 NIOS-II를 만들러면 Qsys를 클릭해서 창을 띄우고 System Contents tab을 표시한다.
-
“Define the System in Qsys”.
Qsys 시스템을 이용해서 NIOS-II 하드웨어를 만든다.
Qsys는 소프트웨어에 관련된 일은 하지 않는다. 그것은 Qsys에서 생성된 .socinfo를 이용해서 NIOS-II SBT에서 수행한다.
5.1 Specify Target FPGA and Clock Settings
Clock Setting과 Project Setting Tab을 선택하여, 시스템의 클럭과 디바이스를 선택할 수 있다.
(1) Project Setting Tab에서
Device Family 를 선택하고 적당한 Device를 선택한다.
(2) 보드상에서의 OSC를 보고 주파수를 확인한다.
- 이런것 까지 자세하게 설명해 주는 알테라의 친절함.
(3) Clock Setting Tab에서
MHz 컬럼에서 clk_0.clk_0의 clock frequency를 더블 클릭한다.
이 클럭은 Qsys의 기본 시스템 클럭이다.
이 클럭의 값은 FPGA를 드라이빙하는 클럭과 같아야 한다.
(4) 클럭 값을 넣고 Enter...
5.2 Add the on chip memory
프로세서 시스템은 적어도 하나의 메모리를 가지고 있어야 한다. 이 디자인은 20KB의 On Chip Memory를 사용하여서 데이터와 명령어를 위해 준비한다. 다음과 같은 순서로 더한다.
(1) Component Library tab에서
Memories and Memory controllers를 확장하여, On-Chip으로 해서 On-Chip Memory를 선택한다.
대개 ROM/RAM이다.
(2) Add로 하여서
ROM 또는 RAM을 선택한다.
파라미터 설정이 나타나고 아래와 같은 창이 나타난다.
(3) Block Type은 Auto로
Total Memory size는 20480으로 해서 20KB로
- 그외의 설정은 건드리지 말자 모드 기본 값을 사용.
(4) Finish
(5) System contents tab에서 on chip memory의 인스턴스가 나타난다.
(6) Name 컬럼에서 Rename을 클릭 그리고, onchip_mem을 넣는다.
5.3 Add the NIOS-II Processor Core
여기서는 NIOS-II/s 코아를 2KB I Cache를 만든다.
설명을 위해서 NIOS-II/s를 만들어서 사용한다. NIOS-II/s는 간단하지만 성능이 잘 나오는 프로세서이다. (라고 주장..)
(1) Component Library tab에서
Processors -> NIOS-II Processor를 클릭
NIOS-II Tab 윈도우가 나타난다.
(2) NIOS-II Core에서 NIOS-II/s를 선택
(3) H/W Multiplication type에서는 NONE으로 선택
곱셈기가 소프트웨어로 선택
(4) H/W Div를 Off로
나눗셈은 없는 걸로...
(5) Finish를 선택
그러면 Qsys System Contents tab에서
들어가면 NIOS-II가 나타나있지만 오류가 두개 나와 있다. 일단 무시
(6) Name 컬럼을 선택하고 rename 하고, 이름을 cpu로 설정
(7) Connections 컬럼에서
clk 포트를 clk_0클럭에 연결한다.
마찬가지로 on-chip memory의 clk1 포트에 연결한다.
연결 크로스 되는 지점에서 원이 채워져 있으면 연결 비워져 있으면 연결이 안된 것으로 표시된다.
-> Xilinx의 MB와 기본적으로 같은 시스템이다.
(8) clk_0 클럭 소스의 clk_reset 포트를 on-chip memory에 reset1에 연결, NIOS-II 프로세서의 reset_n에 연결한다.
(9) on chip memory의 s1 포트를 NIOS-II의 instruction master와 data_master 포트에 연결한다.
(10) NIOS-II의 프로세서의 reset_n 포트와 on-chip memory의 reset1 포트를 clk0 클럭의 clk_reset 포트에 연결한다.
(11) NIOS-II 프로세서의 설정 창을 다시 더블클릭해서 창을 연다.
(12) Reset Vector에서 reset vector memory list에서 onchip_mem.s1을 선택하고, Reset vector offset box에서
0x0을 넣는다.
(13) Exception vector에서
Exception vector memory 리스트에서 on_chip_mem.s1을 선택하고 Exception Vector offset box에서
값을 0x20을 넣는다.
(14) Cache and Memory Interface tab을 클릭
(15) Instruction cache list에서 2KB를 선택
(16) Burst Transfer는 Disable로
(17) Number of tightly coupled instruction master port(s)에서 None으로 선택
그외의 다른 세팅은 건드리지 말고
(18) Finish를 선택한다.
5.4 Add the JTAG UART
JTAG UART는 NIOS-II와 Host PC간의 인터페이스를 할 수 있다.
USB-Blaster를 이용해서 통신하게 된다.
(1) Component Library tab에서 interface protocols -> Serial -> JTAG UART
를 선택
(2) Add
위와 같이 하고
그외의 설정은 건드리지 않는다.
이름은 jtag_uart로 넣는다.
JTAG UART의 clk 포트는 clk_0에 연결한다.
NIOS-II의 data_master 포트를 avalon_jtag_slave 포트에 연결한다.
5.5 Add the interval timer
이것도 그냥 앞서와 같이 연결한다.
Component Library-> Peripherals -> Micro controller peripherals -> Interval timer
이름은 sys_clk_timer 로 설정
5.6 Add the System ID peripheral
Components Library -> Peripherals -> Debug and Performance -> System ID Peripheral
다른 것은 건드리지 말자
이름은 sys_id 로 한다.
5.7 Add the PIO
Component Library -> Peripherals -> Microcontroller peripherals -> PIO
이름은 led_pio로 설정
나머진 잘 연결한다.
5.8 Specify Base addresses and Interrupt Request Priorities
이 시점에서 필요한 하드웨어가 전부 다 연결되어 있다. 이제 각 컴포넌트의 상호 동작을 설정하는 작업을 해야 한다.
이 섹션에서는 각각의 컴퍼넌트의 base address를 설정하고, 인터럽트 우선 순위를 설정한다.
Qsys는 Assign Base Addresses 커맨드를 통해서 각 컴포넌트의 base address 설정을 할 수 있다.
주의 할 점은
- NIOS-II 프로세서는 31비트 공간을 사용한다. 따라서 0x0000 0000 ~ 0x7FFF FFFF 을 접근한다.
- NIOS-II는 Symbolic constant를 이용해서 어드레스를 참조한다. 이 값은 기억하기 쉬운 방식으로 준비되어 있다.
(누가, 어떻게 ??)
- Qsys는 연속된 메모리 공간을 꽉꽉 채워서 활용할 필요는 없다. 적당하게 배열하여서 설정하면 된다.
Qsys는 Assign Interrupt Number 커맨드를 이용하여 IRQ를 할당할 수 있다.
NIOS-II HAL에서 낮은 IRQ 값을 높은 우선 순위로 판단한다.
적절한 IRQ를 할당은 다음과 같이 한다.
(1) System menu에서 Assign Base Address를 클릭하고,
Base와 End를 설정한다.
(2) IRQ 컬럼에서,
NIOS-II를 JTAG UART와 Interval timer와 연결한다.
(3) jtag_uart에서 IRQ값을 설정한다. 여기서는 16으로 설정한다.
(4) sys_clk_time의 IRQ값은 1로 설정한다.
설정은 IRQ 컬럼에서 연결을 시키면 작은 박스가 표시되는데 여기에다가 값을 넣으면 된다.
위와 같이 나온다.
5.9 Generate the Qsys System
이제 Generation Tab에서 적당하게 설정하고 Generate를 설정한다.
이상이 없으면 잘 만들어 내고 에러가 없다.
이상이 있으면 다시 잘 설정한다.
-
“Integrate the Qsys System into the Quartus II Project”.
이제, Qsys에서 만든 Instance를 Quartus II에서 사용하는 과정을 보여준다.
FPGA 디바이스와 Pin위치를 설정
Quaruts-II에서 컴파일
타이밍 확인
6.1 Instantiate the Qsys System Module in the Quartus II Project
Qsys의 결과물은 system module을 부른다.
예제에서는 블럭다이어그램으로 처리하기 때문에 이름을 first_nios2_system으로 하여서 .bdf에 통합한다.
.bfd에 통합하기 위해서 다음 과정을 거친다.
(1) 블럭도의 화면중 빈 공간에서 더블 클릭해서 심볼 다이얼로그 박스를 오픈한다.
(2) Libraries -> Project
(3) first_nios2_system을 선택
(주) 이름은 그냥 틀려도 Pass 귀찮게 이름까지 맞출 필요는 없다.
(4) OK를 누르면 다이얼로그가 없어지고 마우스를 이용해서 블럭을 배치할 수 있게 된다.
(5) 적절한 위치에 배치후 핀들을 연결한다.
(6) 적당하게 핀들중 없는 핀들은 삭제한다.
- 마우스를 클릭해서 삭제.. 참 친절한 튜토리얼이다.
6.2 Add IP Variation File
Qsys에서 생성된 IP를 Quartus II의 프로젝트에 추가하는 과정이다.
Qsys에서 .qip 파일을 만들어 내는데 이 파일이 스크립트로 되어 있으며 quartus-II에서 IP로 인식하기 위한 정보를 가지고 있다.
전체적으로는 프로젝트에 IP를 추가하는 것이어서 Assignment->Setting에서 프로젝트 세팅 정보에 의해서 추가된다. 아래 과정은 그에 대한 추가 과정을 설명한 내용이다.
1. On the Assignments menu, click Settings . The Settings dialog box appears.
2. Under Category , click Files . The Files page appears.
3. Next to File name , click the browse (... ) button.
4. In the Files of type list, select Script Files (*.tcl, *.sdc, *.qip) .
5. Browse to locate <design files directory>/first_nios2_system/synthesis/first_nios2_system.qip and click Open to select the file.
6. Click Add to include first_nios2_system.qip in the project.
7. Click OK to close the Settings dialog box.
6.3 Assign FPGA Device and Pin Locations
앞서의 디바이스 할당은 Qsys에서 할당된 것으로 NIOS-II의 설정에만 영향을 준다.
여기서는 역시 프로젝트에서 디바이스 할당을 하는 과정을 설명한다.
1. On the Assignments menu, click Device . The Device dialog box appears.
2. In the Family list, select the FPGA family that matches your board.
3. Under Target device , select Specific device selected in 'Available devices' list .
4. Under Available devices , select the exact device that matches your board.
5. Click OK to accept the device assignment.
핀 위치 할당하기
1. On the Processing menu, point to Start , and click Start Analysis & Elaboration to prepare for assigning pin locations.
The analysis starts by displaying a “data not available” message and can take several minutes.
A confirmation message box appears when analysis and elaboration completes.
2. Click OK .
3. On the Assignments menu, click Pin Planner . The Quartus II Pin Planner appears.
아래 그림은 Pin Planner이다.
4. In the Node Name column, locate PLD_CLOCKINPUT .
5. In the PLD_CLOCKINPUT row, double-click in the Location cell to access a list of available pin locations.
6. Select the appropriate FPGA pin that connects to the oscillator on the board.
7. In the PLD_CLOCKINPUT row, double-click in the I/O Standard cell to access a list of available I/O standards.
8. Select the appropriate I/O standard that connects to the oscillator on the board.
9. If you connected the LED pins in the board design schematic, repeat steps 4 to 8
for each of the LED output pins (LEDG[0] , LEDG[1] , LEDG[2] , LEDG[3] ,
LEDG[4] , LEDG[5] , LEDG[6] , LEDG[7] ) to assign appropriate pin locations.
10. On the File menu, click Close to save the assignments.
11. On the Assignments menu, click Device . The Device dialog box appears.
12. Click Device and Pin Options . The Device and Pin Options dialog box appears.
13. Click the Unused Pins page.
14. In the Reserve all unused pins list, select As input tri-stated with weak pull-up . With this setting, all unused I/O pins on the FPGA enter a high-impedance state after power-up.
15. Click OK to close the Device and Pin Options dialog box.
16. Click OK to close the Device dialog box.
6.4 Compile the Quartus II Project and Verify Timing
이제 컴파일 할 준비가 되었다. 컴파일하여서 sof 파일을 만들어 낸다.
컴파일한 뒤에 타이밍 정보를 확인한다.
1. On the File menu, click Open .
2. In the Files of type list, select Script Files (*.tcl, *.sdc, *.qip) .
3. Browse to locate <design files directory>/hw_dev_tutorial.sdc and click Open . The file opens in the text editor.
4. Locate the following create_clock command:
create_clock -name sopc_clk -period 20 [get_ports PLD_CLOCKINPUT]
5. Change the period setting from 20 to the clock period (1/frequency) in nanoseconds of the oscillator driving the clock pin.
6. On the File menu, click Save .
7. On the Assignments menu, click Settings . The Settings dialog box appears.
8. Under Category , click TimeQuest Timing Analyzer .
9. Next to File name , click the browse (... ) button.
10. Browse to locate <design files directory>/hw_dev_tutorial.sdc and click Open to select the file.
11. Click Add to include hw_dev_tutorial.sdc in the project.
12. Turn on Enable multicorner timing analysis during compilation .
Multiconer support에 대한 내용이 없고, 다른 카테고리에 그 부분이 있다.
- 좀더 확인이 필요하다.
13. Click OK .
컴파일은 아래와 같은 순서로 진행한다.
1. On the Processing menu, click Start Compilation . The Tasks window and percentage and time counters in the lower-right corner display progress. The compilation process can take several minutes. When compilation completes, a dialog box displays the message "Full Compilation was successful."
2. Click OK . The Quartus II software displays the Compilation Report tab.
(주) 여기서 Compilation Report Tab의 의미가 좀 헤깔렸다.
그냥 Table of Contents가 즉 Navigation panel 자체가 Report Tab을 의미한다.
이 Contents는 Report에 대한 Contents이다.
3. Expand the TimeQuest Timing Analyzer category in the compilation report.
4. Click Multicorner Timing Analysis Summary .
5. Verify that the Worst-case Slack values are positive numbers for Setup , Hold , Recovery , and Removal . If any of these values are negative, the design might not operate properly in hardware. To meet timing, adjust Quartus II assignments to optimize fitting, or reduce the oscillator frequency driving the FPGA.
이제 겨우 다운로드 할 준비가 되었다.
- 정말 길다. 에휴
-
“Download Hardware Design to Target FPGA”.
SoF파일을 타겟 보드에 다운로드 한다.
1. Connect the board to the host computer with the download cable, and apply power to the board.
2. On the Tools menu in the Quartus II software, click Programmer . The Quartus II Programmer appears and automatically displays the appropriate configuration file (nios2_quartus2_project.sof ).
3. Click Hardware Setup in the upper left corner of the Quartus II Programmer to verify your download cable settings. The Hardware Setup dialog box appears.
4. Select the appropriate download cable in the Currently selected hardware list. If the appropriate download cable does not appear in the list, you must first install drivers for the cable.
5. Click Close .
6. In the nios2_quartus2_project.sof row, turn on Program/Configure .
7. Click Start . The Progress meter sweeps to 100% as the Quartus II software configures the FPGA.
이제 구동할 준비가 되어 있지만, 프로그램이 없으니 구동이 안된다.
다음 부분에서 프로그램을 준비한다.
-
“Develop Software Using the Nios II SBT for Eclipse”.
이제 NIOS-II SBT를 이용하여 간단한 C 코드를 만들고 컴파일해서 구동을 하는 과정을 보여준다.
다음과 같은 것을 진행한다.
■ Create new Nios II C/C++ application and BSP projects.
■ Compile the projects.
프로그램 관련된 일을 진행하기 위해서는 .sofinfo 파일을 가지고 있어야 한다.
이 파일은 앞서 만들어 두었다.
8.1 Create a New Nios II Application and BSP from Template
1) NIOS-II BST를 실행한다.
2) Eclipse에서 NIOS-II perspective로 설정한다.
Window->Open Perspective->Other
다이얼로그가 나오면 NIOS-II로 설정한다.
아래 창이 기본적으로 설정된 창이다.
3) File->New->NIOS II Application and BSP from template 를 선택한다.
그럼 다이얼로그 박스가 나온다.
아래 다이얼로그가 나타난다.
5. Under Target hardware information , next to SOPC Information File name , browse to locate the <design files directory> .
6. Select first_nios2_system.sopcinfo and click Open . You return to the Nios II Application and BSP from Template wizard showing current information for the SOPC Information File name and CPU name fields.
7. In the Project name box, type count_binary .
8. In the Templates list, select Count Binary .
9. Click Finish .
적당하게 세팅하고 OK를 두르면 된다.
■ count_binary—Your C/C++ application project
■ count_binary_bsp—A board support package that encapsulates the details of the Nios II system hardware
8.2 Compile the Project
현재 빌드된 NIOS-II는 20KB의 메모리 공간만 가지고 있으므로 그에 맞게 시스템을 재 조정해야 한다.
1. In the Project Explorer view, right-click count_binary_bsp and click Properties . The Properties for count_binary_bsp dialog box appears.
2. Click the Nios II BSP Properties page. The Nios II BSP Properties page contains basic software build settings. Figure 1–21 shows the GUI.
3. Adjust the following settings to reduce the size of the compiled executable:
a. Turn on Reduced device drivers .
b. Turn off Support C++ .
c. Turn off GPROF support .
d. Turn on Small C library .
e. Turn off ModelSim only, no hardware support .
4. Click OK . The BSP regenerates, the Properties dialog box closes, and you return to the Nios II SBT for Eclipse.
5. In the Project Explorer view, right-click the count_binary project and click Build Project .
8.3 Run the Program on Target Hardware
이제 드디어 다운로드 한다.
1. Right-click the count_binary project, point to Run As , and then click Nios II Hardware . The Nios II SBT for Eclipse downloads the program to the FPGA on the target board and the program starts running.
When the target hardware starts running the program, the Nios II Console view displays character I/O output. Figure 1–22 shows the output. If you connected
LEDs to the Nios II system in “Integrate the Qsys System into the Quartus II Project” on page 1–24 , then the LEDs blink in a binary counting pattern.
2. Click the Terminate icon (the red square) on the toolbar of the Nios II Console view to terminate the run session. When you click the Terminate icon, the Nios II SBT for Eclipse disconnects from the target hardware.
실행 결과를 확인하면 OK
“Run the Program on Target Hardware” on page 1–35.