DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1196|回复: 0
打印 上一主题 下一主题

[待整理] FPGA与DSP协同处理系统设计之:典型实例-FPGA片上硬件乘法器的使用

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:31:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        11.5  典型实例20:FPGA片上硬件乘法器的使用

        11.5.1  实例的内容及目标

        1.实例的主要内容

        在FPGA+DSP系统设计系统中,FPGA经常作为DSP的协处理器来辅助完成一些计算任务。而这些计算工作中最消耗时间的就是乘法运算,因此本实例的主要内容就是帮助读者学会调用硬件乘法IP核。
         
        2.实例目标

        通过本实例,读者应达到以下目标。
        ·  了解硬件乘法器对算法的加速作用。
        ·  掌握FPGA片上硬件乘法器IP的调用方法。
         
        11.5.2  硬件乘法IP的使用方法

        1.生成硬件乘法器

        如图11.12所示,在“New Source”里面选择“IP(CoreGen & Architecture Wizard)”,在右边的文件名里面输入“multiply”,单击“Next”按钮,打开如图11.13所示的IP核类型选择对话框。
       

        图11.12   新建IP核文件

       

        图11.13  新建乘法器IP核

         
        在IP核类型选择界面里面选择Math Functions→Multipliers→Multiplier v7.0,单击“Next”按钮,打开乘法器IP核生成向导,如图11.14所示。
       

        图11.14  乘法器生成向导

        在上面对话框里,“Component Name”是要生成的模块的名称。“Parallel”和“Sequential”两个选项是用来选择乘法器模式的,选择并行结构可以加快乘法器的速度,但是同时要多占用一些资源。选择“Constant”选项我们会发现乘法器的B输入端口被屏蔽掉了,这时B将作为一个固定输入。
         
        如果不选择“Constant”选项,可以在下面的乘法器结构框里面选择乘法器使用的资源种类,选择“Use LUTs”将使用片上存储器资源,选择“Use 18*18 Multiplier Blocks”将使用FPGA自带的DSP模块。“Virtex-II Multiplier Optimization”框里面的选项只有在使用Virtex-II族器件的时候才能使用。
         
        前面选择了Constant选项,在这个对话框里面就要对乘法器的B输入进行设置,在Constant Value后面输入B端口输入的数值(十进制),如图11.15所示。
         
        在如图11.16所示的对话框里面设置输入口A的位宽和形式。
        在如图11.17所示的对话框里面设置输出口的位宽和是否使用寄存器(使用输出寄存器的时候由Q口输出,不使用输出寄存器的时候由O口输出)。
         
        在如图11.18所示的对话框里面选择“Minimum Pipelining”可以看见在最下面的“Information”框里面的输出延迟达到最小为1。在“Register Option”栏里面可以设置同步复位,异步复位和时钟使能。
       

        图11.15  设置端口B参数

       

        图11.16  设置端口A参数

       

        图11.17  设置输出端口

       

        图11.18  其他参数设置

         

        配置完成以后单击“Generate”按钮就可以生成乘法器了。
         
        2.使用硬件乘法器

        本实例以一个IIR数字滤波的设计为例来演示硬件乘法器的使用方法。直接打开实例的工程文件,如图11.19所示。其中IIR.v是IIR滤波器的设计文件,test.tbw为测试文件。
       

        图11.19  IIR数字滤波器工程目录

         

        在IIR.v的文件中,可以看到硬件乘法器的调用方法。
         
              reg      [12:0 ]        x1,x2,x3      ;     // 定义乘数 a
              reg      [12:0 ]        y1,y2,y3            ;
              reg      [12:0 ]        q1,q2,q3            ;
         
        wire     [25:0 ]        mul         [10:1 ]  ;    // 定义乘法的输出结果
        multiply m0(.clk(clk),.a(x1),.o(mul[1]));// 乘法器的调用,输入为a,输出为o
        multiply m1 ( .clk(clk),.a(x2),.o(mul[2] ) );
        multiply m2 ( .clk(clk),.a(x3),.o(mul[3] ) );
        multiply m3 ( .clk(clk),.a(y1),.o(mul[4] ) );
        multiply m4 ( .clk(clk),.a(y2),.o(mul[5] ) );
        multiply m5 ( .clk(clk),.a(y1),.o(mul[6] ) );
        multiply m6 ( .clk(clk),.a(y2),.o(mul[7] ) );
        multiply m7 ( .clk(clk),.a(y3),.o(mul[8] ) );
        multiply m8 ( .clk(clk),.a(q1),.o(mul[9] ) );
        multiply m9 ( .clk(clk),.a(q2),.o(mul[10]) );
         
        运行仿真后,可以得到输出结果如图11.20所示。
       

        图11.20  IIR数字滤波器仿真结果

         
        11.5.3  小结

        本节对生成和使用FPGA的片上硬件乘法器IP核的方法做了介绍,并通过编译下载在红色飓风的开发板上实现了预定功能。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-3 01:34 , 耗时 0.090739 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表