基于 nios II的跑马灯设计

合集下载

基于Nios II的LED显示屏控制器设计

基于Nios II的LED显示屏控制器设计

基于Nios II的LED显示屏控制器设计LED显示屏作为最大的广告屏运用解决方案,LED显示屏的设计与生产,让我们更加的关注LED显示屏可用性的过程。

目前的LED显示屏按火枪手据传输的方式分为两类,一是同步实时显示,二是异步通信更新数据。

目前是以同步传输的方式更为常见。

通常,异步通信控制方式只能将屏幕作为一个完整的区域显示,对于较大屏幕的显示系统,有时需要将整屏分为若干个窗口分别显示不同的内容,且内容的更新只是某一个或几个窗口。

针对这种情况,本文提出了一种基于Nios II 32位处理器的设计方案,能有效地实现单屏幕多窗口的任意位置显示,使得显示方式更加灵活方便。

1 系统总体设计1.1 系统硬件结构LED显示系统主要由计算机系统、数据通信传输模块、数据处理模块、扫描控制模块、显示驱动模块和LED屏构成,如图1所示。

计算机系统将要LED显示屏的点阵信息通过RS485串行接口送往存储设备,数据处理模块读取存储设备的数据并进行各种特技显示处理,将处理好的数据送往扫描控制模块,显示驱动模块接收到扫描控制模块的数据后送往LED显示屏上显示。

数据通信传输模块、数据处理模块、扫描控制模块3部分均在FPGA上实现,即构成LED异步控制器。

1.2 系统软件方案软件基于Nios II IDE开发完成,应用程序基于μC/OS-II实时操作系统实现。

软件程序主要由2个任务和1个定时器中断服务程序组成,任务问采用信号量的方式进行通信。

任务1将上位机传送到CF卡存储设备的数据写入内存中;任务2从内存中读取数据并进行分析处理,把分析处理完的数据送往扫描控制模块。

为了充分利用μC/OS-II的实时性和多任务的特点,采用嵌入式文件系统进行数据管理。

2 控制系统硬件部分设计数据处理模块由Nios II软核CPU、1片SDRAM和1片Flash存储器组成。

Nios II软核CPU是整个控制器的核心,负责数据的处理;sDRAM作为CPU处理数据时的缓存使用;Flash存储器用于存储点阵信息数据和LED屏显示控制参数。

NIOS II Step By Step

NIOS II Step By Step

/bbs/showbbs.asp?bd=3&id=80&totable=1NIOS II Step By Step(1)---NIOS II自定义指令可编程软核处理器最大的特点是灵活,灵活到我们可以方便的增加指令,这在其他SOC系统中做不到的,增加用户指令可以把我们系统中用软件处理时耗费时间多的关键算法用硬逻辑电路来实现,大大提高系统的效率,更突出的一点是:我们通过下面的逐步操作会认识到,这是一个听起来高深,其实比较容易实现的功能(我们站在EDA工具这个巨人肩上,风光无限啊:),通过这一文档的介绍可以增强我们掌握NIOS II所有的技术手段的信心,这也是我把NIOS II 用户指令放在最前面的用意。

用户指令就是我们让NIOS II软核完成的一个功能,这个功能由电路模块来实现,这个电路模块是用H DL语言描述的。

它被连接到NIOS II软核的算术逻辑部件上,下面就是示意图:用户指令分多种,有组合逻辑指令、多周期指令、扩展指令等等,学明白一个,也就举一反三了, Alt era提供了用户模块HDL的模板,通过裁减就可以适应多种指令类型了。

下面就是这个模版的Verilog形式,很简单吧,我想看到这里很多人会说:oh,that's easy。

模块里面的内容不要我说了,也说不尽,是你智慧表演的舞台了,八仙过海,各显神通的机会来了:)//Verilog Custom Instruction Templatemodule __module_name(clk, // CPU's master-input clk <required for multi-cycle>reset, // CPU's master asynchronous reset <required for multi-cycle>clk_en, // Clock-qualifier <required for multi-cycle>start, // True when this instr. issues <required for multi-cycle>done, // True when instr. completes <required for variable muli-cycle> dataa, // operand A <always required>datab, // operand B <optional>n, // N-field selector <required for extended>a, // operand A selector <used for Internal register file access>b, // operand b selector <used for Internal register file access>c, // result destination selector <used for Internal register file access> readra, // register file index <used for Internal register file access>readrb, // register file index <used for Internal register file access>writerc,// register file index <used for Internal register file access>result // result <always required>);input clk;input reset;input clk_en;input start;input readra;input readrb;input writerc;input [7:0] n;input [4:0] a;input [4:0] b;input [4:0] c;input [31:0]dataa;input [31:0]datab;output[31:0]result;output done;// Port Declaration// Wire Declaration// Integer Declaration// Concurrent Assignment// Always Constructendmodule下面两张图和表可以帮助我们更深入的理解和总结:万事开头难,那我们就挑个软的捏,来做一条组合逻辑指令吧,下面就是模块示意图:,这个模块只有两个输入,A,B,都是32BIT的,输出也是32BIT的。

基于_nios_II的跑马灯设计

基于_nios_II的跑马灯设计

基于_nios_II的跑马灯设计一、实验要求:采用niosII软件和QuartusII软件设计一个跑马灯,即使LED小灯循环点亮。

二、实验步骤及实验结果:1、建立工程2、点击SOPC builder开始定制niosII模块命名为sk_cpu.Sopc 选择verlog作为目标语言。

图1 sopc builder图2 为niosII模块命名3、添加cpu模块如图1所示。

因系统比较小,选择NiosII/e型可以满足设计要求,并为定制的cpu取一个名字(也可以默认)。

图3 在NiosII中定制CPU模块4、添加位宽8位,的4kbyte的ram模块定制完cpu,在右侧选择memories and memory controller->on-chip->on chip memory(ramor rom)。

在弹出的对话框中选择ram。

其他参数默认即可。

并修改名为ram。

5、在Peripherals中的Microcontroller Peripherals中添加6位的pio并修改名字为led,如图所示自动分配存储器空间auto。

图4 添加个外设后的CPU模块6、生成定制的cpu模块,并建立.bdf的顶层文件,使顶层文件名与工程名一致。

在原理图文件中添加SK_CPU模块以及输入输出引脚,分别命名如下图所示。

7、建立顶层原理图.bdf文件(必须与工程名一致)。

添加上述生成的CPU模块,并添加输入输出引脚如图5所示。

图5 顶层原理8、编译上述工程9、引脚分配图6 引脚分配后的顶层原理图视图图7 引脚分配情况10、重新编译。

11、点击niosII IDE进入niosII界面建立工程,在SOPC Builder System PTF File中选择刚刚定制好的cpu模块SK_CPU.ptf作为编程目标cpu。

选择hello word 为模板,进行适当修改为IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,led);built project 编译成功后,下载。

根据NiosII的流水灯设计

根据NiosII的流水灯设计

基于NiosII 的流水灯设计一、实验目的:基于NiosII 设计一个8位LED 流水灯系统,要求掌握SOPC 系统设计方法,了解SDRAM 和FLASH 芯片的接口特性,掌握QuartusII 软件的使用方法以及NiosII EDS 设计应用软件的基本流程。

二、实验条件:1. 安装WindowsXP 系统的PC 机;2. 安装QuartusII9.0 EDA 软件;3. 安装NiosII EDS 9.0 软件;4. GW48型SOPC 开发平台;三、实验要求:设计过程包括硬件设计和软件设计两部分内容。

使用SOPC Builer 工具建立处理器系统,使NiosII 处理器成功连接SDRAM 、FLAHS 以及连接LED 的PIO 驱动模块。

通过嵌入式锁相环获得稳定的100MHz 时钟为系统和SDRAM 使用。

使用按键1实现系统复位(模式7,按键为单脉冲,接口为IO0):系统时钟 复位端连接LEDSDRAM 接口 FLASH 接口 clk_0reset_n out_port_from_the_LE D[7..0] zs_addr_from_the_SDRAM[12..0]zs_ba_from_the_SDRAM[1..0]zs_cas_n_from_the_SDRAMzs_cke_from_the_SDRAM zs_cs_n_from_the_SDRAMzs_dqm_from_the_SDRAM[1..0]zs_ras_n_from_the_SDRAMzs_w e_n_from_the_SDRAMaddress_to_the_FLASH[22..0]read_n_to_the_FLASH select_n_to_the_FLASHw rite_n_to_the_FLASHzs_dq_to_and_from_the_SDRAM[15..0] data_to_and_from_the_FLASH[7..0]MySysteminst复位用LED阵列显示流水灯效果:注:要求使用LED1~LED8。

NiosⅡ的LED显示屏控制器设计

NiosⅡ的LED显示屏控制器设计

D3 - / 0_ D3 J 0 O
D3 . D3 一 0_ 6 O7
匝圆 计 算 串 口 十—1 争 — —= —= 斗 一 = 一 争 一 通 机 信 匝 圃 { ! 叵圃 叵麴 … 匪 i 系

一 。
匝垂圈匦 圃 匝鲴 —[——[——[—]
=;

31 9 D 11 3_
w ihi t n FPG A s s v d. Alo, r a on bl g nia i f d t t r g r duc s t o plxiy ofbo h a a pr c s i g a he o r l i ole s e s a e or a z ton o a a s o a e e e he c m e t t d t o e sn nd t c nt o
进行扫描。
所 谓 位 分 离 , 是 把 数 据 的 高 低 位 按 权 重 分 开 , 后 重 新 就 然
组 织 。位 分 离 在 可 编 程逻 辑 器件 巾 比较 容 易 实 现 , 以 划 可
串 口控 制 器 、 时 器 、 储 器 控 制 器 、 定 存 CF卡 控 制 器 通 过 S C B i e 软 件定 制集 成 I OP ul r d P核 自动 生 成 。本 控 制 器 的 硬件 结 构 如 图 2所 示 。
核 心 , 制 单 屏 幕 多窗 口任 意 显 示 。整 个控 制 系统 在 一 片 F GA 上 实 现 , 用 S ) C B i e 控 P 使 (P ul r软 件 定 制 集 成 I d P核 , 过 通 外 扩 存储 设 备 实现 数 据 的 海 量 存 储 , 决 了 FP 解 GA 内部 资 源 相 对 不 足 的 问题 。 同 时 , 理 组 织 数 据 存 储 方 式 , 合 降低 了数

基于LABVIEW的跑马灯的设计

基于LABVIEW的跑马灯的设计

基于LABVIEW跑马灯的设计摘要:虚拟仪器(virtual instrumention)是基于计算机的仪器。

计算机和仪器的密切结合是目前仪器发展的一个重要方向。

使用虚拟仪器用户可以通过操作显示屏上的“虚拟”按钮或面板,完成对数据的采集、传输、显示等功能。

本文设计就是建立在VI基础上,在此平台上完成数据通信的功能。

关键字:虚拟仪器; VI;数据通信Labview简介LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。

与C和BASIC一样,LabVIEW也是通用的编程系统,有一个完成任何编程任务的庞大函数库。

LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。

LabVIEW也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。

虚拟仪器(virtual instrumention)是基于计算机的仪器。

计算机和仪器的密切结合是目前仪器发展的一个重要方向。

粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。

随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。

另一种方式是将仪器装入计算机。

以通用的计算机硬件及操作系统为依托,实现各种仪器功能。

虚拟仪器主要是指这种方式。

下面的框图反映了常见的虚拟仪器方案。

虚拟仪器的主要特点有:◆编程简单;◆开发周期短;◆高效性;◆开放性;◆自定义性;◆性价比高,能一机多用。

课题分析:随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。

彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。

根据NiosII的流水灯设计

根据NiosII的流水灯设计

基于NiosII的流水灯设计一、实验目的:基于NiosII设计一个8位LED流水灯系统,要求掌握SOPC系统设计方法,了解SDRAM和FLASH芯片的接口特性,掌握QuartusII软件的使用方法以及NiosII EDS设计应用软件的基本流程。

二、实验条件:1. 安装WindowsXP系统的PC机;2. 安装 EDA软件;3. 安装NiosII EDS 软件;4. GW48型SOPC开发平台;三、实验要求:设计过程包括硬件设计和软件设计两部分内容。

使用SOPC Builer工具建立处理器系统,使NiosII处理器成功连接SDRAM、FLAHS以及连接LED的PIO驱动模块。

通过嵌入式锁相环获得稳定的100MHz时钟为系统和SDRAM使用。

使用按键1实现系统复位(模式7,按键为单脉冲,接口为IO0):用LED阵列显示流水灯效果:注:要求使用LED1~LED8。

对应的IO编号分别为(IO60、IO67、IO65、IO63、IO70、IO73、IO75、IO79)。

四、实验步骤:1. 打开QuartusII软件,建立一个新的工程:单击菜单File\New Project Wizard…输入工程的路径、工程名以及顶层实体名。

单击Next>按钮,出现以下窗口⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗复位由于我们建立的是一个空的项目,所以没有包含已有文件,单击Next>继续。

设置器件信息:单击Next>,指定第三方工具:这里我们不指定第三方EDA工具,单击Next>后结束工程建立。

2. 建立SOPC系统单击Tool\SOPC Builder菜单项,启动SOPC Builder配置工具。

在弹出的系统命名对话框中为系统名称命名“MySystem”,并选择目标描述语言为“VHDL”,点击OK保存。

建立并配置处理器IP核。

双击或选择IP核库列表中的NiosII Processor 为系统添加NiosII处理器。

NIOSII SOPC实例1

NIOSII SOPC实例1

一.关于SOPC1)SOPC英文全名为:System-On-a-Programmable-Chip,即可编程片上系统。

SOPC 用可编程逻辑技术把整个系统放到一块硅片上,来用于嵌入式系统研究和电子信息处理。

SOPC是一种特殊的嵌入式系统,它是片上系统(System-On-a -Chip,SOC),即由单个芯片完成整个系统的主要逻辑功能但它不是简单的SOC,它也是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。

SOPC设计包括以32位NIOSII软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计以及软件调试等。

SOPC系统设计的基本软件工具有:1)QuartusII:用于完成NIOSII系统的综合、硬件优化、适配、编程下载以及硬件系统调试等;2)SOPC Builder:Altera NiosII嵌入式处理器开发软件包,用于实现NiosII 系统的配置、生成,内嵌于QuartusII软件中;3)ModelSim: 用于对SOPC生成的NiosII系统的HDL描述进行系统的功能仿真;4)NiosII IDE:用于进行软件的开发、调试,以及向目标开发板进行Flash下载;二.关于NIOSII处理器NIOSII 是一个可配置的软核处理器。

“可配置”的意思是设计者可以根据性能和成本的要求来增加或删减处理器的功能。

ALTERA公司并不销售NIOSII处理器芯片,而是销售空的FPGA,并提供NIOSII 系统相应的IP核来组成NIOSII系统,然后将这个系统下载到FPGA中实现。

1)关于AVALONAvalon总线是SOPC硬件系统的重要组成部分,Avalon总线规范是为了开发SOPC 环境下外设而设计的。

图1-1 一个SOPC的示例二. SOPC简单实例:软核控制LCD液晶字母显示器1.系统构成规划1)系统功能:在character LCD上显示”Hello LCD from NiosII!”2)本系统中需要的外围器件:(1)L CD:输出显示(2)S RAM存储器:程序运行时将其导入SRAM3)SOPC中建立系统需要添加的模块包括:(1)N ios II 32bit CPU(2)L CD display(3)外部RAM总线(4)外部RAM接口(5)J TAG UART Interface(6)定时器2.硬件系统的建立1)首先打开Quartus II 建立工程文件:将工程文件命名为hello_lcd,顶层文件与工程文件同名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验要求:
采用niosII软件和QuartusII软件设计一个跑马灯,即使LED小灯循环点亮。

二、实验步骤及实验结果:
1、建立工程
2、点击SOPC builder开始定制niosII模块命名为sk_cpu.Sopc选择verlog作为目标语言。

图1 sopc builder
图2 为niosII模块命名
3、添加cpu模块如图1所示。

因系统比较小,选择NiosII/e型可以满足设计要求,并为定
制的cpu取一个名字(也可以默认)。

图3 在NiosII中定制CPU模块
4、添加位宽8位,的4kbyte的ram模块
定制完cpu,在右侧选择memories and memory controller/on-chip/on chip memory(ram or
rom)。

在弹出的对话框中选择ram。

其他参数默认即可。

并修改名为ram。

5、在Microcontroller Peripherals中添加8位的pio并修改名字为led,如图所示自动分配存
储器空间auto。

图4 添加个外设后的CPU模块
6、生成定制的cpu模块,并建立.bdf的顶层文件,使顶层文件名与工程名一致。

在原理图
文件中添加SK_CPU模块以及输入输出引脚,分别命名如下图所示。

7、建立顶层原理图.bdf文件(必须与工程名一致)。

添加上述生成的CPU模块,并添加输
入输出引脚如图5所示。

图5 顶层原理
8、编译上述工程
9、引脚分配
图6 引脚分配后的顶层原理图视图
图7 引脚分配情况
10、重新编译。

11、点击niosII IDE进入niosII界面建立工程,在SOPC Builder System PTF File中选择
刚刚定制好的cpu模块SK_CPU.ptf作为编程目标cpu。

选择hello word 为模板,进行适当修改为IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,led);built project编译成功后,下载。

图8 在niosII界面定制工程模板
下载有两种方式。

一是采用传统的QuartusII下载。

另一种是采用niosII软件下载。

下面分别加以介绍。

1)下载方式1:
下载后程序会自动运行。

图9 Quartus II界面下载
2)下载方式2:
在nioII界面点击tools/quartursII programmer
图10 niosII界面下载
下载后点run as,run使程序进入运行状态。

同时按复位键使其为高电平。

程序开始运行。

可以看到8个led小灯循环点亮。

12、运行程序,观察实验结果。

8个led小灯循环点亮。

三、源程序清单
#include"system.h"
#include"altera_avalon_pio_regs.h"
#include"alt_types.h"
/*
* This is a freestanding application, so we want to use alt_main
* as the entry point. However, if the debugger is run on this
* application, it will try to set a breakpoint at main, which
* the application does not contain. The below line creates an
* alias so the debugger is able to set a breakpoint at main,
* yet the application retains alt_main as it's entry point.
*/
int main (void) __attribute__ ((weak, alias ("alt_main")));
/*
* Use alt_main as entry point for this free-standing application
*/
int alt_main (void)
{
alt_u8 led = 0x2;
alt_u8 dir = 0;
volatile int i;
/*
* Infinitely shift a variable with one bit set back and forth, and write * it to the LED PIO. Software loop provides delay element.
*/
while (1)
{
if (led & 0x81)
{
dir = (dir ^ 0x1);
}
if (dir)
{
led = led >> 1;
}
else
{
led = led << 1;
}
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);
/*
* The delay element in this design has been written as a while loop * to avoid confusing the software debugger. A tight, one line software * delay loop such as:
* for(i=0; i<200000; i++);
* can cause problems when it is stepped through using a software
debugger.
* The while loop below produces the same behavior as the for loop shown * above, but without causing potential debugger problems.
*/
i = 0;
while (i<200000)
i++;
}
return 0;
}。

相关文档
最新文档