利用VHDL設計乘法器
Implement of Multiplier by Using VHDL
許地申
Dih-Shen Hsu
中華技術學院電機系副教授
Associate Professor
Department of Electrical Engineering格列夫游记
China Institute of Technology
摘 要
在計算機結構裡加,減,乘,除是常被用到的運算,本文提出以非常高速積體電路硬體描述語言(VHDL)來描述硬體,說明如何將兩個運算元作相乘的運算。我們首先以無號數整數做乘法運算來說明其原理,設計其電路結構。其實在VHDL 程式中,我們更可以載入STD_LOGIC_ARITH與STD_LOGIC_UNSIGN
ED元件盒之後,直接進行乘法運算,既簡單又容易擴充。最後,我們將以4-bit X 4-bit 的例子來做電路描述、電路合成、電路模擬並以七段顯示器將其結果顯示出來。
關鍵字:非常高速積體電路硬體描述語言、電路描述、電路合成、電路模擬
Abstract
We have known operation that perform addition, subtraction, multiplication, and division. In this paper we are prented primarily to describe hardware using by VHDL. We can explain how multiplication may be performed for two operand. Multiplication of unsigned numbers illustrates the main issues involved in the design of multiplier circuit. In fact, after the STD_LOGIC_ARITH and STD_LOGIC_UNSIGNED packages were added to the VHDL program, it became not only simple but also easy to extended. Next, consider a 4 x 4 example to circuit description, circuit synthesis, and circuit simulation by using VHDL. Finally, this approach can also be displayed by 7-gment.
Keyword : VHDL , circuit description , circuit synthesis, circuit simulation
壹.簡介
VHDL是Very High Speed Integrated Circuit Hardware Description Language 的英文縮寫。是一種快
速的電路設計工具,功能涵蓋了電路描述、電路合成、電路模擬等三大電路設計工作[4-8]。
V HDL原來是由美國國防部於70年代開始研究發展的電路設計工具,並於1987年成為IEEE的一種標準語言。原先發展的目的是為了將電子電路的設計和其內部的含意,用文件的方式儲存起來,以便其他人能夠輕易地了解電路的設計意義。這至少意味著兩種重大的改變:
●設計電路可以透過文字描述的方式,完成設計工作。
●電子電路也可以當作文件一樣來儲存。
從VHDL每年能夠以超過30%的速度快速成長便可以知道VHDL電路設計語言不但功能強大,而且能夠滿足各個設計階層的設計工作,從ASIC設計到PCB 系統設計,都能夠輕易地達成設計工作者的需求。在產品更換快速的今天,VHDL 可以說是符合市場需求,VHDL有以下之優點:
●功能強大。
●設計靈活。
●有各種不同的描述風格。
●可流通性與可攜性。
本文將先就無號數整數乘法運算,以四位元乘四位元作解說。接著也可作有號數兩運算元之相乘;其次,載入STD_LOGIC_ARITH與TD_LOGIC_UNSIGNED元件盒之後,直接進行乘法運算;並以七段顯示器將其結果顯示出來。
貳.乘法器基本原理
兩個二進位數之相乘如十進位數相乘一樣。於圖1為四位元做徒手乘法運算圖。首先由右至左逐次檢查乘數位元是否為1,如為1,將被乘數做適當地移位至適當的位置;如為0,將0放置適當位置。其次將所有移位之被乘數求其和即為所得之積,此積應為八位元。圖2為乘法中硬體的運算情形[1-3],利用多重加法器來完成。即每一步中一個四位元加法器可用來計算其新的部分乘積。於計算進行時最不重要位元在連續加法中,並不受到影響;因此他們可直接放到最後之乘積中。
1000nd multiplica multiplier
1001X
partial partial partial product
nd multiplica 1000X 1001
multiplier
10000000000010001001000
product
山捻
徒手乘法圖.1乘法運算架構
圖.2 。
参. 乘法器製作概念
現在我們可以運用最簡單且直觀的方式來完成所需要的硬體電路描述,所
以在往後的程式中我們使用AND GATE 來做部分乘積的運算,使用全加器來計算部分乘積的最後結果。
下面為全加器的布林代數式: B A C S in ⊕⊕=
AB B C A C C in in out ++=
其中,A 、B 分別代表兩個輸入運算元;為前一個位元所作的加法進位,S 為相加後的結果;為相加後的進位,也就是連接至下一個全加器的。這兩個代數式是全加器中的內部運作,透過全加器的運算能將所有的部分乘積相加,以得到我們所要的乘積。 in C out C in C
經過上述乘法器原理之解説,我們可以將電路架構用較直觀的方式表現出來,如圖3.所示。我們將部分乘積分別放到PPXY 中,例如PP00,即代表乘數中第0個位元,和被乘數第0個位元作運算,其結果放置PP00,其他都依此類推。一個全加器有兩個輸出,一個為Sum ,另一個為Cout 。所以我們用PSXY 來表示第X 列的全加器運算出來的Sum ;用PCXY 來表示第X 列的全加器運算出來的Cout 。必須注意的是上面三列的全加器是用來做部分乘積相加的,而最底下的一組全加器是用來讓上一列之PS 和PC 的輸出,做完最後運算之後,再將結果傳送給P0至P7的Product ,這就是最後的結果。於是我們就可以直接用這架構圖和一些運算的方式,利用VHDL 來寫出乘法器的程式。
P 1P 2P 3P 4
P 5
P 6P 7P 乘法器電路架構圖
圖.3
肆.程式架構
根據圖3.乘法器電路架構圖,首先設計4 X 4乘法器程式架構如圖4。其次,如須擴充至16 X 16 乘法器,只須更改常數N 的設定值如圖5。我們更可以載入STD_LOGIC_ARITH 與STD_LOGIC_UNSIGNED 元件盒之後,直接進行乘法運算,既簡單又容易擴充。圖6.為簡便4 X 4乘法器程式架構;圖7.為七段顯示器程式架構;圖8.為4 X 4乘法器且以七段顯示器顯示之程式架構;圖9. 簡便16 X 16乘法器程式架構;圖10.帶符號之簡便4 X 4乘法器程式架構。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mult1_1 IS PORT ( a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
prod : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
314是什么节日
呆家家END mult1_1;
ARCHITECTURE mult1_arch OF mult1_1 IS
CONSTANT n:INTEGER :=4;
SUBTYPE PART IS STD_LOGIC_VECTOR(n-1 DOWNTO 0);
TYPE PARTS IS ARRAY(0 TO 4) OF PART;
SIGNAL pp,pc,ps:PARTS;
汤圆真实图片BEGIN
pgen:FOR j IN 0 TO n-1 GENERATE
科学小实验作文
pgen1:FOR k IN 0 TO n-1 GENERATE
pp(j)(k)<=a(k) AND b(j);
END GENERATE;
pc(0)(J)<='0';
END GENERATE;
借款申请书怎么写
pp(4)(3)<='0';
pp(4)(2)<='0';
pp(4)(1)<='0';
pp(4)(0)<='0';
ps(0)<=pp(0);
prod(0)<=pp(0)(0);
addr:FOR j IN 1 TO n-1 GENERATE
addc:FOR k IN 0 TO n-2 GENERATE
ps(j)(k)<=pp(j)(k) XOR pc(j-1)(k) XOR ps(j-1)(k+1);
pc(j)(k)<=(pp(j)(k) AND pc(j-1)(k)) OR (pp(j)(k) AND ps(j-1)(k+1)) OR (pc(j-1)(k) AND ps(j-1)(k+1));
END GENERATE;
诚信的名言prod(j)<=ps(j)(0);
ps(j)(n-1)<=pp(j)(n-1);
END GENERATE;
pc(1)(3)<='0';
pc(2)(3)<='0';
pc(3)(3)<='0';
ps(4)(0)<='0';