基于Chirp函数的Nios Ⅱ嵌入式实现

首先分析chirp函数在频域上的一般特性,提出利用fpga的嵌入式软核niosⅱ处理器在嵌入式操作系统μc/os-ⅱ上实现chirp的方法,即通过niosⅱ处理器根据chirp函数在频域上频率的跳变情况实时改变输出dds(直接数字合成序列)模块的频率步进控制字的办法,控制dds模块的频率输出,实现chirp函数所要达到的扫频输出性的目的。通过在niosⅱide编程环境中的console窗口观察,该设计能很好地实现chirp函数功能。
l 系统总体设计
图1为基于fpga的射电宇宙信号处理框图。
该设计是基于sopc技术设计的chirp函数信号发生器,该系统把微处理器模块和dds模块集成到单片fpga芯片内部,通过在嵌入式操作系统μc/os-ⅱ编写的程序,实时控制微处理器对dds的控制字输出,dds模块根据频率控制字的不同,输出不同的数字化正弦波。使之符合chirp函数的时变频率特征。chirp函数根据输出频率的递变规律一般分为两种:线性chirp函数和非线性chirp函数,以下是两种chirp函数在频域上的表现图如图2,图3所示。
从图2,图3可以看出chirp函数的频率输出与时间的f-t关系可以总结为:
(1)对于线性chirp函数
在连续域时间域内有关系式:
式中:k为常数;f0为初始输出频率;t为连续时间。
在离散时间域有关系式:
式中:k为常数;f0为初始输出频率;n为采样点。
(2)对于非线性chirp函数
在连续域时间域内有关系式:
式中:f为非线性函数;f0为初始输出频率;t为连续时间。
在离散时间域有关系式:
式中:f为非线性函数;f0为初始输出频率;n为采样点。
因此该chirp信号源的功能是:在niosⅱ中建立的微控制器;使用嵌入式操作系统μc/os-ⅱ建立对dds频率控制字输出实时改变的任务;根据线性和非线性chirp函数的特点控制字的输出根据需要线性或者非线性输出,并且在此设计中将该任务的优先级设置为最高。利用vhdl语言编写dds模块,首先根据matlab计算出需要的正弦数据,然后将这些数据存储于rom中供dds模块调用,并且通过微控制器中的jtag_uart传输模块在编程监视窗口实时观测当前输入频率的大小,具体结构如图4所示。
2 dds模块的设计
数字式频率合成器(dds)模块的工作原理是:将o~2π的正弦函数值分为n份,将各点的幅度值存入rom中,再用一个相位累加器每次累加相位值ωt,得到当前的相位值,通过查找rom得到当前的幅度值。其系统框如图5所示。
dds的几个主要参数是:系统时钟频率,频率控制字长,频率分辨率,rom单元数,rom字长。该设计的dds是32位的,时钟频率为50 mhz,频率控制字长为32位,rom单元数为2的11次方,rom字长为16位。而且有如下关系:
频率分辨率=系统时钟频率/232;
频率控制字(ftw)=f×232/t;
其中:f为要合成的频率;t为系统时钟。
dds的工作过程为:每次时钟的上升沿到来时,相位累加器(32位)中的值累加上频率寄存器(32位)中的值,再利用累加器的高11位作为地址进行rom查表,输出相应的幅值数字信号。
如果是扫频工作,只需要根据一定的规律实时修改频率控制字,就可以达到扫频输出的目的。但是该系统的性能受到以下两个方面的制约:rom单元数和rom数值的有限字长。由于rom大小的限制,rom的单元地址位数一般都远小于相位累加器的位数,这样只能取相位累加器的高位作为rom的地址进行查询,这就相当于引入了一个相位误差。而且rom的有限字长,不能精确表示幅度值,相当于引入了一个量化误差。因此应根据系统的性能要求选择合理的rom。为了解决rom的受限问题,该设计采用rom压缩技术。因为正弦函数存在对称和反转特性,即:
对于o~2兀的幅度值,可以只存储o~π/2的部分。这样原本需要的2的11次方个单元的rom现在只需要2的9次方个单元的rom就可以实现。在matiab中产生16位512点的o~π/2正弦波数据的命令如下:
将y数据依次存入altera公司提供的megawiz-ard宏单元实现的rom中即可。
3 嵌入式微处理器的实现
嵌入式微处理器的设计包括3个部分:利用sopcbuilder定制的软核cpu,在quartusⅱ环境下设计的电路和niosⅱ编程。
本设计的软核cpu采用niosⅱ/s标准型内核,带有16 kb的cache;集成了外部的flash和sdram控制器用于保存程序数据;jtag_hart电脑开发板传输接口用于建立良好的用户交互接口使用户能在console界面上观察程序运行情况;两个位宽分别为8位和3位的输出口作为输出dds模块的控制字;定时器用于产生cpu系统时钟;lcd控制接口用于在lcd显示一些需要的信息。
niosⅱ的编程主要是基于嵌入式操作系统μc/os-ⅱ,μc/os-ⅱ是一个完整的、可移植、固化和剪裁的占先式实时多任务核(kernel)。从1992年发布至今,μc/os-ⅱ已经有了上百个的商业应用案例,在40多种处理器上成功移植。其中altera提供了对μco/os-ⅱ的完整支持,非常容易使用。
μc/os-ⅱ提供以下系统服务:任务管理(taskmanagement);事件标志(event flag);消息传递(message passing);内存管理(memory management);信号量(semaphores);时间管理(time management)。在应用程序中,用户可以方便地使用这些系统调用实现目标功能。
在该设计中建立一个主函数和两个任务函数,主函数的功能:调用系统任务初始化函数ostaskcreateext()初始化两个任务函数:调用系统开始函数osstart()启动系统开始工作。
任务1:实时的改变dds控制字的输出,并且保持一段时间,在遍历完所有的需要频率以后,延迟调用系统延迟函数ostimedlyhmsm(),延迟63 s将该使用权交付给任务2。
任务2:为了保证该系统以后能有功能扩展,建立一个任务,其仅仅是通过函jtag_uart接口使用函数printf(),向电脑发送一个任务2已经开始工作的提示信息,如果以后需要扩展功能则只需修改任务2即可。程序的具体流程图如图6所示。
在任务1中实时改变变量i的值步进为1,通过定义的chirp函数关于时间和输出频率控制字之间的关系函数function(),计算得到此时的频率控制字f,并且将f的值通过api函数iowr_altera_avalon_pio_data()从i/o端口输出以控制dds,然后延迟2 s使dds保持该输出频率一段时间,并且通过jtag_uart端口在console调试界面向用户提示当前的信号源的输出频率,程序如下:
图7为quartusⅱ中生成的嵌入式软核示意图。
4 结 语
该设计在21controll公司提供的v4.o fpga/sopc开发学习套件上面通过仿真验证,该套件的核心芯片为cycloneⅱ系列:ep2c20f484c8,其具有18 752个逻辑单元(le)和52个m4k ram块,能够很好地设计存储需要的数据,完全符合设计要求。通过调试程序在niosⅱide编程环境中的console窗口观察如图8所示。证明该程序能够很好的完成chirp函数的功能。

华为EMUI 11系统升级用户突破1亿
锂电池极片微观结构与电导率优化解析
科创板铂力特董事雷开贵介绍、履历信息
施耐德电气与阿里巴巴集团于杭州共同举办发布会,入驻1688
RV减速器也在传统针摆行星传动基础上演变发展
基于Chirp函数的Nios Ⅱ嵌入式实现
华为畅享8e评测 值不值得买
浅谈联发科在智能电视芯片的布局与创新
Vishay赞助的同济大学电动方程式车队勇夺冠军,支持培养下一代汽车设计师
关于FLIR ONE和FLIR ONE Pro的异同点
诺基亚将通过其创新的5G虚拟测试环境来推动5G的部署
气体检测仪应该有怎样维护和保养才是正确的
电磁兼容EMC设计的堆叠方式
关于直列6缸直喷式汽油机性能分析
Boost基本电路工作原理及参数设计
什么是互感器
研究人员最新研发出可持续的3D打印超级磁铁
MEMS动态测试系统的组成和关键测量技术的研究
iPhone8:外观设计和sony一样,可能吗?
FISCHER推出可穿戴设计即插即用连接技术