8位二進制乘法電路程序_第1頁
8位二進制乘法電路程序_第2頁
8位二進制乘法電路程序_第3頁
已閱讀5頁,還剩6頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、位二進制乘法電路該乘法器是有由8位加法器構成的以時序方式設計的8位乘法器,采用逐項移位相加的方法來實現相乘。用乘數的各位數碼,從低位開始依次與被乘數相乘,每相乘一次得到的積稱為部分積,將第一次(由乘數最低位與被乘數相乘)得到的部分積右移一位并與第二次得到的部分積相加,將加得的和右移一位再與第三次得到的部分積相加,再將相加的結果右移一位與第四次得到的部分積相加。直到所有的部分積都被加過一次。例如:被乘數 (M7M6M5M4M3M2M1M0 )和乘數(N7N6N5N4N3N2N1N0 )分別為 11010101 和10010011,其計算過程如下:11010101X 100100111101010

2、1NO與被乘數相乘的部分積,部分積右移一位11010101N1與被乘數相乘的部分積十 1101010110011111111001111111兩個部分積之和,部分積之和右移一位:前簡單流程圖)0 0 00N2與被乘數相乘的部分積與前面部分積之和相加,部分積之和右移一- 0 00 0 00 0 0N4與被乘數相乘的部分積 N7與被乘數相乘的部分積-110 10 10 1與前面部分積之和相加 右移一位得到最后的積下面分解8位乘法器的層次結構,分為以下 右移寄存器模塊:這是 行乘法運算的移位操作。 加法器模塊:這是一個 1位乘法器模塊:完成 鎖存器模塊:這是一個 輸入數值的鎖存與移位。按照上4個模塊

3、:個8位右移寄存器,可將乘法運算中的被乘數加載于其中,同時進8位加法器,進行操作數的加法運算。8位與1位的乘法運算。16位鎖存器,同時也是一個右移寄存器,在時鐘信號的控制下完成圖中8位移位寄存器reg_8存放 數送至1 8位乘法器 multi_1中,同時 送至 8位加法器adder_8中,同時取reg_16 中,進述算法流程圖??趇ll時 制信號乘數加 清出零或鎖存移位寄存送至reg_16右移后并進行鎖進行相加,Z再詁加后結果即部分積存入行移位后并保存。這樣經過8次對乘數a的移位操作,所以的部分積已全加至reg_16中,此時鎖存器reg_16存放的值即所要求的積。(1) 8位移位寄存器reg_

4、8的設計) 信號作用下,當1時,將 8 位r8_load=0時,對數據進行移位操作8-同時定義一個信號氐位oadr8_eu8(0)傳送給r8r8_i n7.Oreg_8reg8用來裝載 out輸出。8位移位寄存器是在時鐘(r8_clkeve nt and r8_clk=1 乘數加載進入;而當新數據及移位后的操作數,完成這些操作后,寄存器的最低 元件實體原理圖如右圖:該模塊元件的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;

5、en tity reg_8 is-實體描述port(r8_clk,r8_load:i n std_logic;r8_in:in stdo gic_vector(7 dow nto 0);r8_out:out std_logic);end reg_8;architecture arc_reg_8 of reg_8 is-結構體描述sig nal reg8:std_logic_vector(7 dow nto 0);-定義信號變量beginprocess(r8_clk,r8_load)beginif r8_clkeve nt and r8_clk=1 the n-時鐘上升沿到來if r8_load

6、=1 the n-鎖存新數據reg8=r8_i n;elsereg8(6 dow nto 0)=reg8(7 dow nto 1);-數據右移end if;end if;end process;r8_out=reg8(0);-輸出最低位end arc_reg_8;仿真波形圖如下:NapeD ps20.0 m40.0 m60.080.0 ns1D0. D in120.0 m140.iiiiiiD 20 ps0 PJ比0:r0_clkA 0TL rL TL nL_r_rL_n_rL_r_r-L_rL_rL_TLL_rLAlIH T8_inH 47F4F11r8_flutA 0Liii i(2) 8

7、位加法器adder_8的設計I)該加法器由兩個四位二進制加法器組成。其中設計四位二進制加法器時,為了避免加法運 算時產生溢出,故定義了三個信號量ss,aa,bb將加數a4_a, a4_b分別與0連接后賦值給aa,bb,形成5位二進制數,然后 aa,bb與進位位a4_in相加賦值給ss,最后將ss的低四位賦值給和a4_s,同時將ss的最高位送給a4_out輸出。 元件實體原理圖如右圖:a4_i na4_s3.0 a4_a3.0 a4_b3.0a4_outadder 4其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic

8、_ un sig ned.all;use ieee.std_logic_arith.all;en tity adder_4 is-實體描述port(a4_in :in std_logic;a4_a,a4_b:i n std_logic_vector(3 dow nto 0); a4_s:out std_logic_vector(3 dow nto 0); a4_out:out std_logic);end adder_4;architecture arc_adder_4 of adder_4 is-結構體描述sig nal ss:std_logic_vector(4 downto 0);-定義

9、信號變量sig nal aa,bb:std_logic_vector(4 dow nto 0);beginaa=0&a4_a;-為避免溢出,將 0與a4_a連接bb=0&a4_b;-將 0 與 a4_b 連接ss=aa+bb+a4_i n;-執行加法運算a4_s=ss(3 dow nto 0);-輸出結果a4_out28a8_tnilk D(3) 1位乘法器40. xis80.甲 he100.0 M1 j 10 X 11 jriFX 131516 jri)riaH 11 X 12】4 X 15 廠仃 X 18 廠帀 I: 1IT JCgOmulti_1的設計利用循環語句FOR-LOOP完成8位

10、二進制數與1位二進制的乘法運算,將8位二進制數 m1_y從最低位到最高位與 1位二進制m1_x分別做與運算,最后將結果依次送到 m1_out輸出。 即當m1_x為1時,m1_out輸出為 m1_y ;當m1_x為0時,m1_out輸出全為零。元件實體原理圖如右圖:其程序如下:ml xlibrary ieee;use ieee.stdo gic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity multi_1 is-實體描述port(m1_x:in std_logic;m1_y:in

11、std_logic_vector(7 dow nto 0);m1_out:out std_logic_vector(7 dow nto 0);end multi_1;architecture arc multi 1 of multi 1 is -結構體描述beginprocess(m1_x,m1_y)m1_out7.0m1 y7m0ilti 1beginfor i in 0 to 7 loop-循環完成8位與1位的乘法運算m1_out(i)=m1_y(i)a nd m1_x;end loop;end process;end arc_multi_1;其仿真電路圖如下:口當清零信號(r16_clr

12、=1)到來時,定義信號變 一reg16清零;否則在時鐘信號r16_clrr16_out15.0r16_i n8.Oreg_16r16 elk上升沿到來時,將reg16的低8位進行移位操作,同時將16_位的數據輸入r16_in鎖存到reg16的高 8位,最后賦值給r16_out輸出。元件實體原理圖如右圖:其程序如下:use ieee.std _lo gic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity reg_16 is-實體描述port(r16_clk,r16_clr:in st

13、d_logic;r16_in:in std_logic_vector(8 dow nto 0); r16_out:out stdo gic_vector(15 dow nto 0);end reg_16;architecture arc_reg_16 of reg_16 is-結構體描述sig nal reg16:stdo gic_vector(15 dow nto 0);-定義信號變量beginprocess(r16_clk,r16_clr)beginif r16_clr=1 then-clr 為高電平,清零reg16=0000000000000000;elsif r16_clkeve nt

14、 and r16_clk=1 the n-時鐘上升沿到來reg16(6 dow nto 0)=reg16(7 dow nto 1);-右移,并鎖存低八位reg16(15 dow nto 7)=r16_i n;-將輸入鎖存到高 8 位end if;end process;r16_out=reg16;-數據輸出end arc_reg_16;仿真電路圖如圖所示:(5) 8位乘法器的頂層設計元件實體原理圖如圖:RJLTI_8CLK 其頂層電路如圖:如上圖所示,當 STAR上升沿到來,將乘數 a鎖存到REG_8中,同時將16位的移位寄 存器REG_16清零,然后隨著時鐘 CLK上升沿的到來,對REG_8

15、中的乘數進行移位操作,最低位在前,由低到高逐位輸出。1位乘法器中進行與 8位被乘數的相乘運算,并與鎖存在16位寄存器reg_16中的高8位進行相加,其和(包含進位)在下一個時鐘的上升沿到來時鎖存 到16位寄存器中。如此進行直到第八個時鐘上升沿到來時,reg_16的輸出即為所求的乘積。其頂層程序如下:use ieee.std _lo gic_1164.all; use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity multi_8 is-實體描述port(clk,start:in std_logic;a,b:

16、i n std_logic_vector(7 dow nto 0);result:out std_logic_vector(15 dow nto 0); end multi_8;architecture arc_multi_8 of multi_8 is-結構體描述compo nent multi_1-調用1位乘法器聲明port(m1_x:i n std_logic;m1_y:in std_logic_vector(7 dow nto 0);m1_out:out std_logic_vector(7 dow nto 0);end comp onent;component adder_8-調用8

17、位加法器聲明port(a8_ in :in std_logic;a8_a,a8_b:i n std_logic_vector(7 dow nto 0);a8_s:out std_logic_vector(7 dow nto 0); a8_out:out std_logic);end comp onent;component reg_8 -調用8位寄存器聲明 port(r8_clk,r8_load:i n std_logic;r8n:in std_logic_vector(7 dow nto 0);r8_out:out std_logic);end comp onent;component re

18、g_16 -調用16位寄存器聲明 port(r16_clk,r16_clr:in std_logic;r16_in:in std_logic_vector(8 dow nto 0); r16_out:out stdo gic_vector(15 dow nto 0);end comp onent;sig nal gndin t, newstart,qb:std_logic;-定義信號變量sig nal an dsd:std_logic_vector(7 dow nto 0);sig nal dtb in: std_logic_vector(8 dow nto 0);sig nal dtbout

19、:std_logic_vector(15 dow nto 0);beginresult=dtbout;gndin t=0;process(clk,start)beginif start=1 the n n ewstart=1;elsif clk=0 the n n ewstartincfime 呂 an:Q p$*J Poihler42 irtslinflervat42 西 nsJ pv20. f m40 f nxg m 9gp n0 P5 PS JelkA 01 1J 11 1 1 1 1 11 1 1 1_1_1 _L* 11 - :El *H 93r!93 bM B5rD5PH re-sultK 0000Loooo6ASD狀號FCT敝7E7S WfcX 3J3C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論