课程

教学相长

认真教书,认真学习

第一章 概述
第二章 Nios II处理器体系结构
第三章 Avalon接口规范
第四章 SOPC软硬件开发平台
第五章 Nios II处理器常用外设
第六章 μC/OS II操作系统移植
第七章 Nios II系统深入设计
第八章 调试技术

SoPC例子

注:例子保存在sopc-sample目录下

1、工程目录:firstprj 或者 keytobeep

说明:此例子功能是按key1蜂鸣器响,例子是用VHDL语言编写的逻辑,可以在用原理图做同样的例子。

注:在KeytoBeep目录下有singaltap目录,里面有signaltap逻辑分析仪的配置文件,可以查看引出管脚的波形变化。

延伸:

用原理图做的可以生产VHDL文件(源程序在firstprj-sch目录下),在工程中把原来的原理图文件移除,将转换后的VHD文件加入,可以通过修改VHDL文件修改程序逻辑。

对于VHDL文件可以在Quartus软件中的【Tools】菜单下的【Netlist Viewers】下的【RTL viewer】中看到对应的原理图,但只能输入*。jpg等类似格式,但是不能用原理图修改逻辑。

将VHDL生产原理图,用原理图来修改逻辑的方法是,打开VHDL文件,选【File】→【Creat/Update】→【Create Symbol Files for Current File】,然后选【File】→【New】,在【Device Design Files】下选【Block Diagram/Schematic File】
空白处双击,选择刚刚建立的符号名即可,但是此处加入的是一个Symbol,也就是将刚才的VHDL中的逻辑封装成一个组件(Symbol)了,而且以前的VHDL文件不能移除。

2、工程目录:firstprj-twokeys

说明:同时按下key1和key2,蜂鸣器响。

3、工程目录:KeyToLED

说明:按下一个按键,两个对应的LED灯亮,按键和LED灯的对应关系如下:

//key0 control LED0 and LED4
//key1 control LED1 and LED5
//key2 control LED2 and LED6
//key3 control LED3 and LED7
4、工程目录:LED

说明:使用计数器延时来控制发光二极管(LED)流水式点亮。

注:

1)signaltap目录下有逻辑分析仪的配置文件,可以演示,并有抓图。

2)在simulation下的modelsim目录下,有针对此工程的modelsim软件的配置文件,可以演示基于modelsim的仿真。

5、工程目录:LCD1602

说明:使用LCD1602显示“LCD Example in BUU SoPC class”,硬件逻辑描述在RTL目录下,共四个文件,其中LCD_Driver.v中确定显示的文字。

6、工程目录:bin2bcd

使用四个拨码开关控制八个LED,用四个拨码开关来表示二进制码,八个LED表示BCD码。按照二进制转化成BCD码的转换原则,通过拨码开关得到二进制,在led上显示相应的BCD码。

7、工程目录:SegLed_DynamDisp

用四个数码管显示“987654321”并且开窗显示,窗口大小四个字符,窗口移动方向从右向左。

8、工程目录:first_cpu

说明: 讲解如何搭建第一个Nios系统,硬件配置是Nios+JTAG UART+sysid+片内RAM(10240 bytes),软件功能是C程序通过JTAG_UART返回Hello BUU from Nios II!

9、工程目录:Nios_PIO

说明: 搭建一个Nios系统,硬件配置Nios+JTAG UART+sysid+片内RAM(10240 bytes)+PIO(控制LED),将PIO与开发板上的LED灯相接, 软件功能是控制流水灯显示。延伸:可对C程序进行改造,加入j变量,控制显示次数,将以前的while(1)改为while(j!=某个数)来实现,同时在循环体中j++。同时注意在C程序中用到函数【IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);】来对I/O操作,其中LED_BASE是LED灯的地址,此地址在驱动程序中system.h定义,#define LED_BASE 0x9000,而这个地址起始定义是在用Qsys设计Nios时确定的。

 

10、工程目录:Qsys_SDRAM

说明:搭建Nios系统,硬件配置Nios+JTAG UART+sysid+SDRAM Controller+PIO(控制LED),软件功能是控制LED流水灯,此工程与Nios_PIO的区别是使用了片外SDRAM。

11、工程目录:Qsys_TIME

说明:搭建Nios系统,硬件配置Nios+JTAG UART+sysid+片内RAM(10240 bytes)+PIO(控制LED)+Internal Timer,软件功能是利用定时器,控制LED流水灯。

延伸:此例子特别强调中断的使用,在添加timer后,需要给其分配中断号。

 

12、工程目录:Qsys_TIME

说明:搭建Nios系统,硬件配置Nios+JTAG UART+sysid+片内RAM(10240 bytes)+PIO(控制LED)+Internal Timer,软件功能是利用定时器,控制LED流水灯。

延伸:此例子特别强调中断的使用,在添加timer后,需要给其分配中断号。

13、工程目录:Qsys_ucosii

说明:搭建Nios系统,硬件配置Nios+JTAG UART+sysid+SDRAM Controller+PIO(控制LED)+Internal Timer,软件功能是利用μc/os 实时操作系统,创建两个任务,任务1执行时向stdout输出“Hello from task1”,然后延时3秒,任务2执行时向stdout输出“Hello from task2”,然后延时3秒。

14、工程目录:TFT_ColorBar_V2.0

说明:用Quartus编写TFT彩屏程序,此程序驱动TFT彩色显示屏显示彩条。

 

15、工程目录:TFT_PIC_e6

说明:用Quartus编写TFT彩屏程序,利用altsyncram生产片内RAM,此程序驱动TFT彩色显示屏显示RAM中的一幅图片。

16、工程目录:VGA

说明:用Quartus编写程序,此程序驱动VGA显示彩条。

17、工程目录:LED7_IP

说明:此例子首先通过Qsys创建一个组件模板,然后在模板中根据地址控制输出为高或者为低,生产的组件是BUU下的LED1。构建Nios系统,配置为:Nios+JTAG UART+sysid+片内RAM(10240 bytes)+LED1。软件功能是首先熄灭LED灯,延时1秒,然后点亮led灯,然后读LED灯的状态,并向stdout打印led灯状态,然后用另外一个地址熄灭led灯(具体控制在组件vhdl文件中),延时1秒然后点亮len灯,延时1秒,熄灭led灯。

延伸:通过此例子可以详细讲解signaltap的使用,在工程目录下的signaltap目录下有signaltap 逻辑分析器的配置文件。

18、工程目录:ug_custom_instruction\ciug_de_qsys

说明:这是一个Altera网站上的用户指令的例子,网站上提供的是Quartus 15版本做的,需要在Quartus 11中重新建立工程,然后加入相关文件。此例子用用户指令实现CRC(Cyclic Redundancy Check)(循环冗余校验码)。

回顾:

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。

对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。 任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。