2014年6月11日 星期三

反覆式乘法器(Iterative Structure Multiplier)---適用於DE2-70 的程式

反覆式乘法器(Iterative Structure Multiplier)是最傳統的乘法器架構之一,利用了加法器和位移器(shifter)再增加一些訊號電路就可以完成乘法器,所以可以避免硬體的重複,減少佔用面積,但因為其運作的方式為加和位移(Additions and Shift-Register)的方式來完成乘法的動作,因此運算時間較長是此架構的缺點。

反覆式乘法器(Iterative Structure Multiplier)是最傳統的乘法器架構之一,這種方式就和我們自己在做乘法時一樣,乘數第一個位數乘完被乘數(multiplicand)的每一個位數乘數(multiplier)的第二位和被乘數乘出來的積就往左移一位,把乘數的每個位數都乘以被乘數之後,最後再將每個部份乘積(partial product)加起來,即可得到最後的結果。



 反覆式乘法器之原理


反覆式乘法器架構 




//8 x 8 multiplier
module Add_Shift_method(  //適用於DE2-70 的程式
 input [17:0]SW,
 input [3:0] KEY,
 input  CLOCK_50,

 output [17:0] LEDR,
 output [7:0] LEDG,
 output [6:0] HEX0,
 output [6:0] HEX1,
 output [6:0] HEX2,
 output [6:0] HEX3,
 output [6:0] HEX4,
 output [6:0] HEX5,
 output [6:0] HEX6,
 output [6:0] HEX7
 );

assign HEX0=7'b111_1111;  //off 7-segment Display
assign HEX1=7'b111_1111;
assign HEX2=7'b111_1111;
assign HEX3=7'b111_1111;
assign HEX4=7'b111_1111;
assign HEX5=7'b111_1111;
assign HEX6=7'b111_1111;
assign HEX7=7'b111_1111;

//multiplicat(a,b,result);
multiplicat(SW[15:8],SW[7:0],LEDR[15:0]);

endmodule


module multiplicat(a,b,result);
input [7:0] a;
input [7:0] b;
output [15:0] result;
wire [15:0] a1,a2,a3,a4,a5,a6,a7,a8;

assign a1=(b[0]==1'b1)? {8'b0000_0000,a} : 16'b0000_0000_0000_0000;
assign a2=(b[1]==1'b1)? {7'b0000_000,a,1'b0} : 16'b0000_0000_0000_0000;
assign a3=(b[2]==1'b1)? {6'b0000_00,a,2'b00} : 16'b0000_0000_0000_0000;
assign a4=(b[3]==1'b1)? {5'b0000_0,a,3'b000} : 16'b0000_0000_0000_0000;
assign a5=(b[4]==1'b1)? {4'b0000,a,4'b0000}  : 16'b0000_0000_0000_0000;
assign a6=(b[5]==1'b1)? {3'b000,a,5'b0000_0} : 16'b0000_0000_0000_0000;
assign a7=(b[6]==1'b1)? {2'b00,a,6'b0000_00} : 16'b0000_0000_0000_0000;
assign a8=(b[7]==1'b1)? {1'b0,a,7'b0000_000} : 16'b0000_0000_0000_0000;
assign result = a1+a2+a3+a4+a5+a6+a7+a8;
endmodule

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...