原创 【原创】NIOS II自定义指令设计之实例篇

2009-1-6 17:52 8686 11 16 分类: FPGA/CPLD

【原创】SOPC用户自定义指令设计之软件篇  和【原创】SOPC用户自定义指令设计之硬件篇 中分别讲述了自定义指令在软件和硬件设计中的规范,在本文中,将给出一个具体的实例,以具体说明自定义指令的强大功能。






l         自定义指令添加


在当前工程文件夹下建立ip文件夹(当前工程目录下的ip文件夹是SOPCBuilderip默认搜索路径之一),将自定义指令设计文件放入该ip文件夹下。


打开SOPCBuilder,添加Nios II Processor,点击Custom Instructions,在点击左下角的import…,弹出component editor窗口。


点击看大图


component editor中选择HDL Files标签,点击Add…,选择自定义指令设计文件目录,添加文件。选择Synth的复选框,因为这里不进行仿真,不选Sim下面的复选框,选择CRC_Custom_Instruction.v为顶层文件。


点击看大图


选择Signals标签,将所有接口指定为nios_custom_instruction_slave_0接口,在默认情况下,clkresetclock_reset接口,必须将其改为nios_custom_instruction_slave_0,否则在添加指令时会将该扩展自定义可变多周期指令认成组合逻辑指令,在SOPC generate时会出错。


点击看大图


选择Intefaces接口,点击remove intefaces with no signal删除多余的clock_reset接口,由于该指令只需要一个输入变量,将Operand设置为1,该指令为可变周期指令,将clock cycles设置成0


点击看大图


选择Component Wizard标签,填写如下信息,在Parameters中会显示自定义指令中使用的参数,如果勾选Editable,则可以在添加指令是设置这些参数的值。


点击看大图


点击Finish…完成指令的添加,此时会在自定义指令设计文件夹下生成文件CRC_Custom_Instruction_hw.tcl,该文件包含了SOPCBuilder所需的该自定义指令的所有信息。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


l         自定义指令集成进Nios II处理器


重新打开添加的CPU,选择Custom Instructions,此时可以看见在左边栏中出现刚才添加的自定义指令CRC_Custom_Instruction


点击看大图


选择CRC_Custom_Instruction,点击Add…,在右边栏出现添加的自定义指令,双击name改名为CRCclock cycles显示为Variable,表明该指令为可变周期指令,N Port显示为N[2:0],表明该指令为扩展指令,用3bit来指定指令执行什么功能,Opcode Extension表明该指令所使用的指令序号(分别用二进制和十进制加以显示),软件调用时就是指令序号来选择具体实现哪条指令,硬件篇曾提到Nios II支持256个自定义指令,这条扩展指令有8个不同功能,因此占用了0~7的序号。点击Finish,完成指令的集成。


点击看大图


集成完后,在SOPCBuilder面板中单独列出该指令,提示需要为指令指令clk,我们将其指定为与CPU相同的clk,此时指令在面板中消失,已经集成进了CPU


       为了测试该指令,我们建立如下SOPC系统。


点击看大图


l         软件调用


建立基于上述硬件系统的软件工程,在软件中分别用自定义指令进行CRC运算以及用纯软件进行CRC运算,比较两个所需的时间。运行结果如下:


+-----------------------------------------------------------+


| Comparison between software and custom instruction CRC32  |


+-----------------------------------------------------------+


 


 


System specification


--------------------


System clock speed = 50.0 MHz


Number of buffer locations = 8


Size of each buffer = 256 bytes


 


 


Initializing all of the buffers with pseudo-random data


-------------------------------------------------------


Initialization completed


 


 


Running the software CRC


------------------------


Completed


 


 


Running the optimized software CRC


----------------------------------


Completed


 


 


Running the custom instruction CRC


----------------------------------


Completed


 


 


Validating the CRC results from all implementations


----------------------------------------------------


All CRC implementations produced the same results


 


 


Processing time for each implementation


---------------------------------------


Software CRC = 22.93 ms


Optimized software CRC = 15.01 ms


Custom instruction CRC = 0.35 ms


 


 


Processing throughput for each implementation


---------------------------------------------


Software CRC = 0.71 Mbps


Optimized software CRC = 1.09 Mbps


Custom instruction CRC = 47.09 Mbps


 


 


Speedup ratio


-------------


Custom instruction CRC vs software CRC = 65.9


Custom instruction CRC vs optimized software CRC = 43.1


Optimized software CRC vs software CRC= 1.5


 


结果显示自定义指令运行速度是纯软件的65.9倍,是优化后软件的43.1倍,体现出了自定义指令明显的优势。






下面是该自定义指令的源代码


https://static.assets-stash.eet-china.com/album/old-resources/2009/1/6/be2d1c73-280d-4856-91ef-b0aadc583179.rar

文章评论6条评论)

登录后参与讨论

用户377235 2011-12-26 15:24

谢谢,正在学习中。

用户1402774 2009-9-5 12:41

行啦,7.2要添加上自定义指令后,再关了SOPC重新启动一下,generate出来了。好用。 altera knowledge database里有的,但是实在是不好找啊。

用户1402774 2009-8-31 21:07

谢谢博主共享。 我用的是quartus II 7.2,用组合逻辑的模板创建了个异或指令。可是一添加之后,SOPC就报错。我完全按照博主的说明设置的,报错说,不能确定数据宽度。是不是7.2有BUG啊

用户214950 2009-8-18 11:00

不错,正要用,谢谢

用户1382812 2009-7-21 14:58

谢谢共享

用户1439727 2009-4-21 21:32

学习了,谢谢共享!
相关推荐阅读
用户1332143 2009-08-16 21:47
时序电路亚稳态分析
这篇文章是我对电子设计中,亚稳态问题的一种分析和总结。文章通过对数字电路中器件的工作机制的介绍,引出亚稳态问题的发生机制。并通过对亚稳态问题发生机制的探讨,用以得到一种能够清楚地,有的放矢地解决亚稳态...
用户1332143 2009-08-16 10:52
【推荐】ADF4350配置软件下载
p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">  随着现代半导体工艺的不断发展, 几十纳米级的CMOS工艺给数字电路带来了很大的恩惠, 但对模拟...
用户1332143 2009-08-14 12:47
【原创】基于NiosII及FT245BM的USB接口设计
以前做的一个项目,FPGA接收AD采集数据后,通过串口发送回PC机,由于串口传输速率较低,对于实时性要求较高的场合不太适用,因此站长选用FT245BM芯片来实现USB接口传输,本文主要讲解FT245B...
用户1332143 2009-08-13 14:56
【原创】MAXII:UFM中晶振的使用
MAXII系列CPLD中带有UFM模块,本文主要讲解UFM中晶振的使用,具体内容请点击下面链接MAXII:UFM中晶振的使用...
用户1332143 2009-03-01 21:53
【原创】如何使用FPGA进行信号调制
       最近要做一个通信收发系统项目,以前对收发器的射频前段关注的比较多,而对基带部分的信号处理一直没有仔细研究。因此,正好借这个项目,熟悉整个基带部分的信号处理流程。       基带部分主要...
用户1332143 2009-02-27 21:56
寒假回来——FPGA市场评论
寒假在家里电脑不能上网,好久没来更新自己的博客了,首先感谢大家对我博客的支持。回来后马上开始了一个863项目,一直没有时间来写博客,今天总算有时间,上来看看。回来这段时间关注了下FPGA的相关新闻,发...
EE直播间
更多
我要评论
6
11
关闭 站长推荐上一条 /3 下一条