利用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…。主界面如下:

image

左上,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

image

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,与前面匹配。

image

2.2.9. LCD

LCD显示屏。IP为Avalon LCD 16207。

2.2.10. SEG7

共阳接法七段数码管,总共8个。数码管命名应该是左侧为HEX7,右侧更小。单个数码管定义为:

image

其中[0]~[6]对应灯管0~6,DP默认不亮,不可用。

参考文档中是自定义了对应的IP,这里可以用8 × 7 bits Output PIO。Platform Designer对一组PIO的限制是32 bits,因此分成两组,每组即28 bits,分别命名为SEG7_LEFT和SEG7_RIGHT。

2.3. 连接

先放出整个系统的图:

image

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 MemoryException Vector Memory分别改为ROM.s1RAM.s1,然后直接点击Finish

image


设置步骤到此结束,正常来说,此时窗口下方的Message应该是0 Error的。


2.5. 导出HDL

保存文件,点击右下角Generate HDL…,等待完成。

2.6. 导出例化模板

这里使用的是Verilog。

点击Generate-Show Instantiation Template…,出现对应的代码,可以复制。

image

3. Quartus 18.0硬件设计

这种稍微复杂的系统,已经很难用bsf形式设计,采用Verilog设计。

3.1. 添加文件

添加对应的.qsys文件到Project当中,也就是Platform DesignerGenerate 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

image

3.4.3. 烧录ROM

以上的烧录方式,一旦板子断电重启之后,逻辑就没了,必须重新下载。这种方式可以将逻辑烧入ROM中,重启后自动调用。

(待补充)

4. Eclipse C语言程序设计

4.1. 打开Eclipse

在Quartus主界面,点击Tools-Nios II Software Build Tools for Eclipse。主界面如下图所示:

image

左侧Project是打开的路径,是一整个目录。如果项目不在目录中,点击File-Switch Workspace…,选择需要的目录,等待软件重启。一般选择的是硬件所在的目录(即Quartus项目目录)。

4.2. 新建项目

点击File-New-Nios II Application and BSP from Template

image

SOPC Information File name,找到对应的硬件文件,后缀为 .sopcinfo。

Project Template是C语言的模板,不重要,选择Hello World即可。

然后点击Next

image

默认是第一个选项,一般不改。这个选项的意思是:根据硬件文件(.sopcinfo)生成对应的BSP(Borad Support Package,板级支持包)文件,可以理解为是软硬件的交接。

点击Finish,完成建立。

4.3. 路径说明

一个项目其实同时由两个文件夹组成:prj_xxxprj_xxx_bsp,前者都是C语言的执行程序;后者一般无需修改,是自动生成的硬件向软件过渡的支持文件。

4.3.1. prj文件夹

即项目文件夹。对于简单的项目,一般就把所有C代码写到同一个程序中就可以了(也就是之前创建的hello world.c,可以自己更名)。这样的话,项目文件夹是不需要增删文件的。

在下图中,主程序是main.c

image

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。

image

  • src

    在bsp-drivers-src中,是系统提供的库文件(.c),一般与Platform Designer中添加了哪些IP有关。.c文件一般是定义了与硬件匹配的一些函数。

image

  • 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…,进入运行设置。

image

关键的是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…,进入运行设置。

image

  • enable_small_c_library[2]

    当运行程序时,出现奇怪的错误,并提示ld return 1 exit status时候,有可能就是这个问题。主要原因是on-chip memory设置的小了,所以这也是为什么之前说,设计硬件的时候要把memory尽可能设大一些。

    勾中此项后,C语言占用空间会缩小,但是一些库函数会被排除在外。根据实验,常用的printffopenfwritefclose等等函数都不能使用。在这种情况下,基本只能进行逻辑位运算。

  • enable_reduced_device_drivers

    勾中此项亦会缓解memory不足的问题。其可能是削减了硬件驱动的数目,不良影响未知。

    在设置完成后,点击Generate BSP,它完成后不会自动退出,等几秒直接点Exit


总之,以上两个选项是在设计不成熟时会遇到的问题。在memory设置足够的情况下,一般不用考虑。

4.6. 运行程序

选择prj文件夹(注意:一定是文件夹,而不是里面的文件),右键-Run As-Nios II Hardware…,等待完成。注意查看下方的提示。

image

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


  1. 中断的设置:【NiosII学习】第三篇、按键中断_大屁桃的博客-CSDN博客_nios中断 ↩︎

  2. enable_small_c_library的解释:【原创】解决on_chip_memory过小的问题,解决Unable to reach errno ...的问题 - OneSeven - 博客园 (cnblogs.com) ↩︎

posted @ 2023-02-19 16:41  白发戴花君莫笑  阅读(1660)  评论(0编辑  收藏  举报