`
xiaoer_1982
  • 浏览: 1865318 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Vdsp(bf561)中的浮点运算(16):fract2x16类型

阅读更多

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文适用于

ADSP-BF561

Visual DSP++ 5.0 (update 6)

Vdsp dual processor simulate

欢迎转载,但请保留作者信息

由于BF561内部带有两个16位的MAC,因此它将可以在一个周期内进行两个fract16类型的运算。

mac

为适应这种特性,vdsp引入了一个称之为fract2x16的类型。它其实是定义为一个int类型的整数,但是其实际意义却是要用高低16位分别来表示两个fract16类型。

typedef int _raw32;

typedef _raw32 raw2x16;

typedef raw2x16 fract2x16;

要查看fract2x16类型的值还是只能通过data register窗口,手动将类型改为fract16,这样在寄存器的高16位和低16位就能分别看见这两个值了。

使用compose_fr2x16函数可以构造一个fr2x16数据:

The notation used to represent two fract16 values packed into a fract2x16 is {a,b}, where “a” is the fract16 packed into the high half, and “b” is the fract16 packed into the low half.

fract2x16 compose_fr2x16(fract16 f1, fract16 f2)

Takes two fract16 values, and returns a fract2x16 value.

直接看看它在头文件的定义:

/* Takes two fract16 values, and returns a fract2x16 value.

* Input: two fract16 values

* Returns: {_x,_y} */

#pragma inline

#pragma always_inline

static fract2x16 compose_fr2x16(fract16 _x, fract16 _y) {

return compose_2x16(_x,_y);

}

/* Composes a packed integer from two short inputs.

*/

#pragma inline

#pragma always_inline

static int compose_2x16(short __a, short __b) {

int __rval = __builtin_compose_2x16(__a, __b);

return __rval;

}

所以咱直接使用__builtin_compose_2x16得了。

result = __builtin_compose_2x16(0x7fff, 0x8000);

这行语句生成汇编就成了:

R0 = -32768 /* 2147450880 */;

R0.H = 32767 /* 2147450880 */;

[FP + 16] = R0;

从中可以很清楚看出组合的过程。

要从fr2x16得到高半部分可以用这个调用:

/* Takes a fract2x16 and returns the 'high half' fract16.

* Input: _x{a,b}

* Returns: a.

*/

#pragma inline

#pragma always_inline

static fract16 high_of_fr2x16(fract2x16 _x) {

return high_of_2x16(_x);

}

#pragma inline

#pragma always_inline

static _raw16 high_of_2x16(raw2x16 _x) {

return __builtin_extract_hi(_x);

}

取低半部分可以用下面的函数:

/* Takes a fract2x16 and returns the 'low half' fract16

* Input: _x{a,b}

* Returns: b

*/

#pragma inline

#pragma always_inline

static fract16 low_of_fr2x16(fract2x16 _x) {

return low_of_2x16(_x);

}

#pragma inline

#pragma always_inline

static _raw16 low_of_2x16(raw2x16 _x) {

return __builtin_extract_lo(_x);

}

1 参考资料

Vdsp(bf561)中的浮点运算(15):vdsp库的一个BUG(2009-8-19)

Vdsp(bf561)中的浮点运算(14):fract16除法(2009-8-18)

Vdsp(bf561)中的浮点运算(13):fract16乘法运算(2009-8-18)

Vdsp(bf561)中的浮点运算(12):fract16加减运算(2009-8-17)

Vdsp(bf561)中的浮点运算(11):fract16float的转换(2009-8-17)

Vdsp(bf561)中的浮点运算(10):fract16类型表示(2009-8-17)

Vdsp(bf561)中的浮点运算(9):long doublefloat的比较(2009-8-14)

Vdsp(bf561)中的浮点运算(8):float除法运算(2009-8-14)

Vdsp(bf561)中的浮点运算(7):float乘法运算(2009-8-13)

Vdsp(bf561)中的浮点运算(6):float加减运算(2009-8-13)

Vdsp(bf561)中的浮点运算(5):float类型表示总结(2009-8-12)

Vdsp(bf561)中的浮点运算(4):FLT_MAX(2009-8-12)

Vdsp(bf561)中的浮点运算(3):FLT_MIN(2008-12-19)

Vdsp(bf561)中的浮点运算(2):float的疑问(2008-12-18)

Vdsp(bf561)中的浮点运算(1):文档的说法(2008-12-16)

分享到:
评论

相关推荐

    u-boot-1.1.6 for vdsp(bf561)

    2. **存储器支持**:BF561支持NandFlash和NorFlash两种非易失性存储器。u-boot需要包含对应的驱动,以便能够读取和写入这些存储介质。这些驱动通常位于`drivers`目录下。 3. **串口通信**:该版本的u-boot支持通过...

    uclinux-2008r1到vdsp5(bf561)的移植记录_v0.1

    ### uclinux-2008r1-rc8到VDSP5 (bf561)的移植知识点 #### 1. 前言 - **目标**:本移植项目旨在将uclinux-2008r1-rc8内核从bf561处理器移植到VDSP5平台上。 - **原则**:遵循uCLinux移植的基本原则,确保移植后的...

    u-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录_v0.1

    ### u-boot-1.1.6-2008R1到VDSP5 (bf561) 的移植记录 #### 1.1 #if 在进行u-boot移植的过程中,遇到的第一个问题是关于`#if`预处理器指令的问题。具体来说,在`u-boot-1.1.6-2008R1\include\configs\bf561-ezkit.h`...

    编译器VDSP_v0.1

    #### 五、VDSP 4.5(BF561)中的CPLB - **LDF配置**: 配置LDF文件以支持CPLB。 - **缓存空间定义**: 定义要缓存的空间。 - ***_basiccrt.s**: 更新`*_basiccrt.s`文件以支持CPLB操作。 - **错误处理**: 处理可能出现...

    uboot_bf537_VDSP++5.0

    《uboot_bf537_VDSP++5.0:嵌入式开发的关键组件与实践》 uboot_bf537_VDSP++5.0是针对ADI公司的Blackfin(BF537)处理器设计的一个特定版本的U-Boot引导加载程序。U-Boot是一款广泛应用在嵌入式系统的开源启动加载...

    uboot_bf537_vdsp

    在描述中提到,UBOOT_BF537在这个环境下被编译,这表明用户可能遇到了与VDSP++工具链兼容性或者配置相关的问题。 然而,"这个文件有bug"指出UBOOT_BF537在原始状态下可能存在错误或缺陷,这可能涉及到代码逻辑、...

    vdsp查表法

    查表法的基本思想是预先计算一系列函数值并存储在一个数组中,当需要计算某个函数值时,直接从表中查找即可,避免了复杂的数学运算,从而大大提高了计算速度。 #### 三、vdsp中的C语言编程实践 本案例展示了如何在...

    uboot_bf537_VDSP5.0++

    这是在VDSP5.0++下面编译成功的uboot,支持的命令 base - print or set address offset bootm - boot application image from memory cmp - memory compare cp - memory copy crc32 - checksum calculation erase -...

    u-boot-1.1.6-2008R1-vdsp

    5. **编译与烧录**:配置交叉编译工具链,编译生成适合VDSP架构的u-boot二进制文件,然后通过JTAG或串口等手段将其烧录到BF561的存储器中。 6. **测试与调试**:运行u-boot并进行功能测试,如命令行交互、加载内核...

    Intro_to_VDSP_transcript

    **视觉数字信号处理(VDSP)简介** Visual DSP++ 是一款强大的开发环境,专为数字信号处理(DSP)应用设计,特别是在嵌入式系统中。它由 Analog Devices 公司提供,结合了图形化界面与高效的编译工具,使得开发者...

    rootfs for uclinux

    本文将深入探讨与uclinux-2.6(bf561)版本配合使用的根文件系统(rootfs)及其核心知识点,以及如何将ext2文件系统集成到VDSP(BF561)处理器中。 首先,根文件系统(rootfs)是Linux系统启动时必须的文件集合,它包含了...

    VDSP软件说明

    VDSP软件说明。对于visual dsp++软件的介绍,以及如何创建工程等的介绍

    如何在VDSP下生成和调用DSP库

    ### 如何在VDSP下生成和调用DSP库 #### 一、生成DSP库(*.dlb) 在本文中,我们将详细介绍如何在VisualDSP++环境下创建一个基于C语言的DSP库文件(*.dlb)。这个过程对于Blackfin处理器特别适用,同时也适用于其他ADI...

    uclinux-2.6 for vdsp4.5

    这是将uclinux-2.6 for bf561的内核移植到Visual DSP 4.5下的工程文件。由于csdn空间限制,删除了Documentation及doj,dlb等中间文件或者无关的内容,请先在http://blackfin.uclinux.org/下载2.6.19.3-ADI-2007R1.1-...

    Vdsp LDF文件格式详解

    ### ADI Blackfin 处理器 Vdsp LDF 文件格式详解 #### 一、概述 在ADI (Analog Devices Inc.) 的Blackfin系列处理器中,`.ldf`(Linker Description File)是一种非常重要的文件类型,它主要用于描述链接器如何...

    uboot1.60429.rar_uboot bf561

    本源码是uboot在bf537芯片上的移植,它是在vdsp++5.0环境下编译的,支持uboot绝大部分常用的命令,方便剪裁

    BDMA.zip_BDMA_VDSP_dma_字节内存

    标题中的“BDMA.zip_BDMA_VDSP_dma_字节内存”揭示了我们即将讨论的核心主题:BDMA(Block Direct Memory Access)技术,它与VDSP(Vector Digital Signal Processor)相关,涉及DMA(Direct Memory Access)操作...

    idma.zip_VDSP++5.0百度云_pleasantb4s

    《IDMA.zip_VDSP++5.0百度云_pleasantb4s:深入解析VDSP++5.0在嵌入式系统开发中的应用》 在嵌入式系统开发领域,高性能数字信号处理(DSP)技术扮演着至关重要的角色。本文将深入探讨IDMA.zip文件中的主要内容——...

    bfin-uboot-2009r1-rc3

    描述中提到的“将uboot移植到vdsp5的工程”,暗示了这个项目是关于将U-Boot适配到Blackfin系列处理器中的BF561型号。Blackfin处理器是由 Analog Devices 公司设计的一种混合信号处理器,主要用于数字信号处理(DSP)和...

    引导程序u-boot

    boot.ldr`是由`tools/bin2ldr/runme.sh`脚本调用`tools/bin2ldr/bin2ldr`程序生成的,并且默认针对的是BF537平台,因此需要对`runme.sh`进行修改,将`./bin2ldr –procbf537`改为`./bin2ldr –procbf561`。...

Global site tag (gtag.js) - Google Analytics