利用Quartus 18.0设计Nios II系统教程
最后修改日期:2023/03/11
1. 概要
1.1. 软件
Quartus 18.0 Prime Standard及内部工具
1.2. 电路板
Altera DE2-115开发板
1.3. PLD器件型号
FPGA:Altera Cyclone IV E
No: EP4CE115F29C7
1.4. 使用的电路板的部件
绿色LED(LEDG)\(\times\) 9 、按键开关(KEY)\(\times\) 4、七段数码管(SEG7)\(\times\) 8、LCD_16207 \(\times\) 1
1.5. 参考文件
DE2-115 System CD(From Terasic)
下面按照设计顺序介绍。
2. Platform Designer
2.1. 进入Platform Designer
在Quartus主界面先创建一个项目。然后点击Tools-Platform Designer…
。主界面如下:
左上,IP Catalog
,寻找已有硬件IP。
中间,System Contents
,系统的内容。
双击某个器件Name
可以编辑其Parameters。
2.2. 模块设计
在左上的IP Catalog当中可以找到已有IP,配置并插入。
2.2.1. CLK_50
时钟。这个模块在进入Platform Designer就有的。这只是一个时钟信号接口,命名为“CLK_50”只是为了提醒自己:这个接口需要输入50 MHz的时钟。
2.2.2. Nios II Processor
处理器。IP为Nios II Processor
。选择f类型。
2.2.3. RAM
CPU-RAM。IP为On-Chip Memory(RAM or ROM)
。选择RAM。
存储器不能取得太小,否则到时候软件程序内存不够用。但是也不能取得太大,否则在Quartus中进行分配时会提示没有足够的资源(因为存储器是用逻辑单元分配出来的)。
在可能范围内尽量取大一些。经过实验,对于本器件,第一次取327680 bytes没有足够资源,占用比例约为142%。第二次取204800 bytes正常,估计最大可以取到230000 bytes左右。
2.2.4. ROM
设置同上,仅换类型为ROM。
2.2.5. JTAG UART
IP为JTAG UART
,默认。
2.2.6. System ID Peripheral
IP为System ID Peripheral
,默认。
至此,以上部件是必须的,下面都是一些IO接口。
2.2.7. LEDG
绿色led。IP为9 bits Output PIO
。
2.2.8. KEY
按键。IP为4 bits Input PIO
。需要设置中断:Synchronously capture ON; Generate IRQ ON; IRQ type: EDGE[1]。
关于中断的解释
Edge Capture Register就是增设一个边沿采样的寄存器,没有这个,就不能是边沿敏感,而是电平敏感。考虑一下按键的实际应用场景:无论按键按下去的快或者慢,一般都认为“按下去-松开”是一次按键过程,所以必须是边沿敏感。如果是电平敏感,那么按键按的时间长就能触发多次,这是我们不希望的。
Edge Type就是边沿类型。因为DE2-115板子的按键接法是:上拉电阻、下拉按键,所以按键不按是高电平,按下去是低电平。因此选择RISING,就是在按键松手的一瞬间触发;选择FALLING,就是在按键按下去的一瞬间触发。理论上都是可以的,只要保证一次按键(即同时有一个FALLING和RISING)中只触发一次即可。
IRQ,即Interrupt Request(中断请求)。只有在这里的硬件中注册了IRQ,处理器才会允许该部件的IRQ。也就是说,有IRQ许可的部件可以请求打断处理器的当前任务,并插入自己的任务。这里选择IRQ Type为Edge,与前面匹配。
2.2.9. LCD
LCD显示屏。IP为Avalon LCD 16207。
2.2.10. SEG7
共阳接法七段数码管,总共8个。数码管命名应该是左侧为HEX7,右侧更小。单个数码管定义为:
其中[0]~[6]对应灯管0~6,DP默认不亮,不可用。
参考文档中是自定义了对应的IP,这里可以用8 × 7 bits Output PIO
。Platform Designer对一组PIO
的限制是32 bits,因此分成两组,每组即28 bits,分别命名为SEG7_LEFT和SEG7_RIGHT。
2.3. 连接
先放出整个系统的图:
Connections
是内部连接。
Name
中粗体是器件名字,可以修改,这决定了后面C语言中的XXX_BASE
的名字。细体是器件的接口名字,也是以Connections
相连的管脚。
Base
是基地址,也就是软件程序找到器件的方式。不用记,在C语言中都会有现成的宏定义。
图中…被省略的是IRQ(中断请求),表示了哪些部件可以申请中断,以及中断的优先级。
2.4. 分配地址
2.4.1. 分配基地址
点击System-Assign Base Address
,分配地址后右侧base栏地址会变成黑色粗体。
2.4.2. 指定复位和异常地址
处理器的Parameters-Vectors
,将Reset Vector Memory
和Exception Vector Memory
分别改为ROM.s1
和RAM.s1
,然后直接点击Finish
。
设置步骤到此结束,正常来说,此时窗口下方的Message应该是0 Error的。
2.5. 导出HDL
保存文件,点击右下角Generate HDL…
,等待完成。
2.6. 导出例化模板
这里使用的是Verilog。
点击Generate-Show Instantiation Template…
,出现对应的代码,可以复制。
3. Quartus 18.0硬件设计
这种稍微复杂的系统,已经很难用bsf形式设计,采用Verilog设计。
3.1. 添加文件
添加对应的.qsys文件到Project当中,也就是Platform Designer
的Generate HDL
生成的结果。
3.2. 添加PLL
添加IP-PLL。点击IP Catalog-搜索ALTPLL
,输出锁定为50 MHz,不需要rst、locked信号。因为整体用Verilog设计,可以不生成.bsf文件。以下是PLL的接口。
module PLL(
input inclk0,
output c0
);
3.3. 顶层模块设计
顶层模块,基本就是将之前导出的HDL例化代码复制过来并补充完整。
下面给出顶层模块的Verilog文件,仅供参考。
点击查看代码
`timescale 1ns/1ps
/* Macro define */
module prj_SoPC_lcd_ledg_key_seg7
//#(parameter)
(
//inputs
CLOCK_50,
KEY,
//outputs
LCD_RS,
LCD_RW,
LCD_EN,
LCD_DATA,
LCD_BLON,
LEDG,
HEX0,
HEX1,
HEX2,
HEX3,
HEX4,
HEX5,
HEX6,
HEX7,
);
/* Parameter define */
/* I/O define */
input CLOCK_50;
input [3:0]KEY;
output LCD_RS;
output LCD_RW;
output LCD_EN;
inout [7:0]LCD_DATA;
output LCD_BLON; //not supported
output [8:0]LEDG;
output [6:0]HEX0;
output [6:0]HEX1;
output [6:0]HEX2;
output [6:0]HEX3;
output [6:0]HEX4;
output [6:0]HEX5;
output [6:0]HEX6;
output [6:0]HEX7;
/* I/O port define */
/* Other port define */
wire CLOCK_PLL;
/* Assignments */
assign LCD_BLON = 1'b0; //not supported
/* Utilization */
SoPC u0_SoPC (
.clk_clk (CLOCK_PLL), // clk.clk
.ledg_external_connection_export (LEDG[8:0]), // ledg_external_connection.export
.key_external_connection_export (KEY[3:0]), // key_external_connection.export
.lcd_external_RS (LCD_RS), // lcd_external.RS
.lcd_external_RW (LCD_RW), // .RW
.lcd_external_data (LCD_DATA[7:0]), // .data
.lcd_external_E (LCD_EN), // .E
.seg7_left_external_connection_export ({HEX7[6:0],HEX6[6:0],HEX5[6:0],HEX4[6:0]}), // seg7_left_external_connection.export
.seg7_right_external_connection_export ({HEX3[6:0],HEX2[6:0],HEX1[6:0],HEX0[6:0]}) // seg7_right_external_connection.export
);
PLL uo_PLL (
.inclk0 (CLOCK_50),
.c0 (CLOCK_PLL)
);
/* Logic block begin */
endmodule
需要说明的是:
- 顶层模块的端口命名需要与已有的一个Pin Assignments文件一致,这样可以直接导入,更方便。点击
Assignments-Import Assignments…
,导入对应.csv文件。以下给出文件内容。
点击查看代码
# Copyright (C) 1991-2010 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
# Quartus II Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Full Version
# File: E:\SVN\DE2_115\trunk\test\de2_115_golden_sopc\de2_115_golden_sopc.csv
# Generated on: Fri Jun 18 14:51:18 2010
# Note: The column header names should not be changed if you wish to import this .csv file into the Quartus II software.
To,Direction,Location,I/O Bank,VREF Group,I/O Standard,Reserved
AUD_ADCDAT,Input,PIN_D2,1,B1_N0,3.3-V LVTTL,
AUD_ADCLRCK,Bidir,PIN_C2,1,B1_N0,3.3-V LVTTL,
AUD_BCLK,Bidir,PIN_F2,1,B1_N1,3.3-V LVTTL,
AUD_DACDAT,Output,PIN_D1,1,B1_N0,3.3-V LVTTL,
AUD_DACLRCK,Bidir,PIN_E3,1,B1_N0,3.3-V LVTTL,
AUD_XCK,Output,PIN_E1,1,B1_N0,3.3-V LVTTL,
CLOCK2_50,Input,PIN_AG14,3,B3_N0,3.3-V LVTTL,
CLOCK3_50,Input,PIN_AG15,4,B4_N2,3.3-V LVTTL,
CLOCK_50,Input,PIN_Y2,2,B2_N0,3.3-V LVTTL,
DRAM_ADDR[12],Output,PIN_Y7,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[11],Output,PIN_AA5,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[10],Output,PIN_R5,2,B2_N0,3.3-V LVTTL,
DRAM_ADDR[9],Output,PIN_Y6,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[8],Output,PIN_Y5,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[7],Output,PIN_AA7,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[6],Output,PIN_W7,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[5],Output,PIN_W8,2,B2_N2,3.3-V LVTTL,
DRAM_ADDR[4],Output,PIN_V5,2,B2_N1,3.3-V LVTTL,
DRAM_ADDR[3],Output,PIN_P1,1,B1_N2,3.3-V LVTTL,
DRAM_ADDR[2],Output,PIN_U8,2,B2_N1,3.3-V LVTTL,
DRAM_ADDR[1],Output,PIN_V8,2,B2_N1,3.3-V LVTTL,
DRAM_ADDR[0],Output,PIN_R6,2,B2_N0,3.3-V LVTTL,
DRAM_BA[1],Output,PIN_R4,2,B2_N0,3.3-V LVTTL,
DRAM_BA[0],Output,PIN_U7,2,B2_N1,3.3-V LVTTL,
DRAM_CAS_N,Output,PIN_V7,2,B2_N1,3.3-V LVTTL,
DRAM_CKE,Output,PIN_AA6,2,B2_N2,3.3-V LVTTL,
DRAM_CLK,Output,PIN_AE5,3,B3_N2,3.3-V LVTTL,
DRAM_CS_N,Output,PIN_T4,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[31],Bidir,PIN_U1,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[30],Bidir,PIN_U4,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[29],Bidir,PIN_T3,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[28],Bidir,PIN_R3,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[27],Bidir,PIN_R2,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[26],Bidir,PIN_R1,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[25],Bidir,PIN_R7,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[24],Bidir,PIN_U5,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[23],Bidir,PIN_L7,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[22],Bidir,PIN_M7,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[21],Bidir,PIN_M4,1,B1_N1,3.3-V LVTTL,
DRAM_DQ[20],Bidir,PIN_N4,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[19],Bidir,PIN_N3,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[18],Bidir,PIN_P2,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[17],Bidir,PIN_L8,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[16],Bidir,PIN_M8,1,B1_N2,3.3-V LVTTL,
DRAM_DQ[15],Bidir,PIN_AC2,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[14],Bidir,PIN_AB3,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[13],Bidir,PIN_AC1,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[12],Bidir,PIN_AB2,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[11],Bidir,PIN_AA3,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[10],Bidir,PIN_AB1,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[9],Bidir,PIN_Y4,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[8],Bidir,PIN_Y3,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[7],Bidir,PIN_U3,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[6],Bidir,PIN_V1,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[5],Bidir,PIN_V2,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[4],Bidir,PIN_V3,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[3],Bidir,PIN_W1,2,B2_N1,3.3-V LVTTL,
DRAM_DQ[2],Bidir,PIN_V4,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[1],Bidir,PIN_W2,2,B2_N0,3.3-V LVTTL,
DRAM_DQ[0],Bidir,PIN_W3,2,B2_N2,3.3-V LVTTL,
DRAM_DQM[3],Output,PIN_N8,1,B1_N2,3.3-V LVTTL,
DRAM_DQM[2],Output,PIN_K8,1,B1_N2,3.3-V LVTTL,
DRAM_DQM[1],Output,PIN_W4,2,B2_N2,3.3-V LVTTL,
DRAM_DQM[0],Output,PIN_U2,2,B2_N0,3.3-V LVTTL,
DRAM_RAS_N,Output,PIN_U6,2,B2_N1,3.3-V LVTTL,
DRAM_WE_N,Output,PIN_V6,2,B2_N1,3.3-V LVTTL,
EEP_I2C_SCLK,Output,PIN_D14,8,B8_N0,3.3-V LVTTL,
EEP_I2C_SDAT,Bidir,PIN_E14,8,B8_N0,3.3-V LVTTL,
ENET0_GTX_CLK,Output,PIN_A17,7,B7_N2,2.5 V,
ENET0_INT_N,Input,PIN_A21,7,B7_N1,2.5 V,
ENET0_LINK100,Input,PIN_C14,8,B8_N0,3.3-V LVTTL,
ENET0_MDC,Output,PIN_C20,7,B7_N1,2.5 V,
ENET0_MDIO,Bidir,PIN_B21,7,B7_N1,2.5 V,
ENET0_RST_N,Output,PIN_C19,7,B7_N1,2.5 V,
ENET0_RX_CLK,Input,PIN_A15,7,B7_N2,2.5 V,
ENET0_RX_COL,Input,PIN_E15,7,B7_N2,2.5 V,
ENET0_RX_CRS,Input,PIN_D15,7,B7_N2,2.5 V,
ENET0_RX_DATA[3],Input,PIN_C15,7,B7_N2,2.5 V,
ENET0_RX_DATA[2],Input,PIN_D17,7,B7_N1,2.5 V,
ENET0_RX_DATA[1],Input,PIN_D16,7,B7_N2,2.5 V,
ENET0_RX_DATA[0],Input,PIN_C16,7,B7_N2,2.5 V,
ENET0_RX_DV,Input,PIN_C17,7,B7_N1,2.5 V,
ENET0_RX_ER,Input,PIN_D18,7,B7_N1,2.5 V,
ENET0_TX_CLK,Input,PIN_B17,7,B7_N2,2.5 V,
ENET0_TX_DATA[3],Output,PIN_B19,7,B7_N1,2.5 V,
ENET0_TX_DATA[2],Output,PIN_A19,7,B7_N1,2.5 V,
ENET0_TX_DATA[1],Output,PIN_D19,7,B7_N1,2.5 V,
ENET0_TX_DATA[0],Output,PIN_C18,7,B7_N1,2.5 V,
ENET0_TX_EN,Output,PIN_A18,7,B7_N1,2.5 V,
ENET0_TX_ER,Output,PIN_B18,7,B7_N1,2.5 V,
ENET1_GTX_CLK,Output,PIN_C23,7,B7_N0,2.5 V,
ENET1_INT_N,Input,PIN_D24,7,B7_N0,2.5 V,
ENET1_LINK100,Input,PIN_D13,8,B8_N0,3.3-V LVTTL,
ENET1_MDC,Output,PIN_D23,7,B7_N0,2.5 V,
ENET1_MDIO,Bidir,PIN_D25,7,B7_N0,2.5 V,
ENET1_RST_N,Output,PIN_D22,7,B7_N0,2.5 V,
ENET1_RX_CLK,Input,PIN_B15,7,B7_N2,2.5 V,
ENET1_RX_COL,Input,PIN_B22,7,B7_N1,2.5 V,
ENET1_RX_CRS,Input,PIN_D20,7,B7_N1,2.5 V,
ENET1_RX_DATA[3],Input,PIN_D21,7,B7_N0,2.5 V,
ENET1_RX_DATA[2],Input,PIN_A23,7,B7_N0,2.5 V,
ENET1_RX_DATA[1],Input,PIN_C21,7,B7_N0,2.5 V,
ENET1_RX_DATA[0],Input,PIN_B23,7,B7_N0,2.5 V,
ENET1_RX_DV,Input,PIN_A22,7,B7_N1,2.5 V,
ENET1_RX_ER,Input,PIN_C24,7,B7_N0,2.5 V,
ENET1_TX_CLK,Input,PIN_C22,7,B7_N0,2.5 V,
ENET1_TX_DATA[3],Output,PIN_C26,7,B7_N0,2.5 V,
ENET1_TX_DATA[2],Output,PIN_B26,7,B7_N0,2.5 V,
ENET1_TX_DATA[1],Output,PIN_A26,7,B7_N0,2.5 V,
ENET1_TX_DATA[0],Output,PIN_C25,7,B7_N0,2.5 V,
ENET1_TX_EN,Output,PIN_B25,7,B7_N0,2.5 V,
ENET1_TX_ER,Output,PIN_A25,7,B7_N0,2.5 V,
ENETCLK_25,Input,PIN_A14,8,B8_N0,3.3-V LVTTL,
EX_IO[6],Bidir,PIN_D9,8,B8_N1,3.3-V LVTTL,
EX_IO[5],Bidir,PIN_E10,8,B8_N1,3.3-V LVTTL,
EX_IO[4],Bidir,PIN_F14,8,B8_N0,3.3-V LVTTL,
EX_IO[3],Bidir,PIN_H14,8,B8_N0,3.3-V LVTTL,
EX_IO[2],Bidir,PIN_H13,8,B8_N0,3.3-V LVTTL,
EX_IO[1],Bidir,PIN_J14,8,B8_N0,3.3-V LVTTL,
EX_IO[0],Bidir,PIN_J10,8,B8_N1,3.3-V LVTTL,
FL_ADDR[22],Output,PIN_AD11,3,B3_N0,3.3-V LVTTL,
FL_ADDR[21],Output,PIN_AD10,3,B3_N2,3.3-V LVTTL,
FL_ADDR[20],Output,PIN_AE10,3,B3_N1,3.3-V LVTTL,
FL_ADDR[19],Output,PIN_AD12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[18],Output,PIN_AC12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[17],Output,PIN_AH12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[16],Output,PIN_AA8,3,B3_N1,3.3-V LVTTL,
FL_ADDR[15],Output,PIN_Y10,3,B3_N2,3.3-V LVTTL,
FL_ADDR[14],Output,PIN_AC8,3,B3_N1,3.3-V LVTTL,
FL_ADDR[13],Output,PIN_AD8,3,B3_N2,3.3-V LVTTL,
FL_ADDR[12],Output,PIN_AA10,3,B3_N1,3.3-V LVTTL,
FL_ADDR[11],Output,PIN_AF9,3,B3_N1,3.3-V LVTTL,
FL_ADDR[10],Output,PIN_AE9,3,B3_N1,3.3-V LVTTL,
FL_ADDR[9],Output,PIN_AB10,3,B3_N1,3.3-V LVTTL,
FL_ADDR[8],Output,PIN_AB12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[7],Output,PIN_AB13,3,B3_N0,3.3-V LVTTL,
FL_ADDR[6],Output,PIN_AA12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[5],Output,PIN_AA13,3,B3_N0,3.3-V LVTTL,
FL_ADDR[4],Output,PIN_Y12,3,B3_N0,3.3-V LVTTL,
FL_ADDR[3],Output,PIN_Y14,3,B3_N0,3.3-V LVTTL,
FL_ADDR[2],Output,PIN_Y13,3,B3_N0,3.3-V LVTTL,
FL_ADDR[1],Output,PIN_AH7,3,B3_N1,3.3-V LVTTL,
FL_ADDR[0],Output,PIN_AG12,3,B3_N0,3.3-V LVTTL,
FL_CE_N,Output,PIN_AG7,3,B3_N2,3.3-V LVTTL,
FL_DQ[7],Bidir,PIN_AF12,3,B3_N1,3.3-V LVTTL,
FL_DQ[6],Bidir,PIN_AH11,3,B3_N0,3.3-V LVTTL,
FL_DQ[5],Bidir,PIN_AG11,3,B3_N0,3.3-V LVTTL,
FL_DQ[4],Bidir,PIN_AF11,3,B3_N1,3.3-V LVTTL,
FL_DQ[3],Bidir,PIN_AH10,3,B3_N1,3.3-V LVTTL,
FL_DQ[2],Bidir,PIN_AG10,3,B3_N1,3.3-V LVTTL,
FL_DQ[1],Bidir,PIN_AF10,3,B3_N1,3.3-V LVTTL,
FL_DQ[0],Bidir,PIN_AH8,3,B3_N1,3.3-V LVTTL,
FL_OE_N,Output,PIN_AG8,3,B3_N1,3.3-V LVTTL,
FL_RST_N,Output,PIN_AE11,3,B3_N1,3.3-V LVTTL,
FL_RY,Input,PIN_Y1,2,B2_N0,3.3-V LVTTL,
FL_WE_N,Output,PIN_AC10,3,B3_N0,3.3-V LVTTL,
FL_WP_N,Output,PIN_AE12,3,B3_N1,3.3-V LVTTL,
GPIO[35],Bidir,PIN_AG26,4,B4_N0,3.3-V LVTTL,
GPIO[34],Bidir,PIN_AH23,4,B4_N1,3.3-V LVTTL,
GPIO[33],Bidir,PIN_AH26,4,B4_N0,3.3-V LVTTL,
GPIO[32],Bidir,PIN_AF20,4,B4_N1,3.3-V LVTTL,
GPIO[31],Bidir,PIN_AG23,4,B4_N1,3.3-V LVTTL,
GPIO[30],Bidir,PIN_AE20,4,B4_N1,3.3-V LVTTL,
GPIO[29],Bidir,PIN_AF26,4,B4_N1,3.3-V LVTTL,
GPIO[28],Bidir,PIN_AH22,4,B4_N1,3.3-V LVTTL,
GPIO[27],Bidir,PIN_AE24,4,B4_N0,3.3-V LVTTL,
GPIO[26],Bidir,PIN_AG22,4,B4_N1,3.3-V LVTTL,
GPIO[25],Bidir,PIN_AE25,4,B4_N1,3.3-V LVTTL,
GPIO[24],Bidir,PIN_AH25,4,B4_N1,3.3-V LVTTL,
GPIO[23],Bidir,PIN_AD25,4,B4_N0,3.3-V LVTTL,
GPIO[22],Bidir,PIN_AG25,4,B4_N1,3.3-V LVTTL,
GPIO[21],Bidir,PIN_AD22,4,B4_N0,3.3-V LVTTL,
GPIO[20],Bidir,PIN_AF22,4,B4_N0,3.3-V LVTTL,
GPIO[19],Bidir,PIN_AF21,4,B4_N1,3.3-V LVTTL,
GPIO[18],Bidir,PIN_AE22,4,B4_N0,3.3-V LVTTL,
GPIO[17],Bidir,PIN_AC22,4,B4_N0,3.3-V LVTTL,
GPIO[16],Bidir,PIN_AF25,4,B4_N1,3.3-V LVTTL,
GPIO[15],Bidir,PIN_AE21,4,B4_N1,3.3-V LVTTL,
GPIO[14],Bidir,PIN_AF24,4,B4_N1,3.3-V LVTTL,
GPIO[13],Bidir,PIN_AF15,4,B4_N2,3.3-V LVTTL,
GPIO[12],Bidir,PIN_AD19,4,B4_N0,3.3-V LVTTL,
GPIO[11],Bidir,PIN_AF16,4,B4_N2,3.3-V LVTTL,
GPIO[10],Bidir,PIN_AC19,4,B4_N0,3.3-V LVTTL,
GPIO[9],Bidir,PIN_AE15,4,B4_N2,3.3-V LVTTL,
GPIO[8],Bidir,PIN_AD15,4,B4_N2,3.3-V LVTTL,
GPIO[7],Bidir,PIN_AE16,4,B4_N2,3.3-V LVTTL,
GPIO[6],Bidir,PIN_AD21,4,B4_N0,3.3-V LVTTL,
GPIO[5],Bidir,PIN_Y16,4,B4_N0,3.3-V LVTTL,
GPIO[4],Bidir,PIN_AC21,4,B4_N0,3.3-V LVTTL,
GPIO[3],Bidir,PIN_Y17,4,B4_N0,3.3-V LVTTL,
GPIO[2],Bidir,PIN_AB21,4,B4_N0,3.3-V LVTTL,
GPIO[1],Bidir,PIN_AC15,4,B4_N2,3.3-V LVTTL,
GPIO[0],Bidir,PIN_AB22,4,B4_N0,3.3-V LVTTL,
HEX0[6],Output,PIN_H22,6,B6_N0,2.5 V,
HEX0[5],Output,PIN_J22,6,B6_N0,2.5 V,
HEX0[4],Output,PIN_L25,6,B6_N1,2.5 V,
HEX0[3],Output,PIN_L26,6,B6_N1,2.5 V,
HEX0[2],Output,PIN_E17,7,B7_N2,2.5 V,
HEX0[1],Output,PIN_F22,7,B7_N0,2.5 V,
HEX0[0],Output,PIN_G18,7,B7_N2,2.5 V,
HEX1[6],Output,PIN_U24,5,B5_N0,2.5 V,
HEX1[5],Output,PIN_U23,5,B5_N1,2.5 V,
HEX1[4],Output,PIN_W25,5,B5_N1,2.5 V,
HEX1[3],Output,PIN_W22,5,B5_N0,2.5 V,
HEX1[2],Output,PIN_W21,5,B5_N1,2.5 V,
HEX1[1],Output,PIN_Y22,5,B5_N0,2.5 V,
HEX1[0],Output,PIN_M24,6,B6_N2,2.5 V,
HEX2[6],Output,PIN_W28,5,B5_N1,2.5 V,
HEX2[5],Output,PIN_W27,5,B5_N1,2.5 V,
HEX2[4],Output,PIN_Y26,5,B5_N1,2.5 V,
HEX2[3],Output,PIN_W26,5,B5_N1,2.5 V,
HEX2[2],Output,PIN_Y25,5,B5_N1,2.5 V,
HEX2[1],Output,PIN_AA26,5,B5_N1,2.5 V,
HEX2[0],Output,PIN_AA25,5,B5_N1,2.5 V,
HEX3[6],Output,PIN_Y19,4,B4_N0,3.3-V LVTTL,
HEX3[5],Output,PIN_AF23,4,B4_N0,3.3-V LVTTL,
HEX3[4],Output,PIN_AD24,4,B4_N0,3.3-V LVTTL,
HEX3[3],Output,PIN_AA21,4,B4_N0,3.3-V LVTTL,
HEX3[2],Output,PIN_AB20,4,B4_N0,3.3-V LVTTL,
HEX3[1],Output,PIN_U21,5,B5_N0,2.5 V,
HEX3[0],Output,PIN_V21,5,B5_N1,2.5 V,
HEX4[6],Output,PIN_AE18,4,B4_N2,3.3-V LVTTL,
HEX4[5],Output,PIN_AF19,4,B4_N1,3.3-V LVTTL,
HEX4[4],Output,PIN_AE19,4,B4_N1,3.3-V LVTTL,
HEX4[3],Output,PIN_AH21,4,B4_N2,3.3-V LVTTL,
HEX4[2],Output,PIN_AG21,4,B4_N2,3.3-V LVTTL,
HEX4[1],Output,PIN_AA19,4,B4_N0,3.3-V LVTTL,
HEX4[0],Output,PIN_AB19,4,B4_N0,3.3-V LVTTL,
HEX5[6],Output,PIN_AH18,4,B4_N2,3.3-V LVTTL,
HEX5[5],Output,PIN_AF18,4,B4_N1,3.3-V LVTTL,
HEX5[4],Output,PIN_AG19,4,B4_N2,3.3-V LVTTL,
HEX5[3],Output,PIN_AH19,4,B4_N2,3.3-V LVTTL,
HEX5[2],Output,PIN_AB18,4,B4_N0,3.3-V LVTTL,
HEX5[1],Output,PIN_AC18,4,B4_N1,3.3-V LVTTL,
HEX5[0],Output,PIN_AD18,4,B4_N1,3.3-V LVTTL,
HEX6[6],Output,PIN_AC17,4,B4_N2,3.3-V LVTTL,
HEX6[5],Output,PIN_AA15,4,B4_N2,3.3-V LVTTL,
HEX6[4],Output,PIN_AB15,4,B4_N2,3.3-V LVTTL,
HEX6[3],Output,PIN_AB17,4,B4_N1,3.3-V LVTTL,
HEX6[2],Output,PIN_AA16,4,B4_N2,3.3-V LVTTL,
HEX6[1],Output,PIN_AB16,4,B4_N2,3.3-V LVTTL,
HEX6[0],Output,PIN_AA17,4,B4_N1,3.3-V LVTTL,
HEX7[6],Output,PIN_AA14,3,B3_N0,3.3-V LVTTL,
HEX7[5],Output,PIN_AG18,4,B4_N2,3.3-V LVTTL,
HEX7[4],Output,PIN_AF17,4,B4_N2,3.3-V LVTTL,
HEX7[3],Output,PIN_AH17,4,B4_N2,3.3-V LVTTL,
HEX7[2],Output,PIN_AG17,4,B4_N2,3.3-V LVTTL,
HEX7[1],Output,PIN_AE17,4,B4_N2,3.3-V LVTTL,
HEX7[0],Output,PIN_AD17,4,B4_N2,3.3-V LVTTL,
HSMC_CLKIN0,Input,PIN_AH15,4,B4_N2,3.0-V LVTTL,
HSMC_CLKIN_P1,Input,PIN_J27,6,B6_N2,LVDS,
HSMC_CLKIN_P2,Input,PIN_Y27,5,B5_N0,LVDS,
HSMC_CLKOUT0,Output,PIN_AD28,5,B5_N2,2.5 V,
HSMC_CLKOUT_P1,Output,PIN_G23,6,B6_N0,LVDS,
HSMC_CLKOUT_P2,Output,PIN_V23,5,B5_N1,LVDS,
HSMC_D[3],Bidir,PIN_AF27,5,B5_N2,2.5 V,
HSMC_D[2],Bidir,PIN_AE27,5,B5_N2,2.5 V,
HSMC_D[1],Bidir,PIN_AE28,5,B5_N2,2.5 V,
HSMC_D[0],Bidir,PIN_AE26,5,B5_N2,2.5 V,
HSMC_RX_D_P[16],Input,PIN_T21,5,B5_N0,LVDS,
HSMC_RX_D_P[15],Input,PIN_R22,5,B5_N0,LVDS,
HSMC_RX_D_P[14],Input,PIN_P21,5,B5_N0,LVDS,
HSMC_RX_D_P[13],Input,PIN_P25,6,B6_N2,LVDS,
HSMC_RX_D_P[12],Input,PIN_N25,6,B6_N2,LVDS,
HSMC_RX_D_P[11],Input,PIN_L21,6,B6_N0,LVDS,
HSMC_RX_D_P[10],Input,PIN_U25,5,B5_N0,LVDS,
HSMC_RX_D_P[9],Input,PIN_T25,5,B5_N0,LVDS,
HSMC_RX_D_P[8],Input,PIN_R25,5,B5_N0,LVDS,
HSMC_RX_D_P[7],Input,PIN_M25,6,B6_N2,LVDS,
HSMC_RX_D_P[6],Input,PIN_L23,6,B6_N1,LVDS,
HSMC_RX_D_P[5],Input,PIN_K25,6,B6_N1,LVDS,
HSMC_RX_D_P[4],Input,PIN_H25,6,B6_N1,LVDS,
HSMC_RX_D_P[3],Input,PIN_G25,6,B6_N0,LVDS,
HSMC_RX_D_P[2],Input,PIN_F26,6,B6_N1,LVDS,
HSMC_RX_D_P[1],Input,PIN_D26,6,B6_N0,LVDS,
HSMC_RX_D_P[0],Input,PIN_F24,6,B6_N0,LVDS,
HSMC_TX_D_P[16],Output,PIN_U22,5,B5_N0,LVDS,
HSMC_TX_D_P[15],Output,PIN_V27,5,B5_N1,LVDS,
HSMC_TX_D_P[14],Output,PIN_U27,5,B5_N0,LVDS,
HSMC_TX_D_P[13],Output,PIN_R27,5,B5_N0,LVDS,
HSMC_TX_D_P[12],Output,PIN_V25,5,B5_N1,LVDS,
HSMC_TX_D_P[11],Output,PIN_L27,6,B6_N2,LVDS,
HSMC_TX_D_P[10],Output,PIN_J25,6,B6_N1,LVDS,
HSMC_TX_D_P[9],Output,PIN_P27,6,B6_N2,LVDS,
HSMC_TX_D_P[8],Output,PIN_J23,6,B6_N0,LVDS,
HSMC_TX_D_P[7],Output,PIN_H23,6,B6_N0,LVDS,
HSMC_TX_D_P[6],Output,PIN_K21,6,B6_N0,LVDS,
HSMC_TX_D_P[5],Output,PIN_M27,6,B6_N2,LVDS,
HSMC_TX_D_P[4],Output,PIN_K27,6,B6_N1,LVDS,
HSMC_TX_D_P[3],Output,PIN_G27,6,B6_N1,LVDS,
HSMC_TX_D_P[2],Output,PIN_F27,6,B6_N1,LVDS,
HSMC_TX_D_P[1],Output,PIN_E27,6,B6_N1,LVDS,
HSMC_TX_D_P[0],Output,PIN_D27,6,B6_N0,LVDS,
I2C_SCLK,Output,PIN_B7,8,B8_N1,3.3-V LVTTL,
I2C_SDAT,Bidir,PIN_A8,8,B8_N1,3.3-V LVTTL,
IRDA_RXD,Input,PIN_Y15,3,B3_N0,3.3-V LVTTL,
KEY[3],Input,PIN_R24,5,B5_N0,2.5 V,
KEY[2],Input,PIN_N21,6,B6_N2,2.5 V,
KEY[1],Input,PIN_M21,6,B6_N1,2.5 V,
KEY[0],Input,PIN_M23,6,B6_N2,2.5 V,
LCD_BLON,Output,PIN_L6,1,B1_N2,3.3-V LVTTL,
LCD_DATA[7],Bidir,PIN_M5,1,B1_N2,3.3-V LVTTL,
LCD_DATA[6],Bidir,PIN_M3,1,B1_N1,3.3-V LVTTL,
LCD_DATA[5],Bidir,PIN_K2,1,B1_N1,3.3-V LVTTL,
LCD_DATA[4],Bidir,PIN_K1,1,B1_N1,3.3-V LVTTL,
LCD_DATA[3],Bidir,PIN_K7,1,B1_N1,3.3-V LVTTL,
LCD_DATA[2],Bidir,PIN_L2,1,B1_N2,3.3-V LVTTL,
LCD_DATA[1],Bidir,PIN_L1,1,B1_N2,3.3-V LVTTL,
LCD_DATA[0],Bidir,PIN_L3,1,B1_N1,3.3-V LVTTL,
LCD_EN,Output,PIN_L4,1,B1_N1,3.3-V LVTTL,
LCD_ON,Output,PIN_L5,1,B1_N1,3.3-V LVTTL,
LCD_RS,Output,PIN_M2,1,B1_N2,3.3-V LVTTL,
LCD_RW,Output,PIN_M1,1,B1_N2,3.3-V LVTTL,
LEDG[8],Output,PIN_F17,7,B7_N2,2.5 V,
LEDG[7],Output,PIN_G21,7,B7_N1,2.5 V,
LEDG[6],Output,PIN_G22,7,B7_N2,2.5 V,
LEDG[5],Output,PIN_G20,7,B7_N1,2.5 V,
LEDG[4],Output,PIN_H21,7,B7_N2,2.5 V,
LEDG[3],Output,PIN_E24,7,B7_N1,2.5 V,
LEDG[2],Output,PIN_E25,7,B7_N1,2.5 V,
LEDG[1],Output,PIN_E22,7,B7_N0,2.5 V,
LEDG[0],Output,PIN_E21,7,B7_N0,2.5 V,
LEDR[17],Output,PIN_H15,7,B7_N2,2.5 V,
LEDR[16],Output,PIN_G16,7,B7_N2,2.5 V,
LEDR[15],Output,PIN_G15,7,B7_N2,2.5 V,
LEDR[14],Output,PIN_F15,7,B7_N2,2.5 V,
LEDR[13],Output,PIN_H17,7,B7_N2,2.5 V,
LEDR[12],Output,PIN_J16,7,B7_N2,2.5 V,
LEDR[11],Output,PIN_H16,7,B7_N2,2.5 V,
LEDR[10],Output,PIN_J15,7,B7_N2,2.5 V,
LEDR[9],Output,PIN_G17,7,B7_N1,2.5 V,
LEDR[8],Output,PIN_J17,7,B7_N2,2.5 V,
LEDR[7],Output,PIN_H19,7,B7_N2,2.5 V,
LEDR[6],Output,PIN_J19,7,B7_N2,2.5 V,
LEDR[5],Output,PIN_E18,7,B7_N1,2.5 V,
LEDR[4],Output,PIN_F18,7,B7_N1,2.5 V,
LEDR[3],Output,PIN_F21,7,B7_N0,2.5 V,
LEDR[2],Output,PIN_E19,7,B7_N0,2.5 V,
LEDR[1],Output,PIN_F19,7,B7_N0,2.5 V,
LEDR[0],Output,PIN_G19,7,B7_N2,2.5 V,
OTG_ADDR[1],Output,PIN_C3,8,B8_N2,3.3-V LVTTL,
OTG_ADDR[0],Output,PIN_H7,1,B1_N0,3.3-V LVTTL,
OTG_CS_N,Output,PIN_A3,8,B8_N2,3.3-V LVTTL,
OTG_DACK_N[1],Output,PIN_D4,8,B8_N2,3.3-V LVTTL,
OTG_DACK_N[0],Output,PIN_C4,8,B8_N2,3.3-V LVTTL,
OTG_DATA[15],Bidir,PIN_G4,1,B1_N0,3.3-V LVTTL,
OTG_DATA[14],Bidir,PIN_F3,1,B1_N0,3.3-V LVTTL,
OTG_DATA[13],Bidir,PIN_F1,1,B1_N1,3.3-V LVTTL,
OTG_DATA[12],Bidir,PIN_G3,1,B1_N0,3.3-V LVTTL,
OTG_DATA[11],Bidir,PIN_G2,1,B1_N1,3.3-V LVTTL,
OTG_DATA[10],Bidir,PIN_G1,1,B1_N1,3.3-V LVTTL,
OTG_DATA[9],Bidir,PIN_H4,1,B1_N0,3.3-V LVTTL,
OTG_DATA[8],Bidir,PIN_H3,1,B1_N0,3.3-V LVTTL,
OTG_DATA[7],Bidir,PIN_H6,1,B1_N0,3.3-V LVTTL,
OTG_DATA[6],Bidir,PIN_J7,1,B1_N1,3.3-V LVTTL,
OTG_DATA[5],Bidir,PIN_J3,1,B1_N1,3.3-V LVTTL,
OTG_DATA[4],Bidir,PIN_J4,1,B1_N1,3.3-V LVTTL,
OTG_DATA[3],Bidir,PIN_K3,1,B1_N1,3.3-V LVTTL,
OTG_DATA[2],Bidir,PIN_J5,1,B1_N1,3.3-V LVTTL,
OTG_DATA[1],Bidir,PIN_K4,1,B1_N1,3.3-V LVTTL,
OTG_DATA[0],Bidir,PIN_J6,1,B1_N1,3.3-V LVTTL,
OTG_DREQ[1],Input,PIN_B4,8,B8_N2,3.3-V LVTTL,
OTG_DREQ[0],Input,PIN_J1,1,B1_N2,3.3-V LVTTL,
OTG_FSPEED,Bidir,PIN_C6,8,B8_N2,3.3-V LVTTL,
OTG_INT[1],Input,PIN_D5,8,B8_N2,3.3-V LVTTL,
OTG_INT[0],Input,PIN_A6,8,B8_N1,3.3-V LVTTL,
OTG_LSPEED,Bidir,PIN_B6,8,B8_N1,3.3-V LVTTL,
OTG_RD_N,Output,PIN_B3,8,B8_N2,3.3-V LVTTL,
OTG_RST_N,Output,PIN_C5,8,B8_N2,3.3-V LVTTL,
OTG_WR_N,Output,PIN_A4,8,B8_N2,3.3-V LVTTL,
PS2_CLK,Bidir,PIN_G6,1,B1_N0,3.3-V LVTTL,
PS2_CLK2,Bidir,PIN_G5,1,B1_N0,3.3-V LVTTL,
PS2_DAT,Bidir,PIN_H5,1,B1_N1,3.3-V LVTTL,
PS2_DAT2,Bidir,PIN_F5,1,B1_N0,3.3-V LVTTL,
SD_CLK,Output,PIN_AE13,3,B3_N0,3.3-V LVTTL,
SD_CMD,Bidir,PIN_AD14,3,B3_N0,3.3-V LVTTL,
SD_DAT[3],Bidir,PIN_AC14,3,B3_N0,3.3-V LVTTL,
SD_DAT[2],Bidir,PIN_AB14,3,B3_N0,3.3-V LVTTL,
SD_DAT[1],Bidir,PIN_AF13,3,B3_N0,3.3-V LVTTL,
SD_DAT[0],Bidir,PIN_AE14,3,B3_N0,3.3-V LVTTL,
SD_WP_N,Input,PIN_AF14,3,B3_N0,3.3-V LVTTL,
SMA_CLKIN,Input,PIN_AH14,3,B3_N0,3.3-V LVTTL,
SMA_CLKOUT,Output,PIN_AE23,4,B4_N0,3.3-V LVTTL,
SRAM_ADDR[19],Output,PIN_T8,2,B2_N1,3.3-V LVTTL,
SRAM_ADDR[18],Output,PIN_AB8,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[17],Output,PIN_AB9,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[16],Output,PIN_AC11,3,B3_N0,3.3-V LVTTL,
SRAM_ADDR[15],Output,PIN_AB11,3,B3_N1,3.3-V LVTTL,
SRAM_ADDR[14],Output,PIN_AA4,2,B2_N1,3.3-V LVTTL,
SRAM_ADDR[13],Output,PIN_AC3,2,B2_N1,3.3-V LVTTL,
SRAM_ADDR[12],Output,PIN_AB4,2,B2_N2,3.3-V LVTTL,
SRAM_ADDR[11],Output,PIN_AD3,2,B2_N1,3.3-V LVTTL,
SRAM_ADDR[10],Output,PIN_AF2,2,B2_N2,3.3-V LVTTL,
SRAM_ADDR[9],Output,PIN_T7,2,B2_N0,3.3-V LVTTL,
SRAM_ADDR[8],Output,PIN_AF5,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[7],Output,PIN_AC5,2,B2_N2,3.3-V LVTTL,
SRAM_ADDR[6],Output,PIN_AB5,2,B2_N2,3.3-V LVTTL,
SRAM_ADDR[5],Output,PIN_AE6,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[4],Output,PIN_AB6,2,B2_N2,3.3-V LVTTL,
SRAM_ADDR[3],Output,PIN_AC7,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[2],Output,PIN_AE7,3,B3_N1,3.3-V LVTTL,
SRAM_ADDR[1],Output,PIN_AD7,3,B3_N2,3.3-V LVTTL,
SRAM_ADDR[0],Output,PIN_AB7,3,B3_N1,3.3-V LVTTL,
SRAM_CE_N,Output,PIN_AF8,3,B3_N1,3.3-V LVTTL,
SRAM_DQ[15],Bidir,PIN_AG3,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[14],Bidir,PIN_AF3,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[13],Bidir,PIN_AE4,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[12],Bidir,PIN_AE3,2,B2_N2,3.3-V LVTTL,
SRAM_DQ[11],Bidir,PIN_AE1,2,B2_N1,3.3-V LVTTL,
SRAM_DQ[10],Bidir,PIN_AE2,2,B2_N1,3.3-V LVTTL,
SRAM_DQ[9],Bidir,PIN_AD2,2,B2_N1,3.3-V LVTTL,
SRAM_DQ[8],Bidir,PIN_AD1,2,B2_N1,3.3-V LVTTL,
SRAM_DQ[7],Bidir,PIN_AF7,3,B3_N1,3.3-V LVTTL,
SRAM_DQ[6],Bidir,PIN_AH6,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[5],Bidir,PIN_AG6,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[4],Bidir,PIN_AF6,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[3],Bidir,PIN_AH4,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[2],Bidir,PIN_AG4,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[1],Bidir,PIN_AF4,3,B3_N2,3.3-V LVTTL,
SRAM_DQ[0],Bidir,PIN_AH3,3,B3_N2,3.3-V LVTTL,
SRAM_LB_N,Output,PIN_AD4,3,B3_N2,3.3-V LVTTL,
SRAM_OE_N,Output,PIN_AD5,3,B3_N2,3.3-V LVTTL,
SRAM_UB_N,Output,PIN_AC4,2,B2_N2,3.3-V LVTTL,
SRAM_WE_N,Output,PIN_AE8,3,B3_N1,3.3-V LVTTL,
SW[17],Input,PIN_Y23,5,B5_N2,2.5 V,
SW[16],Input,PIN_Y24,5,B5_N2,2.5 V,
SW[15],Input,PIN_AA22,5,B5_N2,2.5 V,
SW[14],Input,PIN_AA23,5,B5_N2,2.5 V,
SW[13],Input,PIN_AA24,5,B5_N2,2.5 V,
SW[12],Input,PIN_AB23,5,B5_N2,2.5 V,
SW[11],Input,PIN_AB24,5,B5_N2,2.5 V,
SW[10],Input,PIN_AC24,5,B5_N2,2.5 V,
SW[9],Input,PIN_AB25,5,B5_N1,2.5 V,
SW[8],Input,PIN_AC25,5,B5_N2,2.5 V,
SW[7],Input,PIN_AB26,5,B5_N1,2.5 V,
SW[6],Input,PIN_AD26,5,B5_N2,2.5 V,
SW[5],Input,PIN_AC26,5,B5_N2,2.5 V,
SW[4],Input,PIN_AB27,5,B5_N1,2.5 V,
SW[3],Input,PIN_AD27,5,B5_N2,2.5 V,
SW[2],Input,PIN_AC27,5,B5_N2,2.5 V,
SW[1],Input,PIN_AC28,5,B5_N2,2.5 V,
SW[0],Input,PIN_AB28,5,B5_N1,2.5 V,
TD_CLK27,Input,PIN_B14,8,B8_N0,3.3-V LVTTL,
TD_DATA[7],Input,PIN_F7,8,B8_N2,3.3-V LVTTL,
TD_DATA[6],Input,PIN_E7,8,B8_N2,3.3-V LVTTL,
TD_DATA[5],Input,PIN_D6,8,B8_N2,3.3-V LVTTL,
TD_DATA[4],Input,PIN_D7,8,B8_N2,3.3-V LVTTL,
TD_DATA[3],Input,PIN_C7,8,B8_N2,3.3-V LVTTL,
TD_DATA[2],Input,PIN_D8,8,B8_N2,3.3-V LVTTL,
TD_DATA[1],Input,PIN_A7,8,B8_N1,3.3-V LVTTL,
TD_DATA[0],Input,PIN_E8,8,B8_N2,3.3-V LVTTL,
TD_HS,Input,PIN_E5,8,B8_N2,3.3-V LVTTL,
TD_RESET_N,Output,PIN_G7,8,B8_N2,3.3-V LVTTL,
TD_VS,Input,PIN_E4,8,B8_N2,3.3-V LVTTL,
UART_CTS,Output,PIN_G14,8,B8_N0,3.3-V LVTTL,
UART_RTS,Input,PIN_J13,8,B8_N0,3.3-V LVTTL,
UART_RXD,Input,PIN_G12,8,B8_N1,3.3-V LVTTL,
UART_TXD,Output,PIN_G9,8,B8_N2,3.3-V LVTTL,
VGA_B[7],Output,PIN_D12,8,B8_N0,3.3-V LVTTL,
VGA_B[6],Output,PIN_D11,8,B8_N1,3.3-V LVTTL,
VGA_B[5],Output,PIN_C12,8,B8_N0,3.3-V LVTTL,
VGA_B[4],Output,PIN_A11,8,B8_N0,3.3-V LVTTL,
VGA_B[3],Output,PIN_B11,8,B8_N0,3.3-V LVTTL,
VGA_B[2],Output,PIN_C11,8,B8_N1,3.3-V LVTTL,
VGA_B[1],Output,PIN_A10,8,B8_N0,3.3-V LVTTL,
VGA_B[0],Output,PIN_B10,8,B8_N0,3.3-V LVTTL,
VGA_BLANK_N,Output,PIN_F11,8,B8_N1,3.3-V LVTTL,
VGA_CLK,Output,PIN_A12,8,B8_N0,3.3-V LVTTL,
VGA_G[7],Output,PIN_C9,8,B8_N1,3.3-V LVTTL,
VGA_G[6],Output,PIN_F10,8,B8_N1,3.3-V LVTTL,
VGA_G[5],Output,PIN_B8,8,B8_N1,3.3-V LVTTL,
VGA_G[4],Output,PIN_C8,8,B8_N1,3.3-V LVTTL,
VGA_G[3],Output,PIN_H12,8,B8_N1,3.3-V LVTTL,
VGA_G[2],Output,PIN_F8,8,B8_N2,3.3-V LVTTL,
VGA_G[1],Output,PIN_G11,8,B8_N1,3.3-V LVTTL,
VGA_G[0],Output,PIN_G8,8,B8_N2,3.3-V LVTTL,
VGA_HS,Output,PIN_G13,8,B8_N0,3.3-V LVTTL,
VGA_R[7],Output,PIN_H10,8,B8_N1,3.3-V LVTTL,
VGA_R[6],Output,PIN_H8,8,B8_N2,3.3-V LVTTL,
VGA_R[5],Output,PIN_J12,8,B8_N0,3.3-V LVTTL,
VGA_R[4],Output,PIN_G10,8,B8_N1,3.3-V LVTTL,
VGA_R[3],Output,PIN_F12,8,B8_N1,3.3-V LVTTL,
VGA_R[2],Output,PIN_D10,8,B8_N1,3.3-V LVTTL,
VGA_R[1],Output,PIN_E11,8,B8_N1,3.3-V LVTTL,
VGA_R[0],Output,PIN_E12,8,B8_N1,3.3-V LVTTL,
VGA_SYNC_N,Output,PIN_C10,8,B8_N0,3.3-V LVTTL,
VGA_VS,Output,PIN_C13,8,B8_N0,3.3-V LVTTL,
HSMC_CLKIN_N1,Unknown,PIN_J28,6,B6_N2,LVDS,
HSMC_CLKIN_N2,Unknown,PIN_Y28,5,B5_N0,LVDS,
HSMC_TX_D_N[0],Unknown,PIN_D28,6,B6_N0,LVDS,
HSMC_RX_D_N[0],Unknown,PIN_F25,6,B6_N0,LVDS,
HSMC_RX_D_N[1],Unknown,PIN_C27,6,B6_N0,LVDS,
HSMC_TX_D_N[1],Unknown,PIN_E28,6,B6_N1,LVDS,
HSMC_TX_D_N[2],Unknown,PIN_F28,6,B6_N1,LVDS,
HSMC_RX_D_N[2],Unknown,PIN_E26,6,B6_N1,LVDS,
HSMC_TX_D_N[3],Unknown,PIN_G28,6,B6_N1,LVDS,
HSMC_RX_D_N[3],Unknown,PIN_G26,6,B6_N0,LVDS,
HSMC_TX_D_N[4],Unknown,PIN_K28,6,B6_N1,LVDS,
HSMC_RX_D_N[4],Unknown,PIN_H26,6,B6_N1,LVDS,
HSMC_TX_D_N[5],Unknown,PIN_M28,6,B6_N2,LVDS,
HSMC_RX_D_N[5],Unknown,PIN_K26,6,B6_N1,LVDS,
HSMC_TX_D_N[6],Unknown,PIN_K22,6,B6_N0,LVDS,
HSMC_RX_D_N[6],Unknown,PIN_L24,6,B6_N2,LVDS,
HSMC_TX_D_N[7],Unknown,PIN_H24,6,B6_N0,LVDS,
HSMC_RX_D_N[7],Unknown,PIN_M26,6,B6_N2,LVDS,
HSMC_TX_D_N[8],Unknown,PIN_J24,6,B6_N0,LVDS,
HSMC_RX_D_N[8],Unknown,PIN_R26,5,B5_N0,LVDS,
HSMC_TX_D_N[9],Unknown,PIN_P28,6,B6_N2,LVDS,
HSMC_RX_D_N[9],Unknown,PIN_T26,5,B5_N0,LVDS,
HSMC_TX_D_N[10],Unknown,PIN_J26,6,B6_N1,LVDS,
HSMC_RX_D_N[10],Unknown,PIN_U26,5,B5_N0,LVDS,
HSMC_TX_D_N[11],Unknown,PIN_L28,6,B6_N2,LVDS,
HSMC_RX_D_N[11],Unknown,PIN_L22,6,B6_N0,LVDS,
HSMC_TX_D_N[12],Unknown,PIN_V26,5,B5_N1,LVDS,
HSMC_RX_D_N[12],Unknown,PIN_N26,6,B6_N2,LVDS,
HSMC_TX_D_N[13],Unknown,PIN_R28,5,B5_N0,LVDS,
HSMC_RX_D_N[13],Unknown,PIN_P26,6,B6_N2,LVDS,
HSMC_TX_D_N[14],Unknown,PIN_U28,5,B5_N0,LVDS,
HSMC_RX_D_N[14],Unknown,PIN_R21,5,B5_N0,LVDS,
HSMC_TX_D_N[15],Unknown,PIN_V28,5,B5_N1,LVDS,
HSMC_RX_D_N[15],Unknown,PIN_R23,5,B5_N0,LVDS,
HSMC_TX_D_N[16],Unknown,PIN_V22,5,B5_N1,LVDS,
HSMC_RX_D_N[16],Unknown,PIN_T22,5,B5_N0,LVDS,
HSMC_CLKOUT_N2,Unknown,PIN_V24,5,B5_N1,LVDS,
HSMC_CLKOUT_N1,Unknown,PIN_G24,6,B6_N0,LVDS,
,Unknown,PIN_J9,,,,
,Unknown,PIN_H9,,,,
,Unknown,PIN_J8,,,,
,Unknown,PIN_F4,1,B1_N0,,
,Unknown,PIN_E2,1,B1_N0,,
,Unknown,PIN_M6,1,B1_N1,,
,Unknown,PIN_P3,1,B1_N2,,
,Unknown,PIN_N7,1,B1_N2,,
,Unknown,PIN_P4,1,B1_N2,,
,Unknown,PIN_P7,,,,
,Unknown,PIN_P5,,,,
,Unknown,PIN_P8,1,B1_N2,,
,Unknown,PIN_P6,1,B1_N2,,
,Unknown,PIN_R8,1,B1_N2,,
,Unknown,PIN_Y8,,,,
,Unknown,PIN_AA9,,,,
,Unknown,PIN_Y9,,,,
,Unknown,PIN_Y20,,,,
,Unknown,PIN_AA20,,,,
,Unknown,PIN_Y21,,,,
,Unknown,PIN_P24,,,,
,Unknown,PIN_N22,,,,
,Unknown,PIN_P23,,,,
,Unknown,PIN_M22,,,,
,Unknown,PIN_P22,,,,
,Unknown,PIN_J21,,,,
,Unknown,PIN_H20,,,,
,Unknown,PIN_J20,,,,
,Unknown,PIN_K9,,,,
,Unknown,PIN_K11,,,,
,Unknown,PIN_K13,,,,
,Unknown,PIN_K15,,,,
,Unknown,PIN_K17,,,,
,Unknown,PIN_K19,,,,
,Unknown,PIN_L10,,,,
,Unknown,PIN_L12,,,,
,Unknown,PIN_L14,,,,
,Unknown,PIN_L16,,,,
,Unknown,PIN_L18,,,,
,Unknown,PIN_L20,,,,
,Unknown,PIN_M9,,,,
,Unknown,PIN_M11,,,,
,Unknown,PIN_M13,,,,
,Unknown,PIN_M15,,,,
,Unknown,PIN_M17,,,,
,Unknown,PIN_M19,,,,
,Unknown,PIN_N10,,,,
,Unknown,PIN_N12,,,,
,Unknown,PIN_N14,,,,
,Unknown,PIN_N16,,,,
,Unknown,PIN_N18,,,,
,Unknown,PIN_N20,,,,
,Unknown,PIN_P9,,,,
,Unknown,PIN_P11,,,,
,Unknown,PIN_P13,,,,
,Unknown,PIN_P15,,,,
,Unknown,PIN_P17,,,,
,Unknown,PIN_P19,,,,
,Unknown,PIN_R10,,,,
,Unknown,PIN_R12,,,,
,Unknown,PIN_R14,,,,
,Unknown,PIN_R16,,,,
,Unknown,PIN_R18,,,,
,Unknown,PIN_R20,,,,
,Unknown,PIN_T9,,,,
,Unknown,PIN_T11,,,,
,Unknown,PIN_T13,,,,
,Unknown,PIN_T15,,,,
,Unknown,PIN_T17,,,,
,Unknown,PIN_T19,,,,
,Unknown,PIN_U10,,,,
,Unknown,PIN_U12,,,,
,Unknown,PIN_U14,,,,
,Unknown,PIN_U16,,,,
,Unknown,PIN_U18,,,,
,Unknown,PIN_U20,,,,
,Unknown,PIN_V9,,,,
,Unknown,PIN_V11,,,,
,Unknown,PIN_V13,,,,
,Unknown,PIN_V15,,,,
,Unknown,PIN_V17,,,,
,Unknown,PIN_V19,,,,
,Unknown,PIN_W10,,,,
,Unknown,PIN_W12,,,,
,Unknown,PIN_W14,,,,
,Unknown,PIN_W16,,,,
,Unknown,PIN_W18,,,,
,Unknown,PIN_W20,,,,
,Unknown,PIN_B1,,,,
,Unknown,PIN_H1,1,,,
,Unknown,PIN_K5,,,,
,Unknown,PIN_N1,1,,,
,Unknown,PIN_N5,,,,
,Unknown,PIN_AA1,2,,,
,Unknown,PIN_AG1,2,,,
,Unknown,PIN_T1,2,,,
,Unknown,PIN_T5,2,,,
,Unknown,PIN_W5,2,,,
,Unknown,PIN_AA11,3,,,
,Unknown,PIN_AD6,3,,,
,Unknown,PIN_AD9,3,,,
,Unknown,PIN_AD13,3,,,
,Unknown,PIN_AH2,3,,,
,Unknown,PIN_AH5,3,,,
,Unknown,PIN_AH9,3,,,
,Unknown,PIN_AH13,3,,,
,Unknown,PIN_AA18,4,,,
,Unknown,PIN_AD16,4,,,
,Unknown,PIN_AD20,4,,,
,Unknown,PIN_AD23,4,,,
,Unknown,PIN_AH16,4,,,
,Unknown,PIN_AH20,4,,,
,Unknown,PIN_AH24,4,,,
,Unknown,PIN_AH27,4,,,
,Unknown,PIN_AA28,5,,,
,Unknown,PIN_AG28,5,,,
,Unknown,PIN_T24,5,,,
,Unknown,PIN_T28,5,,,
,Unknown,PIN_W24,5,,,
,Unknown,PIN_B28,6,,,
,Unknown,PIN_H28,6,,,
,Unknown,PIN_K24,6,,,
,Unknown,PIN_N24,6,,,
,Unknown,PIN_N28,,,,
,Unknown,PIN_A16,7,,,
,Unknown,PIN_A20,7,,,
,Unknown,PIN_A24,,,,
,Unknown,PIN_A27,7,,,
,Unknown,PIN_E16,7,,,
,Unknown,PIN_E20,7,,,
,Unknown,PIN_E23,7,,,
,Unknown,PIN_H18,7,,,
,Unknown,PIN_A2,8,,,
,Unknown,PIN_A5,8,,,
,Unknown,PIN_A9,8,,,
,Unknown,PIN_A13,8,,,
,Unknown,PIN_E6,8,,,
,Unknown,PIN_E9,8,,,
,Unknown,PIN_E13,8,,,
,Unknown,PIN_H11,8,,,
,Unknown,PIN_K10,,,,
,Unknown,PIN_K12,,,,
,Unknown,PIN_K14,,,,
,Unknown,PIN_K16,,,,
,Unknown,PIN_K18,,,,
,Unknown,PIN_K20,,,,
,Unknown,PIN_L9,,,,
,Unknown,PIN_L11,,,,
,Unknown,PIN_L13,,,,
,Unknown,PIN_L15,,,,
,Unknown,PIN_L17,,,,
,Unknown,PIN_L19,,,,
,Unknown,PIN_M10,,,,
,Unknown,PIN_M12,,,,
,Unknown,PIN_M14,,,,
,Unknown,PIN_M16,,,,
,Unknown,PIN_M18,,,,
,Unknown,PIN_M20,,,,
,Unknown,PIN_N9,,,,
,Unknown,PIN_N11,,,,
,Unknown,PIN_N13,,,,
,Unknown,PIN_N15,,,,
,Unknown,PIN_N17,,,,
,Unknown,PIN_N19,,,,
,Unknown,PIN_P10,,,,
,Unknown,PIN_P12,,,,
,Unknown,PIN_P14,,,,
,Unknown,PIN_P16,,,,
,Unknown,PIN_P18,,,,
,Unknown,PIN_P20,,,,
,Unknown,PIN_R9,,,,
,Unknown,PIN_R11,,,,
,Unknown,PIN_R13,,,,
,Unknown,PIN_R15,,,,
,Unknown,PIN_R17,,,,
,Unknown,PIN_R19,,,,
,Unknown,PIN_T10,,,,
,Unknown,PIN_T12,,,,
,Unknown,PIN_T14,,,,
,Unknown,PIN_T16,,,,
,Unknown,PIN_T18,,,,
,Unknown,PIN_T20,,,,
,Unknown,PIN_U9,,,,
,Unknown,PIN_U11,,,,
,Unknown,PIN_U13,,,,
,Unknown,PIN_U15,,,,
,Unknown,PIN_U17,,,,
,Unknown,PIN_U19,,,,
,Unknown,PIN_V10,,,,
,Unknown,PIN_V12,,,,
,Unknown,PIN_V14,,,,
,Unknown,PIN_V16,,,,
,Unknown,PIN_V18,,,,
,Unknown,PIN_V20,,,,
,Unknown,PIN_W9,,,,
,Unknown,PIN_W11,,,,
,Unknown,PIN_W13,,,,
,Unknown,PIN_W15,,,,
,Unknown,PIN_W17,,,,
,Unknown,PIN_W19,,,,
,Unknown,PIN_AA2,,,,
,Unknown,PIN_AA27,,,,
,Unknown,PIN_AC6,,,,
,Unknown,PIN_AC9,,,,
,Unknown,PIN_AC13,,,,
,Unknown,PIN_AC16,,,,
,Unknown,PIN_AC20,,,,
,Unknown,PIN_AC23,,,,
,Unknown,PIN_AF1,,,,
,Unknown,PIN_AF28,,,,
,Unknown,PIN_AG2,,,,
,Unknown,PIN_AG5,,,,
,Unknown,PIN_AG9,,,,
,Unknown,PIN_AG13,,,,
,Unknown,PIN_AG16,,,,
,Unknown,PIN_AG20,,,,
,Unknown,PIN_AG24,,,,
,Unknown,PIN_AG27,,,,
,Unknown,PIN_B2,,,,
,Unknown,PIN_B5,,,,
,Unknown,PIN_B9,,,,
,Unknown,PIN_B13,,,,
,Unknown,PIN_B16,,,,
,Unknown,PIN_B20,,,,
,Unknown,PIN_B24,,,,
,Unknown,PIN_B27,,,,
,Unknown,PIN_C1,,,,
,Unknown,PIN_C28,,,,
,Unknown,PIN_F6,,,,
,Unknown,PIN_F9,,,,
,Unknown,PIN_F13,,,,
,Unknown,PIN_F16,,,,
,Unknown,PIN_F20,,,,
,Unknown,PIN_F23,,,,
,Unknown,PIN_H2,,,,
,Unknown,PIN_H27,,,,
,Unknown,PIN_J11,,,,
,Unknown,PIN_J18,,,,
,Unknown,PIN_K6,,,,
,Unknown,PIN_K23,,,,
,Unknown,PIN_N2,,,,
,Unknown,PIN_N6,,,,
,Unknown,PIN_N23,,,,
,Unknown,PIN_N27,,,,
,Unknown,PIN_T2,,,,
,Unknown,PIN_T6,,,,
,Unknown,PIN_T23,,,,
,Unknown,PIN_T27,,,,
,Unknown,PIN_W6,,,,
,Unknown,PIN_W23,,,,
,Unknown,PIN_Y11,,,,
,Unknown,PIN_Y18,,,,
,Unknown,PIN_J2,,,,
,Unknown,PIN_D3,,,,
,Unknown,PIN_B12,,,,
- SEG7的译码不是在硬件部分完成的,不用管。
- 注意Top-Level Entity的名称,可在Assignment-Settings…中查看。一般来说,习惯将module名称、Verilog文件名称、Top-Level Entity名称保持一致,以避免不必要的麻烦。
- 在硬件中,多添加了一个管脚LCD_BLON(LCD背光),并作出如下设置。这是参考项目中给出的。我并没有试过不加这个端口会如何。官方关于DE2-115中的文档中确实提到LCD_BLON是不支持的。
output LCD_BLON;
...
assign LCD_BLON = 1'b0; //not supported
- 顶层模块中关于SEG7的接口接法如下。注意接的HEX序号和顺序。HEX7~HEX0对应电路板上从左到右的数码管。SEG7_RIGHT_BASE就是最右侧管(HEX0)的LSB;SEG7_LEFT_BASE就是左数第四管(HEX4)的LSB。这一点如果不理解也没关系,等到上板调试发现顺序有问题之后再来改也没问题的。
.seg7_left_external_connection_export
({HEX7[6:0],HEX6[6:0],HEX5[6:0],HEX4[6:0]}),
// seg7_left_external_connection.export
.seg7_right_external_connection_export
({HEX3[6:0],HEX2[6:0],HEX1[6:0],HEX0[6:0]})
// seg7_right_external_connection.export
3.4. 编译和烧录
3.4.1. 编译
点击左侧Task-Compile Design
可以整个编译。时间较长,需要3~5分钟。
如果报出错误,务必查看提示,基本都能解决。
3.4.2. 在线烧录
点击左侧Task-Program Device
,打开烧录界面。如果显示No Hardware
,点击Hardware Setup…
,选择USB-Blaster
。
3.4.3. 烧录ROM
以上的烧录方式,一旦板子断电重启之后,逻辑就没了,必须重新下载。这种方式可以将逻辑烧入ROM中,重启后自动调用。
(待补充)
4. Eclipse C语言程序设计
4.1. 打开Eclipse
在Quartus主界面,点击Tools-Nios II Software Build Tools for Eclipse
。主界面如下图所示:
左侧Project是打开的路径,是一整个目录。如果项目不在目录中,点击File-Switch Workspace…
,选择需要的目录,等待软件重启。一般选择的是硬件所在的目录(即Quartus项目目录)。
4.2. 新建项目
点击File-New-Nios II Application and BSP from Template
。
SOPC Information File name
,找到对应的硬件文件,后缀为 .sopcinfo。
Project Template
是C语言的模板,不重要,选择Hello World即可。
然后点击Next
:
默认是第一个选项,一般不改。这个选项的意思是:根据硬件文件(.sopcinfo)生成对应的BSP(Borad Support Package,板级支持包)文件,可以理解为是软硬件的交接。
点击Finish
,完成建立。
4.3. 路径说明
一个项目其实同时由两个文件夹组成:prj_xxx
和prj_xxx_bsp
,前者都是C语言的执行程序;后者一般无需修改,是自动生成的硬件向软件过渡的支持文件。
4.3.1. prj文件夹
即项目文件夹。对于简单的项目,一般就把所有C代码写到同一个程序中就可以了(也就是之前创建的hello world.c
,可以自己更名)。这样的话,项目文件夹是不需要增删文件的。
在下图中,主程序是main.c
。
4.3.2. bsp文件夹
即支持包文件夹。
当不知道程序怎么写的时候,或者不知道软件有哪些已定义的函数的话,可以在bsp里面找一找。
需要注意的是,在bsp文件夹中的文件,在主程序中引用时不用写复杂的路径,直接写inlcude就好了。对于inc和src中的文件,不需要include。当然,最好是写的时候一步步检查,如果函数没有定义,检查器会报错。
-
inc
在bsp-drivers-inc中,是系统提供的头文件(.h),一般与Platform Designer中添加了哪些IP有关。比如下图中,“xxx_jtag_uart_xxx” 对应JTAG_UART;“xxx_lcd_16207_xxx” 对应LCD_16207;“xxx_pio_xxx” 对应PIO;“xxx_sysid_qsys_xxx” 对应System ID。
-
src
在bsp-drivers-src中,是系统提供的库文件(.c),一般与Platform Designer中添加了哪些IP有关。.c文件一般是定义了与硬件匹配的一些函数。
-
system.h
该文件比较重要,主要是因为其中定义了各种硬件的基地址(XXX_BASE),不知道基地址是没法调用对应器件的。
4.4. 编写程序
不能给出完整的主程序内容,但是可以给出设计的函数,其正确性都已得到实验验证。其中LCD函数来源于Terasic。
点击查看代码
#define DIG0 0b1000000
#define DIG1 0b111_1001
#define DIG2 0b010_0100
#define DIG3 0b011_0000
#define DIG4 0b001_1001
#define DIG5 0b001_0010
#define DIG6 0b000_0010
#define DIG7 0b111_1000
#define DIG8 0b000_0000
#define DIG9 0b001_0000
#define DIGA 0b000_1000
#define DIGB 0b000_0011
#define DIGC 0b100_0110
#define DIGD 0b010_0001
#define DIGE 0b000_0110
#define DIGF 0b000_1110
#define DIG_NULL 0b111_1111
// (\b): Move the cursor to the left by one character
// (\r): Move the cursor to the start of the current line
// (\n): Move the cursor to the start of the line and move it donw one line
static FILE *fp=0;
bool LCD_Open(void){
fp = fopen(LCD_NAME, "w");
if (fp){
printf("Success Open\n");
return TRUE;
}
else{
perror("Error: Open\n");
return FALSE;
}
}
bool LCD_TextOut(char *pText){
if (!fp)
return FALSE;
fwrite(pText, strlen(pText), 1, fp);
return TRUE;
}
bool LCD_Clear(void){
char szText[32]="\n\n";
if (!fp)
return FALSE;
fwrite(szText, strlen(szText), 1, fp);
return TRUE;
}
void LCD_Close(void){
if (fp)
fclose(fp);
fp = 0;
}
// From left to right, number is 7,6,...,0
void SEG7_Disp(unsigned int dig_long){
unsigned int dig_28b_r = 0xFFFFFFF;
unsigned int dig_28b_l = 0xFFFFFFF;
unsigned int dig_dec[8];
unsigned int DIG[17] = {
0b1000000,
0b1111001,
0b0100100,
0b0110000,
0b0011001,
0b0010010,
0b0000010,
0b1111000,
0b0000000,
0b0010000,
0b0001000,
0b0000011,
0b1000110,
0b0100001,
0b0000110,
0b0001110,
0b1111111 //NULL
};
unsigned int SEG7_BASE[8];
int i;
for(i=0;i<4;i++){
dig_dec[i] = dig_long % 10;
dig_long /= 10;
// printf("%d\t",dig_dec[i]);
dig_28b_r = (dig_28b_r & ~(0x000007F << i * 7)) | (DIG[dig_dec[i]] << i * 7);
}
for(i=4;i<8;i++){
dig_dec[i] = dig_long % 10;
dig_long /= 10;
// printf("%d\t",dig_dec[i]);
dig_28b_l = (dig_28b_l & ~(0x000007F << (i-4) * 7)) | (DIG[dig_dec[i]] << (i-4) * 7);
}
IOWR_ALTERA_AVALON_PIO_DATA(SEG7_RIGHT_BASE, dig_28b_r);
IOWR_ALTERA_AVALON_PIO_DATA(SEG7_LEFT_BASE, dig_28b_l);
}
// From left to right, button number is 3,2,1,0.
// If no button is pressed ,the number is -1.
int KEY_Pressed_Number(void){
unsigned int key;
key = IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE);
key = IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE, 0);
if(key & 0x01)
return 0;
else if(key & 0x02)
return 1;
else if(key & 0x04)
return 2;
else if(key & 0x08)
return 3;
else
return -1;
}
4.5. 运行前的设置
4.5.1. 运行设置
选择prj文件夹(注意:一定是文件夹,而不是里面的文件),右键-Run As-Run Configurations…
,进入运行设置。
关键的是Target Connection
一栏。
-
Connections
Connections表示了板子的连线情况。在板子正确连接后,这里应该有 “USB Blaster“ 的提示。有时候连接正确但是没有识别,那就在这个界面点击
Refresh Connections
,然后Apply
。 -
System ID checks
System ID,也就是系统的ID。估计应该是与硬件中的System ID有关,用于检查软硬件是否匹配。
System timestamp,也就是系统时间戳。估计是硬件生成时候自带的时间戳。经过实践证明,很多时候这一项需要Ignore。我们并不在乎软硬件的时间,但是如果不忽略,检查出错了,就不能运行,这是很烦人的。如果在运行程序时出现
System timestamps mismatch
的报错,而确认没有设计问题,就可以考虑开启Ignore。
4.5.2. BSP设置
选择bsp文件夹(注意:一定是文件夹,而不是里面的文件),右键-Nios II-BSP Editor…
,进入运行设置。
-
enable_small_c_library[2]
当运行程序时,出现奇怪的错误,并提示
ld return 1 exit status
时候,有可能就是这个问题。主要原因是on-chip memory设置的小了,所以这也是为什么之前说,设计硬件的时候要把memory尽可能设大一些。勾中此项后,C语言占用空间会缩小,但是一些库函数会被排除在外。根据实验,常用的
printf
、fopen
、fwrite
、fclose
等等函数都不能使用。在这种情况下,基本只能进行逻辑位运算。 -
enable_reduced_device_drivers
勾中此项亦会缓解memory不足的问题。其可能是削减了硬件驱动的数目,不良影响未知。
在设置完成后,点击
Generate BSP
,它完成后不会自动退出,等几秒直接点Exit
。
总之,以上两个选项是在设计不成熟时会遇到的问题。在memory设置足够的情况下,一般不用考虑。
4.6. 运行程序
选择prj文件夹(注意:一定是文件夹,而不是里面的文件),右键-Run As-Nios II Hardware…
,等待完成。注意查看下方的提示。
Console是编译器的提示,如果C语言编译、下载有问题,都会在其中给出信息。
Nios II Console是Nios II的输出面板,比如printf
函数的输出结果就在此展示。
5. 如果设计到一半修改了文件
5.1. 各步骤之间的联系
5.1.1. Platform Designer与Quartus
前者生成的模块硬件逻辑,等于是一个module,可以在Quartus内部被调用。
因此二者的联系只有一个硬件逻辑文件,也就是.qsys文件。
5.1.2. Quartus与Eclipse
前者生成了SoPC系统硬件,并导入到后者,在后者中进行配套的软件设计。
因此二者的联系是在建立Eclipse文件时使用的.sopcinfo文件。
5.2. 修改了Platform Designer
首先先在Platform Designer里面修改后,保存,Generate HDL
。
建议将Quartus内的.qsys文件先移除之后再添加,然后修改Quartus文件,并重新编译。
5.3. 修改了Quartus逻辑
首先在Quartus中重新编译。
然后,只要生成的.sopcinfo文件名未更改,就只需要在Eclipse中重新Generate BSP
。
附录
参考:DE2-115 手册及System CD。
百度网盘分享:
链接:https://pan.baidu.com/s/1AWtET7xPcHk3fpTphurqYQ
提取码:jtom
enable_small_c_library的解释:【原创】解决on_chip_memory过小的问题,解决Unable to reach errno ...的问题 - OneSeven - 博客园 (cnblogs.com) ↩︎