FPGA與DSP協(xié)同處理系統(tǒng)設(shè)計(jì)之:典型實(shí)例-FPGA片上硬件乘法器的使用
11.5典型實(shí)例20:FPGA片上硬件乘法器的使用
11.5.1實(shí)例的內(nèi)容及目標(biāo)
1.實(shí)例的主要內(nèi)容
在FPGA+DSP系統(tǒng)設(shè)計(jì)系統(tǒng)中,FPGA經(jīng)常作為DSP的協(xié)處理器來(lái)輔助完成一些計(jì)算任務(wù)。而這些計(jì)算工作中最消耗時(shí)間的就是乘法運(yùn)算,因此本實(shí)例的主要內(nèi)容就是幫助讀者學(xué)會(huì)調(diào)用硬件乘法IP核。
2.實(shí)例目標(biāo)
通過(guò)本實(shí)例,讀者應(yīng)達(dá)到以下目標(biāo)。
·了解硬件乘法器對(duì)算法的加速作用。
·掌握FPGA片上硬件乘法器IP的調(diào)用方法。
11.5.2硬件乘法IP的使用方法
1.生成硬件乘法器
如圖11.12所示,在“NewSource”里面選擇“IP(CoreGenArchitectureWizard)”,在右邊的文件名里面輸入“multiply”,單擊“Next”按鈕,打開(kāi)如圖11.13所示的IP核類(lèi)型選擇對(duì)話框。
圖11.12新建IP核文件
圖11.13新建乘法器IP核
在IP核類(lèi)型選擇界面里面選擇MathFunctions→Multipliers→Multiplierv7.0,單擊“Next”按鈕,打開(kāi)乘法器IP核生成向?qū)В鐖D11.14所示。
圖11.14乘法器生成向?qū)?/p>
在上面對(duì)話框里,“ComponentName”是要生成的模塊的名稱(chēng)。“Parallel”和“Sequential”兩個(gè)選項(xiàng)是用來(lái)選擇乘法器模式的,選擇并行結(jié)構(gòu)可以加快乘法器的速度,但是同時(shí)要多占用一些資源。選擇“Constant”選項(xiàng)我們會(huì)發(fā)現(xiàn)乘法器的B輸入端口被屏蔽掉了,這時(shí)B將作為一個(gè)固定輸入。
如果不選擇“Constant”選項(xiàng),可以在下面的乘法器結(jié)構(gòu)框里面選擇乘法器使用的資源種類(lèi),選擇“UseLUTs”將使用片上存儲(chǔ)器資源,選擇“Use18*18MultiplierBlocks”將使用FPGA自帶的DSP模塊。“Virtex-IIMultiplierOptimization”框里面的選項(xiàng)只有在使用Virtex-II族器件的時(shí)候才能使用。
前面選擇了Constant選項(xiàng),在這個(gè)對(duì)話框里面就要對(duì)乘法器的B輸入進(jìn)行設(shè)置,在ConstantValue后面輸入B端口輸入的數(shù)值(十進(jìn)制),如圖11.15所示。
在如圖11.16所示的對(duì)話框里面設(shè)置輸入口A的位寬和形式。
在如圖11.17所示的對(duì)話框里面設(shè)置輸出口的位寬和是否使用寄存器(使用輸出寄存器的時(shí)候由Q口輸出,不使用輸出寄存器的時(shí)候由O口輸出)。
在如圖11.18所示的對(duì)話框里面選擇“MinimumPipelining”可以看見(jiàn)在最下面的“Information”框里面的輸出延遲達(dá)到最小為1。在“RegisterOption”欄里面可以設(shè)置同步復(fù)位,異步復(fù)位和時(shí)鐘使能。
圖11.15設(shè)置端口B參數(shù)
圖11.16設(shè)置端口A參數(shù)
圖11.17設(shè)置輸出端口
圖11.18其他參數(shù)設(shè)置
配置完成以后單擊“Generate”按鈕就可以生成乘法器了。
2.使用硬件乘法器
本實(shí)例以一個(gè)IIR數(shù)字濾波的設(shè)計(jì)為例來(lái)演示硬件乘法器的使用方法。直接打開(kāi)實(shí)例的工程文件,如圖11.19所示。其中IIR.v是IIR濾波器的設(shè)計(jì)文件,test.tbw為測(cè)試文件。
圖11.19IIR數(shù)字濾波器工程目錄
在IIR.v的文件中,可以看到硬件乘法器的調(diào)用方法。
reg[12:0]x1,x2,x3;//定義乘數(shù)a
reg[12:0]y1,y2,y3;
reg[12:0]q1,q2,q3;
wire[25:0]mul[10:1];//定義乘法的輸出結(jié)果
multiplym0(.clk(clk),.a(x1),.o(mul[1]));//乘法器的調(diào)用,輸入為a,輸出為o
multiplym1(.clk(clk),.a(x2),.o(mul[2]));
multiplym2(.clk(clk),.a(x3),.o(mul[3]));
multiplym3(.clk(clk),.a(y1),.o(mul[4]));
multiplym4(.clk(clk),.a(y2),.o(mul[5]));
multiplym5(.clk(clk),.a(y1),.o(mul[6]));
multiplym6(.clk(clk),.a(y2),.o(mul[7]));
multiplym7(.clk(clk),.a(y3),.o(mul[8]));
multiplym8(.clk(clk),.a(q1),.o(mul[9]));
multiplym9(.clk(clk),.a(q2),.o(mul[10]));
運(yùn)行仿真后,可以得到輸出結(jié)果如圖11.20所示。
圖11.20IIR數(shù)字濾波器仿真結(jié)果
11.5.3小結(jié)
本節(jié)對(duì)生成和使用FPGA的片上硬件乘法器IP核的方法做了介紹,并通過(guò)編譯下載在紅色颶風(fēng)的開(kāi)發(fā)板上實(shí)現(xiàn)了預(yù)定功能。
評(píng)論