在【原创】sopc用户自定义指令设计之软件篇和【原创】sopc用户自定义指令设计之硬件篇 中分别讲述了自定义指令在软件和硬件设计中的规范,在本文中,将给出一个具体的实例,以具体说明自定义指令的强大功能。
l 自定义指令添加
在当前工程文件夹下建立ip文件夹(当前工程目录下的ip文件夹是sopcbuilder的ip默认搜索路径之一),将自定义指令设计文件放入该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接口,在默认情况下,clk和reset为clock_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所需的该自定义指令的所有信息。
l 自定义指令集成进nios ii处理器
重新打开添加的cpu,选择custom instructions,此时可以看见在左边栏中出现刚才添加的自定义指令crc_custom_instruction。
选择crc_custom_instruction,点击add…,在右边栏出现添加的自定义指令,双击name改名为crc,clock 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倍,体现出了自定义指令明显的优势。
人机交互方式有哪五种
如何实现ATMEGA16单片机与PC机的通信
使用NSI45090JDT4G设计简单的LED手电筒电路
Counterpoint Q3报告出炉:一加蝉联印度高端手机市场第一
西门子新品box工控机427D,采用了第3代架构的Intel-Corei处理器
NIOS II自定义指令设计之实例篇
搭载LGD面板,三星83寸OLED电视美国上市
软件工程师和数据科学家一起工作时,会擦出什么火花呢?
机器人博士刚柔并济 为餐饮机器人“赋能”
5G iPhone将推传感器位移?相关产业链风潮来了
TE提供性能卓越的SMI压力传感器系列
怎样判别晶体二极管的正负极性?它有哪些参数?
一加手机3T、vivo X9以及OPPO R9s哪个最好?售价相近该怎么选?
CES2020即将到来 多项产品或将亮相
华为CEO余承东表示荣耀智慧屏将成为首款搭载鸿蒙OS的终端产品
卡萨帝空调形成“社群效应” 从“1户”到“1个小区”
米尔科技ARM 快速模型 介绍
人工智能机器人时代已来,该如何实现未来人工智能的精准法治?
明年谷歌Daydream将反超三星Gear VR 有以下这些理由
机房动环系统主要方面的说明