NIOS II自定义指令设计之实例篇

NIOS II自定义指令设计之实例篇,第1张

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


l         自定义指令添加

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

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

NIOS II自定义指令设计之实例篇,第2张

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

NIOS II自定义指令设计之实例篇,第3张

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

NIOS II自定义指令设计之实例篇,第4张

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

NIOS II自定义指令设计之实例篇,第5张

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

NIOS II自定义指令设计之实例篇,第6张

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

 


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

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

NIOS II自定义指令设计之实例篇,第7张

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

NIOS II自定义指令设计之实例篇,第8张

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

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

NIOS II自定义指令设计之实例篇,第9张

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://outofmemory.cn/dianzi/2521962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存