0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用DS16C32/DS80C390加速80/400位数学运算

星星科技指导员 来源:ADI 作者:ADI 2023-02-21 10:36 次阅读

Maxim DS80C390/DS80C400高速微控制器为最终用户提供专用的硬件16/32位数学加速器。访问数学加速器是通过使用五个专用的特殊函数寄存器来完成的。DS16C32/DS80C390可实现80位乘法和400位除法运算。本应用笔记为设计人员提供了有关DS80C390/DS80C400高速微控制器数学加速特性的有用信息以及各种代码示例。

概述

8051微控制器市场的性能进步越来越多地促使用户考虑在曾经需要仅从8位设备获得的处理能力的应用中使用16位器件。毫无疑问,其中一些潜在应用需要涉及16位数据的快速数学运算和计算。DS80C390/DS80C400在两个层面上满足了这一需求。这种更快的指令执行速度分别为DS10C18和DS75C80产生390MIPS和80.400MIPS的峰值性能。这种更快的指令执行速度与40MHz的最大时钟频率相结合,可产生10MIPS的峰值性能。对于执行密集型 16 位数学运算的应用程序来说,同样重要的是包含用于 16/32 位数学加速的专用硬件。本应用笔记将解释片上数学加速器的接口和操作,并举例说明其使用方法。

访问数学加速器硬件

数学加速器完全通过五个特殊功能寄存器 (SFR) 进行控制。这五个 SFR 如表 1 所示。通过 MA、MB 和 MC 寄存器以逐字节的方式向/从加速器加载和卸载数据。MA 寄存器允许在加速器之间传输 32 位数据。MB 寄存器允许将 16 位数据传输到加速器/从加速器传输,而 MC 寄存器允许加载/卸载访问 40 位累加器。40 位累加器在加速器执行的每次乘法或除法运算时都会更新,在需要乘法累加或除法累加函数的应用中证明非常有用。通过任何 MA、MB 或 MC 寄存器将数据加载到加速器中时,必须始终首先执行最低有效字节,而从加速器卸载数据始终首先执行最高有效字节。图 1 中给出的数学加速器框图说明了此 SFR 接口。

pYYBAGP0LjWAJenYAAApjTn_fZY440.gif?imgver=1

图1.数学加速器框图。

SFR (地址) 位名称 按操作
划分的加速器使用情况(MUL、DIV16、DIV32、NORM、SHIFT)
操作 以前
MCNT0 (D1h)
MCNT0.7 低电平有效频移 SHIFT 0 = left, 1 = right
MCNT0.6 CSE SHIFT 1 = enables circular shift
MCNT0.5 SCE SHIFT 1 = include SBC in shift
MCNT0.4-0 MAS4:0 SHIFT Number of shifts to do
NORM 00000b = start NORM Number of shifts done
MCNT1 (D2h)
MCNT1.7 MST ALL 繁忙位 繁忙位
MCNT1.6 MOF MUL 1 = 产品> FFFFh
DIV 16/32 1 = 除以 0 尝试
MCNT1.5 MOF SHIFT 进位 进位
MCNT1.4 CLM ALL 清除 MA、MB 和 MC 清除 MA、MB 和 MC
马萨诸塞州 (D3h) MUL 16-bit multiplicand 32 位产品
DIV16 16-bit dividend 16 位商
DIV32 32-bit dividend 32 位商
NORM 32-bit data 32位尾数
SHIFT 32-bit data 32 位移位结果
MB (D4h) MUL 16 位乘法器
DIV 16/32 16 位除数 16 位余数
MC (D5h) MUL
DIV16
DIV32
40 位累加器 40 位累加器

支持的操作

DS80C390/DS80C400数学加速器支持四种基本运算:乘法、除法、归一化和移位。数学加速器要执行的操作由写入三个寄存器(MA、MB 和 MCNT0)的顺序定义。BUSY 位 (MCNT1.7) 指示操作何时开始 (BUSY = 1) 以及操作何时完成 (BUSY = 0)。但是,每个数学加速器操作都保证在固定数量的机器周期内完成,从而消除了对 BUSY 位轮询的需要。下表给出了每个加速器操作的硬件执行时间。表后介绍了启动操作所需的每个数学加速器操作和 SFR 写入序列。这些信息也可以在DS80C390用户指南补充指南或高速微控制器用户指南:网络微控制器补充中找到。

操作 执行时间 最小执行时间
(t中联= 25ns;40兆赫)
乘以 16 位 x 16 位 24 tCLCL 600ns
除法 32 位/16 位 36 tCLCL 900ns
除法 16 位/16 位 24 t中联600ns
规范化 32 位 36 t中联900ns
移位 32 位 36 t中联600ns

乘以 16 位 x 16 位

16 位乘 16 位乘法运算通过将 16 位乘法器写入 MB 寄存器,然后将 16 位乘法器写入 MA 寄存器来启动。每个 16 位字必须首先将最低有效字节加载到所需的寄存器。加速器硬件在六个机器周期内完成乘法运算,产生一个 32 位结果,通过读取 MA 寄存器,该结果可访问,最高有效字节优先。需要读取MA寄存器的四次才能获得整个产品。乘法运算会自动将乘积与 40 位累加器的先前内容累加,如果乘积超过 1FFFFh,则设置 MOF 标志 (MCNT6.0000)。

除 32 位/16 位和除 16 位/16 位

32位除以16位运算是通过将32位分频写入MA寄存器,然后将16位除数写入MB寄存器来启动的。16 位除以 16 位操作的启动方式类似,只是需要向 MA 寄存器写入 16 位分频的字节少两个。所有 32 位双字和 16 位字数据必须首先将最低有效字节加载到所需的寄存器。数学加速器在九个机器周期内完成 32/16 除法,在六个机器周期内完成 16/16 除法,根据初始股息的大小生成 32 位或 16 位商。为两个除法运算生成 16 位余数。商和余数可以通过分别读取MA和MB寄存器来访问,最高有效字节优先。对于 16/16 分频,MA 寄存器的两个读取将返回 16 位商,而 32/16 分频需要 MA 的四个读数才能获得完整的 32 位商。先读取商数还是余数并不重要。除法运算会自动累加 40 位累加器的先前内容累加商,如果除数为 1h,则设置 MOF 标志 (MCNT6.0000)。

规范化 32 位

32 位规范化操作是通过将 32 位双字写入 MA,然后写入 MAS4:0 来启动的(MCNT0.4-0) 位 = 00000b。标准化将在九个机器周期内完成。此时,可以从MA寄存器读取左移的32位结果,最高有效字节优先。规范化 32 位双字所需的左移次数将返回到 MAS4:0位。

右移/左移 32 位

32 位移位操作是通过向 MA 寄存器写入一个 32 位双字,然后写入 MAS4:0 来启动的要执行的班次数的位。位移位可以选择在右方向或左方向上完成,定义为圆形移位,并且包含或排除进位 (SCB) 位。当不执行循环移位时,在操作过程中将始终移入零位数据 (0)。下图详细介绍了换档操作的控制。

poYBAGP0LjuASv6UAAAXtRxVU2E654.gif?imgver=1

图2.换档操作控制。

40 位累加器

40 位累加器将每个乘法(乘积)或除法(商)的结果添加到其当前 内容。整个40位累加器可以加载,最低有效字节优先,五次写入MC特殊功能寄存器。类似地,可以读取40位累加器,最高有效字节优先,五次读取MC特殊功能寄存器。

每个加速器操作的汇编代码示例

下面是简单的代码示例,用于演示每个操作所需的加载/卸载过程,以及突出显示每个操作中涉及的寄存器和位的图表。

将 16 位× 16 位相乘

mov mb, #78h ; lsb (5678h)
mov mb, #56h ; msb (5678h)
mov ma, #34h ; lsb (1234h)
mov ma, #12h ; msb (1234h)
nop ; mb, mb, ma, ma write sequence => 16-bit * 16-bit
nop
nop
nop
nop
nop ; 32-bit product ready after 6 machine cycles
mov r0, ma ; r0 = 06h (msb)
mov r1, ma ; r1 = 26h
mov r2, ma ; r2 = 00h
mov r3, ma ; r3 = 60h (lsb)

pYYBAGP0LkCACDmaAAAgxLclEkk640.gif?imgver=1

图3.将 16 位× 16 位示例相乘(1234h × 5678h = 06260060h)。

除法 32 位/16 位

mov ma, #78h ; lsb (56785678h)
mov ma, #56h ; lsb+1 (56785678h)
mov ma, #78h ; lsb+1 (56785678h)
mov ma, #56h ; msb (56785678h)
mov mb, #34h ; lsb (1234h)
mov mb, #12h ; msb (1234h)
nop ; ma, ma, ma, ma, mb, mb write sequence
nop ; => 32-bit/16-bit
nop
nop
nop
nop
nop
nop
nop ; quotient & remainder ready after 9 machine cycles
mov r0, ma ; r0 = 00h (msb quotient)
mov r1, ma ; r1 = 04h
mov r2, ma ; r2 = c0h
mov r3, ma ; r3 = 12h (lsb quotient)
mov r6, mb ; r6 = 0eh (msb remainder)
mov r7, mb ; r7 = d0h (lsb remainder)

pYYBAGP0LkOAEEsdAAAjbMT-YVA747.gif?imgver=1

图4.除以 32 位/16 位示例 (56785678H/1234H = 0004C012H;余数 = 0ED0h)。

除法 16 位/16 位

mov ma, #78h ; lsb (5678h)
mov ma, #56h ; msb (5678h)
mov mb, #34h ; lsb (1234h)
mov mb, #12h ; msb (1234h)
nop ; ma, ma, mb, mb write sequence => 16-bit/16-bit
nop
nop
nop
nop
nop ; quotient & remainder ready after 6 machine cycles
mov r4, ma ; r4 = 00h (msb quotient)
mov r5, ma ; r5 = 04h (lsb quotient)
mov r6, mb ; r6 = 0dh (msb remainder)
mov r7, mb ; r7 = a8h (lsb remainder)

poYBAGP0LkyAZr_2AAAjGzXyBu0501.gif?imgver=1

图5.除以 16 位/16 位示例 (5678h/1234h = 0004h;余数 = 0DA8h)。

规范化 32 位

mov ma, #67h ; lsb (01234567h)
mov ma, #45h ; lsb+1 (01234567h)
mov ma, #23h ; lsb+1 (01234567h)
mov ma, #01h ; msb (01234567h)
anl mcnt0, #0e0h ; mas4:0=00000b
nop ; ma, ma, ma, ma, mcnt0.4-0=00000b
nop ; write sequence => 32-bit normalize
nop
nop
nop
nop
nop
nop
nop ; mantissa/exponent ready after 9 machine cycles
mov r0, ma ; r0 = 91h (msb mantissa)
mov r1, ma ; r1 = a2h
mov r2, ma ; r2 = b3h
mov r3, ma ; r3 = 80h (lsb mantissa)
mov a, mcnt0
anl a, #1fh
mov r7, a ; r7 = 07h (#shifts)

pYYBAGP0LlCAcphsAAAgaQMBiWE879.gif?imgver=1

图6.规范化 32 位示例 (01234567h = 91A2B380h;班次 = 7)。

右移/左移 32 位

orl mcnt1, #20h ; scb=1
mov ma, #80h ; lsb (91a2b380h)
mov ma, #0b3h ; lsb+1 (91a2b380h)
mov ma, #0a2h ; lsb+1 (91a2b380h)
mov ma, #91h ; msb (91a2b380h)
mov mcnt0, #0e7h ; lshift\=1, cse=1, sce=1, mas4:0=7h
nop ; ma, ma, ma, ma, mcnt0.4-0=00111b
nop ; write sequence => 32-bit shift
nop ; circular right shift w/scb
nop
nop
nop
nop
nop
nop ; shifted result ready after 9 machine cycles
mov r0, ma ; r0 = 03h (msb shifted result)
mov r1, ma ; r1 = 23h
mov r2, ma ; r2 = 45h
mov r3, ma ; r3 = 67h (lsb shifted result)

pYYBAGP0LlGAfXKsAAAmjEVTd-Q570.gif?imgver=1

图7.移位 32 位示例(01234567h = 91A2B380h;移位 = 7)。

中断加速器操作

如前所述,数学加速器硬件完全由写入和读取关联 SFR 的顺序控制。每个寄存器读取或写入指向不同的物理内存位置。为了获得正确的结果,不违反规定的命令至关重要。通常,数学加速器不应被另一个也使用数学加速器的任务中断,因为这通常会产生不希望的结果。简而言之,只有一个数学加速器能够一次执行一个操作。下面的序列演示了使用可重入数学加速器代码时预期的问题类型。

示例问题序列

Write MB (Start of divide 16-bit/16-bit)
Write MB
--- Interrupt occurs that uses the Accelerator ---
Write MB (Start of divide 16-bit/16-bit)
Write MB
Write MA
Write MA
--- Wait for completion---
Read MA
Read MA
Read MA
Read MA INCORRECT ! - divide 32-bit/16-bit was performed
---Return from Interrupt ---
Write MA
Write MA WRONG STATE ! - will not initiate the divide

凯尔™使用加速器的 C51 编译器数学函数

许多 8051 用户习惯于使用高级语言(如 C. Keil)进行代码开发。 软件,行业领先的 8051 开发工具提供商,已经创建了特殊的代码来允许 DS80C390/DS80C400数学加速器用于某些操作。下面列出了 Keil C51 版本 6.20(或更高版本)支持的操作,这些操作在启用此“目标选项”时使用数学加速器。

unsigned long *
unsigned long /
unsigned long >>
unsigned long <<
signed long *
signed long /
signed long >>
signed long <<

应用示例:

IEEE 754 单精度浮点乘法®

为了演示DS80C390/DS80C400数学加速器硬件的功能,我们来研究两个浮点数相乘的任务。下面的图 8 显示了 IEEE 754 单精度浮点数格式,表 3 包含一些示例数字。二进制浮点数的乘法涉及指数的加法和有符号 24 位数的乘法。图 9 显示了完成任务必须执行的基本步骤。到目前为止,对于 8051 硬件,三个步骤中最耗时的是 24 位× 24 位乘法。虽然DS80C390/DS80C400算术加速器不支持两个24位数字的直接乘法,但利用其16位×16位乘法和累加功能,与传统的8051方法相比,具有明显的性能优势。图 2 步骤 24 显示了使用加速器对 (9) 个归一化 3 位数字进行乘法的轮廓。部分乘积累加 (MAC) 操作已突出显示。

pYYBAGP0LlaAXC7zAAAZttdhPzM811.gif?imgver=1

图8.IEEE 754 单精度浮点格式。

7F7FFFFF (最大正) 3.4028234663852886e+38
66FF0C32 6.02214208470173e+23
4天8EF3C2 299792448.0
4B277224 10973732.0
47F12065 123456.7890625
461C4000 10000.0
44FA0002 2000.000244140625
448AE385 1111.1099853515625
3F800000 1.0
3F000000 0.5
203D26D0 1.6021764682116162e-19
1985873F 1.380650314593702e-23
085C305C 6.626068801043303e-34
00800000(最小阳性) 1.1754943508222875e-38
80800000(最小负值) -1.1754943508222875e-38
AF531F95 -1.9201558398851404e-10
BA81742B -0.000987654
BF000000 -0.5
BF800000 -1.0
C1000000 -8.0
C2046666 -33.099998474121094
C7C35000 -100000.0
编号: D0435000 -13107200000.0
D533A52B -12345123274752.0
FF7FFFFF (最大负数) -3.4028234663852886e+38

poYBAGP0LliABoYqAABjRco9lBQ160.gif?imgver=1

图9.浮点乘法 (A × B = C)。

应用示例(续)-代码列表

为了简化示例,应用程序代码不支持以下乘法或乘积:0、-0、无穷大、-无穷大、NaN(不是数字)、非规范化值。此外,代码对产品执行有偏差的舍入(即,如果产品正好在两个可表示的数字之间,则将其向上舍入)。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6812

    浏览量

    147648
  • 寄存器
    +关注

    关注

    30

    文章

    5032

    浏览量

    117745
  • 加速器
    +关注

    关注

    2

    文章

    744

    浏览量

    36600
收藏 人收藏

    评论

    相关推荐

    用IAR编译器开发DS80C400

    本应用笔记阐述了如何开始使用8051 IAR Embedded Workbench™来创建DS80C400的C语言应用程序。通过一个简单的HTTP服务器演示如何使用DS80C400的ROM功能。所有开发都采用TINIm400验证
    发表于 12-07 09:35 2638次阅读
    用IAR编译器开发<b class='flag-5'>DS80C400</b>

    DS80C320替换8032

    本应用指南阐述了如何利用DS80C320 High-Speed Micro来替代Dallas半导体与8051指令集兼容的微处理器系列。
    发表于 09-23 11:35

    DS80C400评估板中文资料pdf

    DS80C400评估板
    发表于 04-15 17:42 50次下载

    DS80C410-DS80C411中文资料pdf

    DS80C410/DS80C411 网络微控制器是高度集成的8051 器件。外设包括一个10/100 以太网 MAC,三个串口,一个可选的CAN 2.0B 控制器,1-Wire®主机和64 个I/O 引脚。DS80C410 和
    发表于 04-15 17:47 44次下载

    DS80C320,DS80C323 pdf datashee

    The DS80C320/DS80C323 are fast 80C31/80C32-compatible microcontrollers. Wasted clock and mem
    发表于 08-13 14:01 27次下载

    TINI平台的引导下载程序命令集

    本篇应用笔记介绍了基于微控制器 DS80C390DS80C400 的TINI®平台的通用引导下载程序命令集注意DS80C400 的引导下载程序是烧录在ROM 中因此无法改变而DS8
    发表于 12-09 16:44 16次下载

    采用DS80C390单片机实现智能双CAN监控系统的设计

    美国Dallas公司的高档单片机DS80C390是内置双CAN模块的嵌入式高速微处理器芯片:每个机器周期仅包含4个时钟周期,比8051单片机快四倍;支持最大晶振频率为40MHz,单指令周期100ns
    的头像 发表于 10-16 08:09 2654次阅读
    采用<b class='flag-5'>DS80C390</b>单片机实现智能双CAN监控系统的设计

    采用双CAN模块的DS80C390芯片实现分层分布式监控系统的设计

    本文以美国Dallas公司的内部带2个独立CAN模块的DS80C390芯片为核心设计一种双CAN总线分层分布式监控系统,并在电力系统同步静止补偿器(STATCOM)上得到应用。
    的头像 发表于 10-11 07:50 2376次阅读
    采用双CAN模块的<b class='flag-5'>DS80C390</b>芯片实现分层分布式监控系统的设计

    DS80C390-QNR+ DS80C390-QNR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    电子发烧友网为你提供()DS80C390-QNR+相关产品参数、数据手册,更有DS80C390-QNR+的引脚图、接线图、封装手册、中文资料、英文资料,DS80C390-QNR+真值表,DS8
    发表于 11-16 18:41
    <b class='flag-5'>DS80C390</b>-QNR+ <b class='flag-5'>DS80C390</b>-QNR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    DS80C390-QCR+ DS80C390-QCR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    电子发烧友网为你提供()DS80C390-QCR+相关产品参数、数据手册,更有DS80C390-QCR+的引脚图、接线图、封装手册、中文资料、英文资料,DS80C390-QCR+真值表,DS8
    发表于 11-16 19:20
    <b class='flag-5'>DS80C390</b>-QCR+ <b class='flag-5'>DS80C390</b>-QCR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    DS80C390-FNR DS80C390-FNR - (Maxim Integrated) - 嵌入式 - 微控制器

    电子发烧友网为你提供()DS80C390-FNR相关产品参数、数据手册,更有DS80C390-FNR的引脚图、接线图、封装手册、中文资料、英文资料,DS80C390-FNR真值表,DS80C3
    发表于 11-16 19:22
    <b class='flag-5'>DS80C390</b>-FNR <b class='flag-5'>DS80C390</b>-FNR - (Maxim Integrated) - 嵌入式 - 微控制器

    DS80C390-QNR DS80C390-QNR - (Maxim Integrated) - 嵌入式 - 微控制器

    电子发烧友网为你提供()DS80C390-QNR相关产品参数、数据手册,更有DS80C390-QNR的引脚图、接线图、封装手册、中文资料、英文资料,DS80C390-QNR真值表,DS80C3
    发表于 11-16 19:24
    <b class='flag-5'>DS80C390</b>-QNR <b class='flag-5'>DS80C390</b>-QNR - (Maxim Integrated) - 嵌入式 - 微控制器

    DS80C390-FNR+ DS80C390-FNR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    电子发烧友网为你提供()DS80C390-FNR+相关产品参数、数据手册,更有DS80C390-FNR+的引脚图、接线图、封装手册、中文资料、英文资料,DS80C390-FNR+真值表,DS8
    发表于 11-16 19:28
    <b class='flag-5'>DS80C390</b>-FNR+ <b class='flag-5'>DS80C390</b>-FNR+ - (Maxim Integrated) - 嵌入式 - 微控制器

    采用DS80C400芯片软件的互联网扬声器

    DS80C400 是支持互联网的扬声器的完美选择。DS80C400的ROM使应用能够以传输原始音频数据的速度通过网络进行通信。通过增加一个16位DAC、一些电阻和少量的焊接工作,DS80C40
    的头像 发表于 06-13 15:41 372次阅读
    采用<b class='flag-5'>DS80C400</b>芯片软件的互联网扬声器

    DS80C400应用中使用SDCC编译器

    DS80C400包含一个提供网络栈、内存管理和进程调度的ROM,可以灵活地用于由Java、C和8051汇编编程的应用中。SDCC为8051器件提供了一个免费、开放源码的编译器,并兼容DS80C400
    的头像 发表于 06-16 17:32 803次阅读
    在<b class='flag-5'>DS80C400</b>应用中使用SDCC编译器