首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» Spartan3硬件乘法器使用详解(2)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Spartan3硬件乘法器使用详解(2)
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-12-2 22:17
|
只看该作者
Spartan3硬件乘法器使用详解(2)
时间段
,
性价比
,
硬件
,
程序
,
价值
前几天一直在忙,这几天终于有点时间可以写点东西了。上次简要提了一下对Spartan3中硬件乘法器的认识。虽然介绍Xilinx器件与开发应用的书籍、资料非常多,但是仔细查了一下,并没有专门介绍其硬件乘法器的,所以个人认为总结一下介绍给大家还是很有必要的。
虽然最新的7系列FPGA已经面世了,不过Spartan系列因为其高性价比、广泛使用的人群、大量已有的程序、资料,在一定的时间段内还是有其存在的价值的(估计Altera的CycloneIII不停产,Xilinx的Spartan3就不会停产把:))。我觉得把它搞清楚了,以后过渡到高端器件,对整个开发的流程、器件的来龙去脉还是比较容易的。好了接下来继续上文的讨论。
1.硬件乘法器调用的设置
上次提到了可以直接在ISE中使用函数模板来调用硬核乘法器的原语。为了对原语进行约束控制,需要在Project Navigator中进行设置。一般情况下,XST综合工具默认使用最优的实现方案;为了确保使用嵌入的硬件乘法器,需要额外进行设置。设置的方法比较多,例如使用XST的命令行、使用图形窗口等。为了操作简便,使用Project Navigator中的选项进行设置,如图1所示。(操作步骤是,在ISE Project Navigator首先选择顶层文件,然后点击Synthesize XST ,再点击菜单栏Process下面的Process Properties就可打开此界面)。这里面有Auto、Block、LUT、Pipe_LUT四个选项,默认的是Auto,即由XST决定采用何种方式;必须选中Block时才能告诉综合工具在综合时使用硬件乘法器来处理乘法。
图1 综合工具中的配置选项.JPG
在使用Synplify进行综合时则稍有变化,需要在Synplify中进行配置。Synplify默认对Xilinx器件使用硬件乘法器(帮助中说The default implementation uses block multipliers (this corresponds to the attribute value block_mult.))。在Synplify中改非常麻烦,不像XST的设置中提供了现成的选项供设置,如图2所示(可参考Synopsys FPGA Synthesis User Guide)。
图2 Synplify中使用Xilinx乘法器的方法
其实只要在源程序里面加注释就可以使得Synplify识别,例如
input [7:0] a;
input [1:0] b;
output [9:0] c; /* synthesis syn_multstyle = "block_mult" */
assign c = {2'b0, a} * {6'b0, b};
就可以在求c时使用block模式,即硬件的乘法器了。
在System Generator中的配置则非常简单,只要在Simulink Library Browser中选择Xilinx Blocket,选择math,拖出Mult模块,双击它打开属性,改变“Use embeded multipliers”的选项就可选择使用何种方式的硬件乘法器,如图3所示。
图3 在System generator中的配置方法
在EDK开发中,若使用MicroBlaze软核,则应该将Processor Version Register 0的MUL位置为1。这个功能目前我还没有用到,所以不好做更详细的讲述,以免误导了大家。具体的讲述可以参考MicroBlaze Processor Reference Guide (UG081.pdf)。
2. Spartan-3 FPGA硬件乘法器的结构
Spartan-3 FPGA硬件乘法器的结构框图如图4所示(DS099.pdf)。从图中可以看出,硬件乘法器与块RAM相邻,从而可以很方便地使用快RAM存储输入、输出结果。一般每个芯片中有两列或者四列乘法器。在两排的结构下,每个乘法器又紧邻两排CLB,从而可以使用CLB或者IOB逻辑来方便地驱动硬件乘法器。一般在每个乘法器模块的周围有4个CLB,或者16个slice和32个LUT,可以允许32位的输入和输出信号实时链接到邻近的硬件乘法器。在高速布局中,一种可行的方案是,把A[15:0] 放在一端,B[15:0]放在另一端,P[31:0]同时分布于两边。对于一个全尺寸的18*18乘法器,额外的输入和输出可以链接到除已使用CLB之外最近的CLB上(因为CLB广泛分布于硬件乘法器四周,从图上也可以看出)。为了达到最佳的性能,在邻近的CLB中,需要对输入使用寄存器的流水线结构进行处理。
图4 Spartan-3 FPGA硬件乘法器的结构
Spartan3中的硬件乘法器之所以默认选择18位这个不寻常的数,是因为这正好与块RAM的18位相匹配,其中包含了校验位(块RAM的默认位宽为18bit,深度为1024bit)。标准的8位或者16位的乘法器可以使用硬件乘法器的一部分来实现,而32位的乘法器可以通过级联两个硬件乘法器得到。Xilinx硬件乘法器的这种结构可以实现任意非标准宽度(8位或者16位)的乘法器,这可以满足各种实现的要求。没有用到的乘法器的输入端被连接到未使用的LUT中,也即被置零。不过根据我所做过的含有数学运算的FPGA工程,18个乘法器的占用率经常是100%占用。
今天先写到这儿了。最后,给出Spartan3系列的硬件乘法器分布,如图5所示。
图5 Spartan3系列的乘法器分布.
附件大小
Tu_1_Zong_He_Gong_Ju_Zhong_De_Pei_Zhi_Xuan_Xiang_.JPG
219.38 KB
Tu_2_SynplifyZhong_Shi_Yong_XilinxCheng_Fa_Qi_De_Fang_Fa_.jpg
134.65 KB
Tu_3_Zai_System_generatorZhong_De_Pei_Zhi_Fang_Fa_.JPG
50.21 KB
Tu_4_Spartan3_Ying_Jian_Cheng_Fa_Qi_Jie_Gou_.jpg
45.8 KB
Tu_5_Spartan3Xi_Lie_De_Cheng_Fa_Qi_Fen_Bu_.jpg
36.28 KB
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
嵌入式技术
测试测量
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议