NIOSII里的uart操作
NIOS2完整教程
![NIOS2完整教程](https://img.taocdn.com/s3/m/dc90066e443610661ed9ad51f01dc281e53a56a3.png)
NIOS2完整教程NIOS II 是一款高度可配置的32位嵌入式软核处理器,由Intel旗下的Altera(现在归属于英特尔)推出。
它具有低功耗、高性能和可扩展性的特点,适用于各种嵌入式应用领域。
下面是一份简要的NIOSII完整教程,帮助您了解如何开始使用NIOSII。
1. Nios II 架构Nios II 架构包括处理器核、总线接口、存储器和外设设备。
处理器核包括CPU和一些协处理器,如乘法器、除法器等。
总线接口用于连接处理器核、存储器和外设设备。
存储器用于存储指令和数据。
外设设备包括UART、GPIO、SPI、I2C等。
2. Nios II 开发环境搭建首先,您需要安装Altera的Quartus软件来进行Nios II的开发。
Quartus提供了一个开发工具套件,包括编译器、仿真器和调试器。
您还需要安装Nios II EDS,这是一个集成开发环境,用于配置和生成Nios II处理器的软件。
安装完软件后,您可以创建一个新的Nios II项目。
3. Nios II 项目配置在Quartus中创建新的Nios II项目时,您需要指定处理器类型、时钟频率和存储器大小等参数。
您还可以选择添加外设设备和协处理器。
一旦项目创建完成,您可以使用Nios II EDS来配置处理器和外设设备,并生成相关的软件。
4. Nios II 软件开发Nios II 支持多种软件开发工具,包括C/C++编译器、汇编器和调试器。
您可以使用C/C++编译器来编写和调试应用程序。
您还可以使用汇编器来编写高性能的关键代码。
调试器可以帮助您检测和修复应用程序中的错误。
5. Nios II 系统调试在开发过程中,您可能需要进行系统调试,以解决应用程序的问题。
Nios II 支持硬件和软件调试。
硬件调试通过连接JTAG接口进行,可以在硬件级别上进行调试。
软件调试使用Nios II调试器进行,可以在软件级别上进行调试。
6. Nios II 系统验证在完成软件开发和调试后,您可以进行系统验证,确保系统的正确性和稳定性。
基于NiosⅡ的UART设计与实现
![基于NiosⅡ的UART设计与实现](https://img.taocdn.com/s3/m/214d2c1e5f0e7cd184253660.png)
c n r d i tr u h te s ra ot e u gn ot a e o f me o g e l r d b g i gs f r . i th h i p w
Ke r s ART;N o y wo d :U isI;I—u lu ;RS 3 l P n ce s 2 2;F GA;S C P OP
中 图分 类 号 : P 3 T 32
பைடு நூலகம்
文献标识码 : A
文章 编 号 : 6 4 6 3 ( 0 2 1 — 1 6 0 1 7 — 2 6 2 1 )7 0 6 — 3
De i n n r a i a i n o sg a d e lz to fUART y t m a e o o s s e b s d n Ni sI I
W AN Yi i g .W ANG i i n G — n p Da- a g , q
( . ih u 妇e 1 Guz o
,Guy n 5 0 5,C ia; ia g5 0 2 hn
2 P ol A m dC l g u h u . epe r e ol eo i o e fG z
t e w y o s d t es f r n a d r o p r t n d sg o g t ota se e UART n ce sa d t n l td t e rl td h a fu e o t ea dh r wa ec o e ai e in t u h n f r h h wa o h t r t u lu n r sae ea e a h s f r c u t n .F rti t d c d t e UAR g e me tp n i l ot e a t a i s is nr u e h wa o o T a r e n r c pe,t e e c b d t e b sc h r wa e s u t r n h i h n d s r e a i a d r t cu e a d t e i h r
第7章 Nios II 常用外设编程 SOPC技术与应用
![第7章 Nios II 常用外设编程 SOPC技术与应用](https://img.taocdn.com/s3/m/1a648900bed5b9f3f90f1c7b.png)
第1节并行输入/输出内核并行输入/输出(PIO)内核提供了Avalon存储器映射从端口和通用IO端口直接的接口。
I/O端口连接到片内的用户逻辑或是连到与FPGA片外设备相连的引脚上。
PIO内核提供对用户逻辑或外部设备简单的I/O访问,应用实例如下:∙控制LED∙获取开关数据∙控制显示设备∙配置并与片外设备通信,例如专用标准产品(ASSP)的设备。
PIO内核可以基于输入信号而发出中断请求 (IRQ) 输出。
SOPC Builder 中提供了现成的 PIO内核,可以很容易地将PIO内核集成到SOPC Builder生成的系统中。
7.1.1 PIO 寄存器描述每个PIO内核可提供多达32I/O端口,用户可以添加一个或多个PIO内核。
CPU通过读/ 写PIO接口的映射寄存器来控制PIO端口。
在CPU的控制下,PIO内核在输入端口捕获数据,驱动数据到输出端口。
当PIO端口直接连到了I/O管脚,通过写控制寄存器,CPU能够将管脚置成三态。
图7-1是一个PIO应用的例子,本例使用了多个 PIO内核。
图7-1 使用PIO内核的系统实例当集成到SOPC Builder生成的系统中,PIO内核有两个特性对用户是可见的。
∙具有四个寄存器的存储器映射的寄存器空间,4个寄存器是data、direction、 interruptmask和edgecapture。
∙1到32个的I/O端口。
有些寄存器在某些硬件配置下不是必需的,这时相应的寄存器就不存在了。
对一个不存在的寄存器进行读操作,则返回一个未定义的值;一个不存在寄存器进行写操作则没有任何结果。
表7-1给出了PIO寄存器的描述。
1. 数据寄存器(Data Input & Output)PIO内核I/O端口可以连接到片上或片外的逻辑。
内核可以配置成仅有输入端口,或仅有输出端口,或两者都有。
如果内核用于控制设备上的双向I/O 管脚,内核提供具有三态控制的双向模式。
带fifo的串口发送器FPGA实现
![带fifo的串口发送器FPGA实现](https://img.taocdn.com/s3/m/dbeb93ac284ac850ad02423c.png)
带fifo的Uart发送器的FPGA实现FPGA使用Altera公司EP4C15F17C8N芯片,它的性能优越,支持大部分IP核使用。
常用它来学习NIOS II。
使用它实现带FIFO的串口。
首先,对uart的实现进行设计。
Uart的时序如下图所示:一般使用Uart时,配置为无校验,一个停止位,一个起始位,8位数据。
其中尤其重要的为波特率的设置。
波特率对应了Uart通信的位宽,用FPGA实现Uart其实就是对通信位宽的调制。
位宽通过基础时钟分频得到。
Uart波特率计算及实现以9600波特率为例计算:9600的意思为每秒传输的bit数为9600,所以位宽为:1/9600s ,换算为ns为:104167ns。
那么,如果时钟频率为25MHz,位宽系数为:104167/40 = 2604。
综合上述分析,可以得到一个公式,即:分频系数= 时钟频率/波特率。
例如:115200波特率,50MHz时钟其对应位宽为:50000000/115200 = 434。
那么以115200波特率,50MHz时钟为例实现Uart的发送。
计时器对时钟计数,经过434个周期之后,对计数器加1操作,对相应的信号进行操作,即可实现,它的源代码如下:always @(posedge clk or negedge rst)if(rst == 1'd0) count <= 17'd0;else if(count == 17'd434) count <= 17'd0;else count <= count + 1'd1;wire sendclk = (count == 17'd434);根据sendclk对Uart进行实现,代码如下:always @(posedge clk or negedge rst)if(rst == 1'b0) TX <= 1'b1;else if(FIFOempty == 1'b1) begin TX <= 1'b1; endelsecase(txcount)4'd0: TX <= 1'b0; //start bit is low4'd1: TX <= fifodata[0];4'd2: TX <= fifodata[1];4'd3: TX <= fifodata[2];4'd4: TX <= fifodata[3];4'd5: TX <= fifodata[4];4'd6: TX <= fifodata[5];4'd7: TX <= fifodata[6];4'd8: TX <= fifodata[7];4'd9: TX <= 1'b1; // stop bitsdefault: TX <= 1'b1 ;endcase它包含了一个有限状态机。
Nios II中断简述及中断调试技巧
![Nios II中断简述及中断调试技巧](https://img.taocdn.com/s3/m/41cd0d49e45c3b3567ec8ba3.png)
一、Nios II中断简述Nios II 的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。
负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。
系统ISR维护着一个中断向量表,表中的每一项代表着一个专项处理程序的入口。
所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。
系统ISR的入口地址是在SOPC_Builder中定义的,叫Exception Address。
和中断有关的CPU寄存器有:ctl0、ctl1、ctl3、ctl4。
Ctl0 是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。
Ctl1是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。
Ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。
Ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,1代表有中断,0代表没有……计32位。
NiosII的中断处理过程是这样的:1. 拷贝一份程序状态字到ctl1;2. 清除全局中断允许位PIE,禁止中断;3. 将下一条将执行的指令的地址存入R29,以便中断返回之用;4. 跳转到中断入口地址,进入系统ISR;5. 系统ISR保护现场;6. 系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序从11继续,否则由7继续;7. 系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;8. 硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序;9. 用户中断处理程序做出具体的处理,最后返回系统ISR;10. 系统ISR恢复现场,并返回;11. 软中断处理程序进行陷井指令、模拟指令判断,并做相应处理,然后返回系统ISR;12. 系统ISR恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。
nios ii 入门手册
![nios ii 入门手册](https://img.taocdn.com/s3/m/494e086ab84ae45c3b358c5a.png)
一、建立quartus ii工程首先,双击quartus ii 9.1图标打开软件,界面如下图1.1所示图1.11.1新建工程(1)点击file –>New Project Wizard 出现图1.2所示的对话框。
图1.2(2)点击Next。
如图1.3所示:第一行是工程的路径,二、三行为实体名。
填好后点击Next。
图1.3(3)此处可选择加入已设计好的文件到工程,点击Next。
图1.4(4)选择设计器件如图1.5所示。
接着点击Next。
图1.5(5)接着点击Next。
无需改动,点击finish,显示如下图所示。
图1.6(6)此时,工程已经建立完成,接下来需要建立一个原理图输入文件,点击file –>New ->Block Diagram/Schematic File 后如图1.7所示。
图1.7二、构建一个nios ii 软核(1)首先点击Tools ->Sopc Builder图2.1在System Name中输入软核的名称,注意:软核的名称不能和quartus工程的实体名相同,否则编译会出现错误,接着点击ok。
图2.2图中clk_0为时钟名称,100.0为时钟值双击可修改其值。
即软核的时钟就是100MHZ。
(2)建立nios ii处理器点击Processors -> Nios ii Processor 如图2.3所示图2.3点击后,将出现下图,在下图中选择软核的类型。
这里提供了三种类型,Nios II/e占用资源最少600-800LEs,功能也最简单,速度最慢。
Nios II/s占资源比,前者多一些,功能也多了,速度也忚一些Nios II/f 占资源最多,功能也最多,速度就最快,用户可根据实际的需要选择不同的类型。
此处选择Nios II/f型,速度和功能都能满足。
下方Reset Vector是复位后启动的Memory类型和偏移量。
待SDRAM设置号以后再来设置此处。
NIOS II常见编译问题解答win7下的兼容性问题
![NIOS II常见编译问题解答win7下的兼容性问题](https://img.taocdn.com/s3/m/20c6084ca8956bec0975e348.png)
NIOS II常见编译问题解答win7下的兼容性问题cygdrive/f/altera/10.0/nios2eds/components/altera_hal/build/system_rules.mk:120:/components/altera_hal/build/gnu_rules.mk: No such file or directory/cygdrive/f/altera/10.0/nios2eds/components/altera_hal/build/system_rules.mk:124:/components/altera_hal/build/gtf_rules.mk: No such file or directorymake[1]: *** No rule to make target `/components/altera_hal/build/gtf_rules.mk'. Stop.make: *** [system_project] Error 2Build completed in 11.068 seconds解决办法:因为在win7下的权限问题.具体解决方法参考下面的方法:Under your Quartus II folder, go to bin->cygwin->bin folder, select the following files in the list below and then right-click and choose Properties. Under the Compatibility tab, check “Run this program in compatibility mode for:”and choose “Windows XP (Service Pack 2)”. Check “Run this program as an administrator”, as well.Here is the list of files that you can select to change their compatibility mode under the Quartus II->bin->cygwin->bin folder:1. Make.exe2. Sh.exe3. Echo.exe4. Cygstart.exe5. MakeInfo.exe6. Perl.exe7.Collect2.exe(undernios2eds\bin\nios2-gnutools\H-i686-pc-cygwin\libexec\gcc\nios2-elf\3.4.6)8. Nios2-elf-g++.exe (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\bin)在英文网上查到的,这几个不同的exe文件在不同的bin文件夹之间,依次右击改掉属性,把允许管理员使用权限前面打上勾即可.5.如果run Niosii时经常出现到2%后N久也不动,也不报错,甚至进度条也在滚,当然没有前进了。
基于 MAX10 的 NIOS II 入门
![基于 MAX10 的 NIOS II 入门](https://img.taocdn.com/s3/m/0edea33accbff121dd368393.png)
IDE: Quartus Prime 18.0 Standard Edition,max10能用的只有Standard和lite版本.开发板: DE10-Lite, 芯片型号为:10M50DAF484C7G语言: Verilog HDL, C.Step 1.建立一个MAX10的工程. 注意Device and pin options的configuration mode的选择。
基于MAX10的NIOS II入门Step 2. 启动Platform designer (老版本叫Qsys),添加Nios II Processor、onchip_memory、onchip_flash、pio、jtag_uart以及sysid_qsys几个简单的模块。
采用默认就可以了,Clk直接使用的是50 MHZ。
连接相关clk等的连线(连线都连上就行)。
Step 3. 设置NIOS. 程序储存在FLASH中,在RAM运行Step 4. 设置flash. 注意configuration mode. 需要与Device and pin options的configuration mode设置一致。
Step 5. 基本就这些设置,完后generate,生成HDL文件。
在Test.v中调用NIOS_CPU,然后在Quartus左侧的文件列表中添加synthesis目录下的NIOS_CPU.qip文件。
此处NIOS_CPU是你自己命名保持的platform designer工程名,编译,下载到Max10中。
Step 6. Tool -> NIOS II software build tools for eclipse. 新建一个Nios II Application and BSP form Template. SOPC information file name选择上一步生成的NIOS_CPU.sopcinfo. Template选择hello_world_small应用,点击finish完成应用程序创建。
NIOSII教程
![NIOSII教程](https://img.taocdn.com/s3/m/4f17be87ab00b52acfc789eb172ded630a1c9849.png)
NIOSII教程NIOS II 是一种基于软核的处理器,可用于 FPGA 设计中。
它是由Altera 公司所开发的。
NIOS II 可以在 FPGA 中进行快速原型设计,并且具有高度可配置性和可扩展性。
本文将介绍 NIOS II 的基本架构和使用方法。
NIOSII架构基于RISC架构,它是一个32位的处理器,并且具有可选的指令扩展。
它的流水线深度可以根据设计的需求进行配置,以实现不同的性能要求。
NIOSII支持多种功能,包括硬件中断、异常处理以及浮点运算等。
在开始使用NIOSII进行开发之前,首先要进行软核处理器的配置。
配置包括选择所需的指令集、流水线深度和其他性能参数。
配置完成后,可以将软核处理器添加到FPGA设计中。
一旦软核处理器被添加到FPGA设计中,就可以开始编写应用程序。
NIOSII支持标准的C/C++语法,并且还提供了一些特殊的函数和指令,用于访问FPGA的硬件资源。
例如,可以使用特殊函数来配置GPIO引脚、读取和写入存储器以及执行其他与硬件交互的操作。
使用NIOSII进行FPGA开发具有许多优点。
首先,它提供了一种快速原型设计的方法,可以大大加快开发进程。
其次,NIOSII的可扩展性和高度可配置性使得它适用于各种不同的FPGA设计需求。
最后,NIOSII的开发工具和调试接口使得开发和调试过程更加简单和高效。
总结起来,NIOS II 是一种基于软核的处理器,适用于 FPGA 设计中。
它具有灵活性和可配置性,可以使用 C/C++ 或 HDL 进行开发,并通过Altera 公司提供的工具链进行编译和调试。
NIOS II 提供了一种快速原型设计的方法,并且适用于各种不同的 FPGA 设计需求。
NiosII常见问题解答
![NiosII常见问题解答](https://img.taocdn.com/s3/m/826ecd8583d049649b66587a.png)
flash的数据线必须是双向引脚
地址线的连接需要小心,举个例子 对于地址线22位、数据线16位的flash器件而言,SOPC Builder生成 的NiosII系统顶层文件将包含23位的flash地址线:addr[22..0], 此时应当把flash器件地址线addr[21..0]与顶层文件的 addr[22..1]互连;
z 内建的CFI Table错误识别和重载
对于已知的某些flash器件的CFI Table问题,flash programmer已经 包含了校对代码来识别和纠正它们;此种情况下,对flash programmer使
本文档版权归作者所有,未经作者同意不得翻印、抄袭或公开传播;转载或引用请征求作者同意.
Value does not match;
运行NiosII IDE中内嵌的软件模板‘Memory Test’,执行‘Test Flash’
操作,如果该操作返回失败,则可能是下面两个原因导致的:
z 目标板的物理连接有问题,例如
flash器件的引脚与FPGA对应引脚互连不正确
flash器件的供电有问题
目 录 ......................................5
1 硬件开发....................................7
1.1 Flash Programmer ........................7
1.1.1 No CFI Table...........................7
作者:蔡伟纲
NiosII 之
常见问题解答
作者: 蔡伟纲
本文档版权归作者所有,未经作者同意不得翻印、抄袭或公开传播;转载或引用请征求作者同意.
Nios_II中断简述及中断调试技巧
![Nios_II中断简述及中断调试技巧](https://img.taocdn.com/s3/m/25cd74858762caaedd33d44c.png)
Nios II中断简述及中断调试技巧2008-11-05 17:35一、Nios II中断简述Nios II 的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。
负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。
系统ISR维护着一个中断向量表,表中的每一项代表着一个专项处理程序的入口。
所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。
系统ISR的入口地址是在SOPC_Builder中定义的,叫Exception Address。
和中断有关的CPU寄存器有:ctl0、ctl1、ctl3、ctl4。
Ctl0 是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。
Ctl1是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。
Ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。
Ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,1代表有中断,0代表没有……计32位。
NiosII的中断处理过程是这样的:1.拷贝一份程序状态字到ctl1;2.清除全局中断允许位PIE,禁止中断;3.将下一条将执行的指令的地址存入R29,以便中断返回之用;4.跳转到中断入口地址,进入系统ISR;5.系统ISR保护现场;6.系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序从11继续,否则由7继续;7.系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;8.硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序;9.用户中断处理程序做出具体的处理,最后返回系统ISR;10.系统ISR恢复现场,并返回;11.软中断处理程序进行陷井指令、模拟指令判断,并做相应处理,然后返回系统ISR;12.系统ISR恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。
基于NIOS Ⅱ系统的异步串行通信功能的实现
![基于NIOS Ⅱ系统的异步串行通信功能的实现](https://img.taocdn.com/s3/m/c4b56022195f312b3069a59b.png)
作者: 颜丽莎;朱力宏
作者机构: 郑州铁路职业技术学院,河南郑州450052
出版物刊名: 郑州铁路职业技术学院学报
页码: 23-25页
年卷期: 2011年 第3期
主题词: NIOS;Ⅱ软核处理器;FPGA;异步串行通信
摘要:NIOS ⅡI软核处理器具有可裁减,配置灵活等优点。
在实际使用中,可根据需求,构建最合适的处理器系统及外部接口而无需更改硬件电路或增加扩展芯片。
它提供完备的数据通信协议,用户只需要使用相关的IP核即可得到所需的接口。
针对这些特点,本文介绍了基于NIOS II软核处理器的异步串行通信的实现方法,讲述了如何采用SOPC Builder定制UART(异步串行收发器)IP核,重点讨论了在NIOS II集成开发环境下的几种编程方法。
以最简单的Hello程序为例,NIOSII开发的整个流程
![以最简单的Hello程序为例,NIOSII开发的整个流程](https://img.taocdn.com/s3/m/bf4abc54ce84b9d528ea81c758f5f61fb7362820.png)
以最简单的Hello程序为例,NIOSII开发的整个流程废话不多说,我们来开始最简单、最基本的NiosII程序,首先打开quartusII 9.1,双击即可,打开如下界面:点击File→New Project Wizard 如下图:出现如图:点击第一个后面的。
将新建的文件放入自己事先建好的文件夹hello内千万记住路径中不能有中文完成后如图:再第二个填入hello中即可,之后点击next,出现如下图:继续next,不要犹豫……在Device family 中选择Cyclone III(由于我们的板子芯片是这个系列的),其他的不用动。
在available devices中选择EP3C10E144C8,完成后点击next,这里我们不做仿真,直接点击next点击finish,完成新建真正的工作马上开始:在这点击File→New都可跳出如下界面:选择Block Diagram/Schematic File,双击,出现如下界面在工具栏()中选择SOPC,单击,出现如下界面其中的System Name 命名为kernal ,Target HDL选为VHDL将时钟改为100M,Name也改为clk(改不改都行)下一步选择CPU,也就是nios的处理器,双击选择完毕后,出现这样的对话框对话框中可看到三种nios核(从e核最简单,占用空间最小,第三个f核是快速的,但是占用空间最大的,中间的S核是介于e与f之间的,性能与占用空间比较平衡的核。
)这里我们选择f核(方便以后开发使用)这里Memory后面可选的部分暂时没有东西,暂且放一边,待我们建立好SDRAM与EPCS 再回来选择即可☺接下来,点击next其中Data cache 选择none(原因在后面介绍☺)点击next点击next 继续next其中有很多级别,这里我们选择level1即可点击完成,出现如下界面其中cpu_0即为我们要使用的核,右键rename改为cpu,下面要做的就是接外设,让cpu工作起来首先加入sdram双击sdram,出现选择Presets:Custom;Data with:16,其他的都不变。
传真机通信原理
![传真机通信原理](https://img.taocdn.com/s3/m/c6c0441dba68a98271fe910ef12d2af90242a805.png)
传真机作为图文通信设备得到了广泛应用。
为了进行正常通信,需要在通信过程中进行一些“操作”,或者由机器自动执行某些操作,发送方和接收方要进行“磋商”。
接收/发送双方要经过发出表示信号、命令信号、响应信号和证实信号这一过程,这是一个不断“操作”和“确认”的渐进过程。
这个通信规程就是ITU-T在T.30建议中作的规定,T.30建议书作为传真机在公用电话交换网上的传输规程,对公用电话交换网上传真业务的发展起到了决定性的作用。
目前传真通信的产品开发主要是基于Conexant等公司的专用传真芯片,对系统二次开发。
本文从替代传统专用芯片的角度,提出一种新的基于NiosII传真系统方案,即软硬件协同开发的流程,分析并设计实现传真通信。
1 传真通信规程分析1.1 传真过程描述T.30建议规定了通信规程的适用范围、所用术语的解释、传真呼叫描述、传真用的单音信号方式和二进制信号方式[1]。
图1为传真阶段过程图。
(1)阶段A:呼叫建立,连通传真通信双方传输线,使传真机接入线路。
拨号和应答双方均可由人工或自动两种操作完成。
(2)阶段B:报文前过程,报文传输的准备阶段,包括性能识别和选择条件命令及接收条件确认。
命令部分包括性能命令、训练、同步及可选的非标准设备命令、终端识别命令、查询(发送)命令和回声抑制器解除。
(3)阶段C:报文中过程,由信息传输过程和报文传输组成。
信息传输过程与报文传输同时进行,并控制传输信号完整性,如传输同步、差错检测及纠错和线路管理。
若没有差错检测和纠错处理,则该阶段只传输报文数据。
(4)阶段D:报文后过程,传真双方在完成传输一页报文后进行该过程。
包含消息结束信号、确认信号、多页信号和传真结束过程信号。
如果信息传输完毕,则直接进入E阶段。
(5)阶段E:呼叫释放,可以手动或自动进行。
在信息传输完毕或上述各阶段操作异常时,双方分别进入该阶段,将传真机与线路脱离。
1.2 传真二进制码信号结构传真过程用的二进制信号,以300 b/s的速率传送,这是三类机二进制代码过程数据传输的标准速率。
Cyclone IV NIOS II EPCS启动生成指南
![Cyclone IV NIOS II EPCS启动生成指南](https://img.taocdn.com/s3/m/d4ebf236ed630b1c59eeb519.png)
软件平台: Quartus Prime 16.0 Standard Edition硬件平台:Cyclone IV EP4CE22E22C8 ;配置芯片:EPCS16;2MByte;1.搭建硬件平台;打开quartus 软件:到此,工程建立成功。
下面开始搭建Nios II弹出窗口添加完处理器,之后会弹出如图对话框,点击完成。
继续添加ram继续添加JTAG ,IO ,UART,EPCS控制器等。
依次完成重命名(方便观看,不重新命名也可以)依次设置其他模块的时钟来源设置JTAG 和flash 连接到cpu的数据总线,flash需要同时连接到CPU的指令总线设置LED 和FLASH的输出名称自定。
给顶层分配引脚用的。
软件自动连接复位时钟自动设置地址分配完成后,ctrl+s 保存,保存后退出生成HDL 文件有warning提示,flash 没有分配中断。
改一下,保存。
再次生成。
生成好之后,点击完成。
至此,平台搭建完成。
回到quartus II软件,添加对应qip文件,添加原理图文件。
拖到空白地方,单击左键即可。
双击管脚网络名,可以更改成之前配置好的名字,方便引脚分配。
在工程文件夹内新建IO_Config.tcl文件,文件名随便。
内容为:保存。
可以看到,管脚已经更改完成。
保存原理图文件设置原理图为顶层文件设置部分专用脚为普通IO开始编译,完成后即可。
打开开发NiOS软件,开始设计程序。
新建Eclipse工程编译成功。
准备烧写程序。
UART 功能使用方法.
![UART 功能使用方法.](https://img.taocdn.com/s3/m/89df6486d1f34693daef3e5b.png)
Application NoteSpecifications subject to change without notice, contact your sales representatives for the most recent information. UART 功能使用方法1 適用產品:SM59R16A2 / SM59R08A22 UART 使用概述:2.1 提供兩組串通訊列埠 (UART0, UART1)2.2 每一組UART 分別有獨立的緩衝記憶體,且傳送及接收則是共用.UART0 使用S0BUF UART1 使用S1BUF當執行資料接收時,必須在前一筆資料完成執行工作後,否則會造成資料流失的問題;可由送傳中斷旗標或接收中斷旗標判斷是否完成執行工作的狀態.2.3 當使用串通訊列埠時,系統時脈來源建議使用外部晶振.由於內部晶振頻率的誤差約為+5%,當使用串通訊列埠時,系統時脈必須要求晶振頻率的誤差約為+2%.3 以下說明與UART 相關的特殊控制暫存器及特殊狀態暫存器Special Function Register (SFR)Mnemonic Description DirectBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0RESE TSerial interface 0 and 1PCON Power control 87h SMOD MDUF - PMW - - STOP IDLE 00hBRGS Baud rategenerator switch D8h BRS - - - - - - - 00hS0CON Serial Port 0control register 98h SM0 SM1 SM20REN0TB80 RB80 TI0 RI0 00hS0RELL Serial Port 0reload register low byte AAh S0REL .7 S0REL .6 S0REL .5 S0REL .4 S0REL .3 S0REL .2 S0REL .1 S0REL.000hS0RELH Serial Port 0reload registerhigh byte BAh - - - - - - S0REL .9 S0REL.800h S0BUF Serial Port 0data buffer 99h S0BUF[7:0] 00hS1CON Serial Port 1control register 9Bh SM - SM21REN1TB81 RB81 TI1 RI1 00hS1RELL Serial Port 1reload register low byte 9Dh S1REL .7 S1REL .6 S1REL .5 S1REL .4 S1REL .3 S1REL .2 S1REL .1 S1REL.000hS1RELH Serial Port 1reload registerhigh byte BBh - - - - - - S1REL .9 S1REL.800h S1BUF Serial Port 1data buffer9Ch S1BUF[7:0] 00hApplication NoteSpecifications subject to change without notice, contact your sales representatives for the most recent information.Mnemonic: S0CON Address: 98h 7 6 5 4 3 2 1 0 Reset SM0 SM1 SM20 REN0TB80 RB80TI0 RI0 00hSM0,SM1: 串列通訊埠0(UART0)模式選擇(Serial Port 0 mode selection.)SM0 SM1 Mode 0 0 0 0 1 1 1 0 2 1 1 3SM20: 多處理機通訊致能旗標(Enables multiprocessor communication feature.) 串列埠工作模式2和3時,可致能多工處理器通訊的功能。
uart的基本编程步骤
![uart的基本编程步骤](https://img.taocdn.com/s3/m/0a0edc7d590216fc700abb68a98271fe910eaf86.png)
uart的基本编程步骤UART(通用异步收发传输)是一种常见的串行通信协议,用于在微控制器和外部设备之间进行数据传输。
下面是UART的基本编程步骤:1. 初始化UART,首先,你需要在微控制器上初始化UART模块。
这通常涉及设置波特率(通信速率)、数据位、停止位和校验位等参数。
这些参数的设置取决于你的具体应用需求和外部设备的要求。
2. 配置引脚,UART通常使用两个引脚进行数据传输,一个用于发送(TX),一个用于接收(RX)。
你需要在微控制器上配置这些引脚,并确保它们与外部设备正确连接。
3. 发送数据,要发送数据,你需要将要发送的数据加载到UART发送缓冲区。
一旦数据被加载,UART模块将自动开始发送数据。
你需要确保发送的数据符合UART的规范,并且在发送数据之前,需要检查发送缓冲区是否为空,以避免数据丢失。
4. 接收数据,接收数据与发送类似,你需要设置接收缓冲区,并在接收到数据后从中读取数据。
同样,你需要检查接收缓冲区是否有新的数据可用,以避免数据丢失。
5. 中断处理(可选),在一些情况下,你可能需要使用中断来处理UART的发送和接收。
这可以帮助你及时响应数据的到来或发送完成等事件。
6. 错误处理,最后,你需要考虑如何处理可能出现的错误,比如数据丢失、校验错误等。
这可能涉及到错误标志的检查和相应的处理流程。
总的来说,UART的基本编程步骤包括初始化UART模块、配置引脚、发送数据、接收数据、中断处理(可选)和错误处理。
在实际编程中,你需要根据具体的微控制器型号和外部设备的通信协议要求来进行相应的设置和处理。
【翻译】NiosII处理器简介(NiosII)
![【翻译】NiosII处理器简介(NiosII)](https://img.taocdn.com/s3/m/e52e64c5c0c708a1284ac850ad02de80d4d8060b.png)
【翻译】NiosII处理器简介(NiosII)处理器简介本⽂介绍的Altera Nios II处理器是⼀个可在Altera FPGA器件⾥实现的软核处理器。
主要讲述Nios II的基本架构和其指令集。
配合Quartus II 软件,使⽤Altera的SOPC Builder可以很容易的把Nios II处理器和它的内存及外围组件例化。
关于Nios II处理的完整描述请参阅《Nios II处理器参考⼿册》,在Altera官⽹的⽂献区可找到该⼿册。
SOPC Builder的简介在⼊门简介⾥有提供,也可在官⽹的⼤学计划板块找到。
本⽂包含的内容:⽬录Altera Nios II处理器是⼀个软核处理器,⽤硬件描述语⾔定义,使⽤Quartus II软件可在Altera的FPGA器件⾥实现。
本⽂为想要在Altera DE2开发板上实现⼀个基本Nios II系统的⽤户提供⼀个关于Nios II处理器的简介。
系统Nios II处理器可使⽤许多其他组件构成⼀个完整的系统。
这些组件包括许多标准外设之外,还可由⽤户⾃定义外设。
Altera DE2开发板含有⼏个可集成在Nios II系统⾥的组件。
图1就是⼀个这样的系统。
Nios II处理器和⽤来连接DE2上其他芯⽚的接⼝都在Cyclone II FPGA⾥实现。
这些组件通过Avalon 交换结构连接。
Cyclone II器件的内存块可为Nios II处理器提供⽚上内存。
它们可直接或通过Avalon⽹络与处理连接。
通过相应的接⼝访问DE2上的SRAM和SDRAM。
系统使⽤的I/O设备例化为I/O接⼝。
连接主机和DE2的USB线缆接⼝由⼀个特殊的JTAG UART接⼝提供。
这个接⼝电路和其相应的软件叫做USB_Blaster。
另⼀个名为JTAG Debug的模块,⽤来使主机控制Nios II处理器。
这样,就可以执⾏操作,⽐如,下载程序到内存⾥,启动和停⽌执⾏,设置程序断点,和搜集实时数据。
NIOS2平台简要介绍
![NIOS2平台简要介绍](https://img.taocdn.com/s3/m/4c6f2d320622192e453610661ed9ad51f01d54dc.png)
基于NIOS2的SOPC系统构建1 NIOS II体系结构Nios2处理器是Altera公司推出的32位RISC嵌入式处理器它是SOPC的核心。
具有200DMIPS 用来计算同一秒内系统的处理能力它的单位以百万来计算以上的运算能力处理器以软核的形式实现具有高度的灵活性和可配置性。
Nios II系列包括三种产品1 Nios II/f快速最共的系统性能中等FPGA使用量 2 Nios II/s标准高性能低FGPA使用量 3 Nios II/e经济低性能最低的FGPA 使用量。
Nios II系列支持使用专用指令。
专用指令是用户增加的硬件模块它增加了算术逻辑单元ALU。
开发者能为系统中使用的每个Nios II 砥鞔唇ǘ啻?56个专用指令这使得设计者能够细致地调整系统硬件以满足性能目标。
专用指令逻辑和本身Nios II指令相同能够从多达两个源寄存器取值可选择将结果写回目标寄存器。
同时Nios II系列支持60多个外设选项通过选择合适的外设获得最合适的处理器、外设和接口组合而不必支付根本不使用的硅片功能。
Nios II特性全32位指令集、数据和地址路径32个通用寄存器32个外部中断源单指令3232乘法器、除法器可产生32位的结果专门用于计算64位和128位乘法的指令用于单精度浮点运算的浮点运算指令单指令筒形移位寄存器可以同很多片上外设、接口、片外存储器和片外外设接口使用IDE驱动硬件调试模块可以轻松的对处理器进行开始、停止、中断等操作图1.1是Nios II处理器核的结构图各模块将分别做简要介绍。
图1.1 Nios II处理器核模块图数据处理主要由算术逻辑单元ALU完成现有的Nios II 内核中暂时没有协处理器。
用户逻辑接口Custom Instruction Logic用来连接用户定制的逻辑电路与Nios II内核。
在上图中可以看出Nios II采用哈佛结构数据总线和指令总线分开。
为了调试方便Nios II处理器集成了一个JTAG调试模块可以方便的与IDE 环境联合调试。
实验08_SOPC_EPCS及FLASH编程S
![实验08_SOPC_EPCS及FLASH编程S](https://img.taocdn.com/s3/m/aa2623489e31433238689310.png)
实验任务: 添加EPCS内核,。
知识点:
1.掌握EPCS内核添加设置方法。 2.掌握时序约束设置的方法。 3.掌握用Flash Programmer下载.sof和.elf文件到EPCS的方 法。 4.掌握生成.jic文件,对EPCS编程的方法。
系统需求:
1.实验之前,请以课件为基础,预习实验内容。 2.在指定的文件夹存储、命名各工程项目和文件。 3.规范实验报告的书写内容和格式。
1.启动QUARTUS II,创建或移动系统设计工程(略)
2.启动Qsys,在原NIOS II系统中添加UART内核并设置
(1)打开 Qsys软件,添加EPCS内核进行设置
1.选择菜单栏,启动Qsys软件。 或直接在文件导航栏上双击 【.qsys】文件,打开Qsys软件, 并自动打开NIOS II系统设置文 件对话框。
(2)完成其他操作及生成NIOS II系统。
6. 在NIOS II处理器内核设置中,修改复 位向量设置。双击NIOS II处理器内核, 在设置框的“Reset Vector”设置中,下 拉,选择【epcs.epcs_control_port】为 复位存储器,其他不做修改。【Finish】 完成NIOSII内核修改。
② 存储非易失性数据:例如串行号,NIC号和其他需要 长久储存的数据。
③ 管理FPGA配置数据:EPCS可存储FPGA的配置数据,并 在上电时自动完成对FPGA的配置。具有网络接口的嵌入 式系统可从网上接收新的FPGA配置数据,并通过EPCS控 制器将新的配置数据下载到EPCS串行配置器件中。
6
EPCS控制器功能
7. 下拉【Tasks】栏至最低层,双击【Write SDC File】,弹出时序约束文件保存对话框。修改名称或 使用默认名称,【OK】确定。退出时序分析对话界面, 提示是否保存SDC文件,前面已保存,故现在选择 【NO】,退出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一步,在sopc里增加一个串口
第二步:操作UART的三种方法
(1)直接寄存器操作。
NIOS II 的串口编程有多种方式,很多地方给的程序大多数更像纯C语言写法,占用程序空间比较大,这里以一个更像单片机串口的程序,占用空间当对而言要小,且对像工业控制的数据传输更实用简单些(个人觉得)。
extern unsigned char leddata[8];
//UART发送一个字节子程序
void Uart_send(unsigned char data)
{
alt_u16 status;
status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
while(!(status&0x0040))//等待发送完成
status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,data);
}
//UART发送多个字节子程序
void Uart_send_n(unsigned char *ptr,unsigned char n)
{
for(;n>0;n--)
{
Uart_send(*ptr);
ptr++;
}
}
//UART接收子程序
int Uart_receive(void)
{
alt_u16 status;
int temp;
status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
while(!(status&0x0080))//等待发送完成
status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
return temp;
}
//串口接收中断服务程序
void Uart_ISR(void * context,alt_u32 id)
{
unsigned char temp;
temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
leddata[5]=temp;
}
//串口中断初始化
void Uart_init()
{
IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);//接收中断使能
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);//清状态标志
// IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);//清接收寄存器
alt_irq_register(UART_IRQ,0,Uart_ISR);//中断注册,此处编译总出现警告,还请高手能指点。
warning: implicit declaration of function `alt_irq_register' test3 uart_zx.h
}
程序中接收部分写了一个扫描的和一个中断的,可跟据需要选择。
我想中断接收的更实用些吧。
其中UART_BASE请更换为你自己UART的名字即可。
(2)类似C语言的操作,用printf函数。
(编译过程太慢!可以喝杯茶了!)
使用这种方法要加上这一句 #include <stdio.h>
别忘了在System library Properties 的stdout/stdin 选择你的串口。
int main ()
{
printf("Hello world.\n");
return 0;
}
执行上述程序可以看到效果!
(3)转载(没试过)
下面介绍第三种串口编程的方法,我们还是从一个简单的例子看起吧:
#i nclude <stdio.h>
#i nclude <string.h>
int main (void)
{
char* msg = “hello world”;
FILE* fp;
fp = fopen (“/dev/jtag_uart”, “r+”);
if (fp)
{
fprintf(fp, “%s”,msg);
fclose (fp);
}
return 0;
}
这种方法才是标准的串口操作方法。
说实话,NiosII下的串口编程比Nios下的已经简化了很多。
Nios下的串口操作要调用Altera自定义的函数,而NiosII下,由于有了HAL(详见NiosII step by step 2关于HAL的介绍)的存在,串口编程已经成为标准的文件操作了。
我们知道,在Unix/Linux等操作系统里所有的流操作都可以看成是文件,NiosII吸收了这一点(可能是因为Nios吸收了Cygwin的很多特性吧,呵呵),把对串口的流操作也当成了一种文件操作。
操作一个串口时,只需要对它相应的设备驱动读写数据就好了。
fp = fopen (“/dev/jtag_uart”, “r+”);
这个语句的意思就是打开jtag_uart的驱动,并且可以对其进行读写(r+),
if (fp)
{
fprintf(fp, “%s”,msg);
fclose (fp);
}
这段语句的意思就是如果文件打开没问题,指针句柄有效,就可以用fprintf语句向这个串口写数据了,这里要写的数据是一个字符串。
写完之后关闭文件。
你看,所有的操作几乎与C语言下的文件操作没什么区别,呵呵,唯一不同的就是待操作的文件是你要操作的外设,而不是一个“文件”。
利用这种方法,你可以立刻举一反三,只要改动一点点,就可以操作所有的串口外设了。
要改动的就是/dev/jtag_uart,把/dev/后面的外设名改改就是了。
例如我要操作NiosII与PC之间的通信,只要改为/dev/pc_uart就行啦。
再延伸一点,如果你的系统里面要添加四个使用串口流的设备,分别是JTAG UART、PC UART、GSM UART、GPS UART,那么对于每个外设,只要编写四个相应的文件操作程序就行了:
fp = fopen (“/dev/jtag_uart”, “r+”);
fp = fopen (“/dev/pc_uart”, “r+”);
fp = fopen (“/dev/gps_uart”, “r+”);
fp = fopen (“/dev/gsm_uart”, “r+”);
当然,不要把所有外设的操作都写在一个程序里,应该分开写,最后分成不同的函数,再最后集成到一个main函数里。
这是编程细节方面的问题了,不多说了。
以上介绍的方法就是我们一般会采用的方法,具有很大的灵活性,可随时更改、添加外设程序,克服了第一种方法的局限性。
说到这里,你应该知道其实第一种方法就是第二种方法的在NiosII IDE里面的隐含集成,其实图形用户界面背后也不过就是第二种方法的程序,只是stdin/stdout/stder都是由你指定罢了,呵呵。
(估计Altera设计这三个选项就是为了方便懒人和初学者,呵呵)。