我不知道名字取对没有,在FPGA计算中有时往往需要在不溢出的情况下将数扩大,从而获得更好的计算精度。

比如。在一个8位宽的系统中,将x=0000_0010,算术左移m=5位之后得到xt=0100_0000,此时的xt参与运算之后能得到更好计算精度,并且通过m我们可以把相应的结果移位回来。

典型的应用例子就是,使用cordic计算复数x+jy的相角与模值,那么此时我们可以在保证不溢出的情况下按比例的扩大(x,y),再进行cordic计算,此时我们就可以得到,将计算结果的模值右移相应的m位即可,那么我们就可以计算得到精度较高的模值与相角值。

 下面就是移位的过程。以一个8位的数据为例 x=0000_0010为例

1.高四位全为符号位,所以,x<<<3=0_0010_000 m=3.

2.高三位全为符号位,所以,x<<<2=0_10_00000 m=m+2=5.

3.高两位不全为符号位,所以 x<<<0=0_10_00000 m=m+0=5.

 对应到每一次的硬件结构为

代码为:

module data_expand
#(
parameter DSIZE = ,
parameter MSIZE =
)
(
input clk,
input nd,
output rdy, input signed [DSIZE-:] din,
output signed [DSIZE-:] dout,
output [MSIZE-:] mout ); wire [DSIZE-:] dtemp [:];
wire [MSIZE-:] mtemp [:];
wire rtemp [:]; data_expand_unit #(.DSIZE(DSIZE),.MSIZE(MSIZE),.K())
i0 (.clk(clk), .nd(nd), .rdy(rtemp[]), .din(din), .dout(dtemp[]), .min('d0), .mout(mtemp[0]));
data_expand_unit #(.DSIZE(DSIZE),.MSIZE(MSIZE),.K())
i1 (.clk(clk), .nd(rtemp[]), .rdy(rtemp[]), .din(dtemp[]), .dout(dtemp[]), .min(mtemp[]), .mout(mtemp[]));
data_expand_unit #(.DSIZE(DSIZE),.MSIZE(MSIZE),.K())
i2 (.clk(clk), .nd(rtemp[]), .rdy(rdy), .din(dtemp[]), .dout(dout), .min(mtemp[]), .mout(mout)); endmodule module data_expand_unit
#(
parameter DSIZE = ,
parameter MSIZE = ,
parameter [MSIZE-:] K =
)
(
input clk, input nd,
output reg rdy, input signed [DSIZE-:] din,
output reg signed [DSIZE-:] dout, input [MSIZE-:] min,
output reg [MSIZE-:] mout ); always@( posedge clk )begin
if( din[(DSIZE-)-:(K+)] == {(K+){'b0}} || din[(DSIZE-1)-:(K+1)] == {(K+1){1'b1}})begin
dout <= din <<< K;
mout <= min + K;
end else begin
dout <= din;
mout <= min;
end
rdy <= nd;
end endmodule

仿真结果如下:

FPGA计算中定标与位扩展的实现的更多相关文章

  1. 浅谈Java中的补零扩展和补符号位扩展

    今天,魏屌出了一道题,题目如下: 定义一个大头序的byte[]a={-1,-2,-3,-4},转换成short[]b.问b[0]和b[1]分别是多少? 乍一看,这题不难,无非就是移位操作,再进行组合. ...

  2. Java中符号位扩展

    第一个例子: byte b=-100;b在内存中是以补码的形式存贮的:1001 1100 如果执行char c=(char)b;如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充( ...

  3. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他

    原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...

  4. AI芯片:高性能卷积计算中的数据复用

    随着深度学习的飞速发展,对处理器的性能要求也变得越来越高,随之涌现出了很多针对神经网络加速设计的AI芯片.卷积计算是神经网络中最重要的一类计算,本文分析了高性能卷积计算中的数据复用,这是AI芯片设计中 ...

  5. 【转】Cocoa中的位与位运算

    转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...

  6. FPGA计算3行同列数据之和

    实验:FPGA计算3行同列数据之和 实验要求:PC机通过串口发送3行数据(一行有56个数据,3行共有56*3=168个数据)给FPGA,FPGA计算3行同一列数据的和,并将结果通过串口返回给上位机. ...

  7. 在x64计算机上捕获32位进程的内存转储

    这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获 ...

  8. Java 移位运算、符号位扩展

    类型取值范围 short 是1字节,即8位.而且 Java 中只有有符号数,所以最大值 0111,1111=2^7-1. 同时计算机中以补码形式存负数,所以可以多表示一个数,则最小值 1000,000 ...

  9. linux内核学习之三:linux中的"32位"与"64位"

    在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位"与"64位"的说法,类似的还有"x86"与"x86 ...

随机推荐

  1. grep -iq 与grep -qi 意思

    就是有的时候你不需要直接打印出结果,比如在shell脚本中,你只需要知道grep有没有找到指定的字符串,而不需要满屏幕打印出来,因为那样会很难看.这只可以加-q选项,执行结果是:如果找到了,会返回0, ...

  2. UBuntu16.04 安装docker

    1.首先更新apt-get源,sudo apt-get update 2.再通过pip安装docker-compose 3.然后再安装docker.io,sudo apt install docker ...

  3. 转-CVE-2016-10190浅析-FFmpeg堆溢出漏洞

    本文转载自CVE-2016-10190 FFmpeg Heap Overflow 漏洞分析及利用 前言 FFmpeg是一个著名的处理音视频的开源项目,使用者众多.2016年末paulcher发现FFm ...

  4. Windows防火墙开启ping,禁ping的配置方法

    Windows 7,Win 2008 R2,2012 R2: Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 - ICMP ...

  5. Day2数据结构和算法

    2019-02-28,10:23:52 算法效率的度量方法 事后统计方法:为每一个程序编制测试程序 ,比较时间.(很麻烦,没有普遍适用性) 事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行 ...

  6. node.js的Promise库-bluebird示例

    前两天公司一哥们写了一段node.js代码发给我,后面特意提了一句“写的不太优雅”.我知道,他意思是回调嵌套回调,因为当时比较急也就没有再纠结.然而内心中总记得要解决这个问题.解决node.js的回调 ...

  7. 源码分析之groupcache之consistenthash

    很多时候读开源的库就是为自己准备大量的代码库,优秀开源项目代码质量比绝大部分人的代理质量都要高. 依赖的库 ```import ( "hash/crc32" "sort& ...

  8. 《笨方法学Python》加分题32

    注意一下 range 的用法.查一下 range 函数并理解它在第 22 行(我的答案),你可以直接将 elements 赋值为 range(0, 6) ,而无需使用 for 循环?在 python ...

  9. [Battle]Battle章1 Presto VS Impala

    Round One: 平局:共同点就是吃内存; Round Two: Impala胜 Impala查询性能稍领先于presto Round Three: presto胜 presto在数据源支持上非常 ...

  10. 设置PL/SQL 快捷键

    TOOLS-preferences--user interface--editor--Autoreplace--enabled (check)--address(C:\Program Files (x ...