2-3- جمع کننده Carry Select Adder

‫پروژه اول درس ‪VHDL‬‬
‫نرجل راحم‬
‫نوش آبادی‬
‫‪[email protected]‬‬
‫چکيده ‪ -‬هدف از انجام این پروژه‪ ،‬آشنایی با چند نوع جمع کننده مختلف‪ ،‬پياده سازی آن‬
‫ها و مقایسه عملکرد آن ها از لحاظ سطح مصرفی و سرعت عملکرد می باشد‪ .‬هم چنين در‬
‫قسمت دوم با پياده سازی مدار یک دیکدر سون سگمنت و نحوه به کارگيری آن برای نمایش‬
‫حاصل جمع دو عدد چهاربيتی آشنا می شویم‪.‬‬
‫كليد واژه‪ -‬جمع کننده‪ ،‬دیکدر‪ ،‬سون سگمنت‪.‬‬
‫‪ -1‬مقدمه‬
‫همانطور که اشاره شد‪ ،‬در بخش او‬
‫این پروژه‪ ،‬با دو نوع جمشع کننشده‬
‫مختلف (‪ Carry Select Adder‬و ‪،)Carry Ripple Adder‬‬
‫و نحوه پياده سازی آن ها آشنا مش‬
‫شا را از‬
‫شرد آن هش‬
‫شمل رملکش‬
‫شوی س سش‬
‫شش‬
‫لحاظ سطح مصرف و سررت مقایسه مش‬
‫کني س‬
‫در بخ دوم‪ ،‬مدار یک دیکشدر سشون‬
‫سگمنت را پياده سازی نمشوده و بشا‬
‫نحوه به کشاریيری آن بشرای نمشای‬
‫حاصل جمع دو ردد چهاربيت آشنا م‬
‫شوی س‬
‫الزم به ذکر است که تمام شبيه سازی‬
‫هااا بااا اسااتداده از ناارم افاا ار‬
‫‪ ModelSim‬انجام شده اند‪.‬‬
‫‪ -2‬جمع کننده ها‬
‫جمع کننده هشا یکش از بلشوا هشای‬
‫شه‬
‫اصل در پردازش هشای دییيتشا بش‬
‫شيار‬
‫شای بسش‬
‫شدس روش هش‬
‫شمار م ش آینش‬
‫شش‬
‫متنور بشه منوشور پيشاده سشازی و‬
‫بهبود سشطح مصشرف ‪ ،‬اشوان مصشرف ‪،‬‬
‫سررت و سسس برای این مدارات مطشر‬
‫شده استس دو جمع کننده اصل که در‬
‫این پروژه با آن ها آشنا م ششوی‬
‫رباراند از ‪ Carry Select Adder:‬و ‪Carry Ripple‬‬
‫‪Adder‬س‬
‫‪ -1-2‬جمع کننده با استداده از‬
‫دستور جمع معمولی‬
‫با استفاده از دستور جمشع مممشول‬
‫‪1‬‬
‫"‪ "a+b‬برنامه اي بنویسيد که میمشوع‬
‫شدس‬
‫شته باشش‬
‫شدد ‪ 4‬بيت ش را داشش‬
‫دو رش‬
‫ارششداد را بششدون ردمششت در نوششر‬
‫بگيرید‪:‬‬
‫;‪LIBRARY ieee‬‬
‫;‪USE ieee.std_logic_1164.all‬‬
‫;‪USE ieee.std_logic_unsigned.all‬‬
‫‪ENTITY adder4 IS‬‬
‫;‪PORT ( Cin : IN STD_LOGIC‬‬
‫‪X, Y : IN STD_LOGIC_VECTOR(3‬‬
‫;)‪DOWNTO 0‬‬
‫‪S‬‬
‫‪: OUT STD_LOGIC_VECTOR(3‬‬
‫;)‪DOWNTO 0‬‬
‫‪Cout‬‬
‫‪:OUT‬‬
‫;) ‪STD_LOGIC‬‬
‫;‪END adder4‬‬
‫‪ARCHITECTURE Behavior OF adder4 IS‬‬
‫‪SIGNAL Sum : STD_LOGIC_VECTOR(4‬‬
‫;)‪DOWNTO 0‬‬
‫‪BEGIN‬‬
‫;‪Sum <= ('0' & X) + Y + Cin‬‬
‫;)‪S <= Sum(3 DOWNTO 0‬‬
‫;)‪Cout <= Sum(4‬‬
‫;‪END Behavior‬‬
‫است بنچ الزم برای شبيه سشازی ایشن‬
‫قسمت در ادامه آمده است‪:‬‬
‫; ‪LIBRARY ieee‬‬
‫; ‪USE ieee.std_logic_1164.all‬‬
‫; ‪USE ieee.std_logic_unsigned.all‬‬
‫‪ENTITY adder4_testbench IS‬‬
‫;‪END adder4_testbench‬‬
‫‪ARCHITECTURE input OF adder4_testbench IS‬‬
‫‪COMPONENT ad4 IS‬‬
‫; ‪PORT ( Cin : IN STD_LOGIC‬‬
‫ این جمشع کننشده در سشطح‬2 ‫در شکل‬
‫یيت نشان داده شده استس برنامه اي‬
Carry Ripple ‫بنویسيد که با استفاده از‬
‫ بيت به همراه یک‬4 ‫ دو ردد‬،Adder
‫بيت نقل را در ورودي بگيرد و یشک‬
‫ بيت به همراه رقش نقلش‬4 ‫رروج‬
:‫رروج را اوليد نماید‬
X, Y : IN STD_LOGIC_VECTOR(3
DOWNTO 0) ;
S
: OUT STD_LOGIC_VECTOR(3
DOWNTO 0) ;
Cout : OUT STD_LOGIC ) ;
END COMPONENT;
FOR a1 : ad4 USE ENTITY WORK.adder4;
SIGNAL Cin : STD_LOGIC := '1';
SIGNAL X , Y
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL S
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL Cout : STD_LOGIC;
BEGIN
a1 : ad4 PORT MAP (Cin,X, Y,S,Cout);
a2 : X <= "0010" AFTER 10 NS, "1001" AFTER20 NS,
"0110" AFTER 30 NS, "1010" AFTER 40 NS, "1110"
AFTER 50 NS;
a3 : Y <= "0101" AFTER 10 NS, "0111" AFTER20 NS,
"1100" AFTER 30 NS, "1011" AFTER 40 NS, "1110"
AFTER 50 NS;
END input;
Carry Ripple
‫زیشر مش‬
‫ سارتار جمع کننده‬:1 ‫شکل‬
‫ در سطح یيتس‬Adder
‫برنامه مورد نياز به شر‬
:‫باشد‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY ripple_carry4 IS
PORT (carry_in
: IN STD_LOGIC ;
e, f
: IN STD_LOGIC_VECTOR(3
DOWNTO 0) ;
S
: OUT STD_LOGIC_VECTOR(3
DOWNTO 0) ;
carry_out
: OUT STD_LOGIC ) ;
END ripple_carry4;
ARCHITECTURE Structural1 OF ripple_carry4 IS
COMPONENT fulladder IS
PORT(a,b,ci:IN
STD_LOGIC;s,co:OUT
STD_LOGIC);
END COMPONENT;
SIGNAL C1,C2,C3 : STD_LOGIC;
BEGIN
F1
:
fulladder
PORT
MAP
(e(0),f(0),carry_in,S(0),C1);
F2 : fulladder PORT MAP (e(1),f(1),C1,S(1),C2);
F3 : fulladder PORT MAP (e(2),f(2),C2,S(2),C3);
F4
:
fulladder
PORT
MAP
Carry Ripple Adder
‫ جمع کننده‬-2-2
‫شارتارها در‬
‫شرین سش‬
‫شاده اش‬
‫یک ش از سش‬
‫ سشارتار‬،‫پياده سازي جمع کننده ها‬
‫ است که مدار آن بشراي‬Carry Ripple Adder
‫ نمشای‬1 ‫ بيت در شکل‬4 ‫ورودي هاي‬
:‫داده شده است‬
Carry Ripple
‫ سارتار جمع کننده‬:1 ‫شکل‬
‫س‬Adder
‫در این جمع کننده که هشر ببقشه آن‬
)Full Adder( ‫از یک جمشع کننشده کامشل‬
‫ برای محاسبه حاصشل‬،‫سارته شده است‬
‫جمع هر ببقه الزم است که بيت نقلش‬
‫ببقه قبل محاسشبه ششودس بنشابراین‬
‫شده سشررت پشایين‬
‫این نوع جمع کننش‬
‫داردس بوالن ارین مسيری کشه منیشر‬
،‫به بيشترین مقدار اأرير مش ششود‬
‫مسير بيت نقل ورودی به بيت نقلش‬
‫رروج م باشدس‬
2
(e(3),f(3),C3,S(3),carry_out);
a3 : f <= "0001" AFTER 10 NS, "0101" AFTER
20 NS, "1000" AFTER 30 NS, "0011" AFTER 40 NS,
"1110" AFTER 50 NS;
END input_output ;
Carry Select Adder ‫ جمع کننده‬-3-2
،‫از برنامه نوشته شده در قسمت قبل‬
‫ششازید و آن را در‬
‫ششه بسش‬
‫ششک نمونش‬
‫یش‬
‫شوان‬
‫شده زی شر فرارش‬
‫شه داده شش‬
‫برنامش‬
‫کنيدس نحوه رملکرد یک جمشع کننشده‬
‫ را شر دهيشد و مسشير‬Carry Select Adder
‫بحران آن را با جمع کننشده قسشمت‬
‫قبل مقابسه کنيدس‬
‫ یشک جمشع‬،‫همانطور کشه اششاره ششد‬
‫ به رلشت اشأرير‬Carry Ripple Adder ‫کننده‬
‫ سشررت‬، ‫در انتشار مقدار بيت نقلش‬
Carry
‫پایين داردس در جمشع کننشده‬
‫ سم شده به نحوی این مشکل‬Select Adder
‫بربرف شود؛ بدین صشورت کشه ابتشدا‬
‫حاصل جمع به ازای هر دو حالت ممکن‬
‫ بشا‬،)‫بيت نقل ورودی (صفر یا یشک‬
Carry Ripple ‫استفاده از دو جمع کننده‬
‫ به صشورت مشوازی محاسشبه مش‬Adder
‫شودس در این حالت نيازی نيسشت کشه‬
‫صبر ششود اشا بيشت نقلش ورودی از‬
‫ببقه قبل برسد اا رمل جمشع انیشام‬
‫شودس پل از محاسبه دو مقدار ممکشن‬
‫شالت‬
‫شک مش‬
‫شتفاده از یش‬
‫شا اسش‬
‫ بش‬،‫شع‬
‫جمش‬
‫پلکسر و بيت نقل ورودی (که اکنون‬
‫مقدار آن در ببقه قبل محاسبه ششده‬
‫و به این ببقه رسشيده) حاصشل جمشع‬
‫صحيح انتخاب م شودس در این صشورت‬
‫مقدار اأرير کشاه یافتشه و سشررت‬
‫ بيششتر از حالشت‬،‫محاسبه حاصل جمع‬
‫ رواهد بودس‬Carry Ripple Adder
:‫برنامه‬
library IEEE;
use ieee.std_logic_1164.all;
ENTITY carry_select4 IS
PORT( c, d : IN std_logic_vector( 3 downto 0);
C_input : IN std_logic;
Result : OUT std_logic_vector( 3 downto 0);
C_output : OUT std_logic);
END carry_select4;
ARCHITECTURE RTL OF carry_select4 IS
COMPONENT ripple_carry4
PORT( e, f : in std_logic_vector( 3 downto 0);
carry_in : in std_logic;
S : out std_logic_vector( 3 downto 0);
carry_out : out std_logic);
END Structural1;
--------------------------------------------------------------LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY fulladder IS
PORT(a,b,ci:IN
STD_LOGIC);
END fulladder;
STD_LOGIC;s,co:OUT
ARCHITECTURE Structural2 OF fulladder IS
SIGNAL g1,p1,p10 : STD_LOGIC;
BEGIN
u1 : g1 <= a AND b;
u2 : p10 <= ci AND p1;
u3 : p1 <= a XOR b;
u4 : s <= ci XOR p1;
u5 : co <= g1 OR p10;
END Structural2;
‫است بنچ الزم برای شبيه سشازی ایشن‬
‫قسششمت را در ادامششه مشششاهده مشش‬
:‫نمایيد‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY ripple_carry4_testbench IS
END ripple_carry4_testbench;
ARCHITECTURE
input_output
OF
ripple_carry4_testbench IS
COMPONENT rc4 IS
PORT (carry_in
: IN STD_LOGIC ;
e, f
: IN STD_LOGIC_VECTOR(3
DOWNTO 0) ;
S
: OUT STD_LOGIC_VECTOR(3
DOWNTO 0) ;
carry_out
: OUT STD_LOGIC ) ;
END COMPONENT;
FOR a1:rc4 USE ENTITY WORK.ripple_carry4;
SIGNAL carry_in : STD_LOGIC := '1';
SIGNAL e , f
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL S
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL carry_out : STD_LOGIC;
BEGIN
a1 : rc4 PORT MAP (carry_in,e,f,S,carry_out);
a2 : e <= "0000" AFTER 10 NS, "0001" AFTER
20 NS, "0110" AFTER 30 NS, "1001" AFTER 40 NS,
"1110" AFTER 50 NS;
3
n
‫ بيتی‬n ‫ برنامه ها برای حالت‬-4-2
END component;
‫ بشرای حالشت‬Carry Ripple Adder ‫برنامه‬
: ‫بيت‬
For S0: ripple_carry4 Use entity work.ripple_carry4;
For S1: ripple_carry4 Use entity work.ripple_carry4;
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY ripple_carryn IS
GENERIC(n : INTEGER :=8);
PORT (
carry_in
: IN STD_LOGIC ;
e, f
: IN STD_LOGIC_VECTOR(n-1
DOWNTO 0) ;
S
: OUT STD_LOGIC_VECTOR(n-1
DOWNTO 0) ;
carry_out
: OUT STD_LOGIC ) ;
:‫است بنچ الزم برای شبيه سازی‬
END ripple_carryn;
library IEEE;
use ieee.std_logic_1164.all;
ARCHITECTURE Structural1 OF ripple_carryn IS
COMPONENT fulladder IS
PORT(a,b,ci:IN
STD_LOGIC;s,co:OUT
STD_LOGIC);
END COMPONENT;
SIGNAL
DOWNTO 0);
C
signal SUM0, SUM1 : std_logic_vector( 3 downto 0 );
signal carry0, carry1 : std_logic;
signal zero, one : std_logic;
begin
zero<='0';
one<='1';
S0:
ripple_carry4
port
map(
e=>c,
f=>d,
carry_in=>zero, S=>SUM0, carry_out=>carry0 );
S1: ripple_carry4 port map( e=>c, f=>d, carry_in=>one,
S=>SUM1, carry_out=>carry1 );
Result<=SUM0 when C_input='0' else SUM1 when
C_input='1' else "ZZZZ";
C_output<= (C_input and carry1) or carry0;
end;
:
STD_LOGIC_VECTOR(n-1
BEGIN
F0: fulladder
PORT
(e(0),f(0),carry_in,S(0),C(1));
F1 : FOR i IN 1 TO n-2 GENERATE
F2:
fulladder
PORT
(e(i),f(i),C(i),S(i),C(i+1));
END GENERATE;
MAP
MAP
END Structural1;
--------------------------------------------------------------LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY fulladder IS
PORT(a,b,ci : IN STD_LOGIC; s,co : OUT
STD_LOGIC);
END fulladder;
SIGNAL g1,p1,p10 : STD_LOGIC;
BEGIN
u1 : g1 <= a AND b;
u2 : p10 <= ci AND p1;
ARCHITECTURE in_out OF carry_select4_testbench IS
COMPONENT cs4 IS
port( c, d : in std_logic_vector( 3 downto 0);
C_input : in std_logic;
Result : out std_logic_vector( 3 downto 0);
C_output : out std_logic);
END COMPONENT;
FOR a1:cs4 USE ENTITY WORK.carry_select4;
FF: fulladder PORT MAP (e(n-1), f(n-1), C(n-1),
S(n-1), carry_out);
ARCHITECTURE Structural2 OF fulladder IS
ENTITY carry_select4_testbench IS
END carry_select4_testbench;
SIGNAL C_input : STD_LOGIC:='1';
SIGNAL c , d
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL Result
: STD_LOGIC_VECTOR(3
DOWNTO 0) ;
SIGNAL C_output : STD_LOGIC;
BEGIN
a1
:
cs4
(c,d,C_input,Result,C_output);
PORT
MAP
a2 : c <= "0000" AFTER 10 NS, "0001" AFTER
20 NS, "0110" AFTER 30 NS, "1001" AFTER 40 NS,
"1110" AFTER 50 NS;
a3 : d <= "0001" AFTER 10 NS, "0101" AFTER
20 NS, "1000" AFTER 30 NS, "0011" AFTER 40 NS,
"1110" AFTER 50 NS;
END in_out ;
4
port( e, f : in std_logic_vector( n-1 downto 0);
carry_in : in std_logic;
S : out std_logic_vector( n-1 downto 0);
carry_out : out std_logic);
end component;
u3 : p1 <= a XOR b;
u4 : s <= ci XOR p1;
u5 : co <= g1 OR p10;
END Structural2;
:‫و است بنچ در این حالت‬
For all: ripple_carryn Use entity work.ripple_carryn;
signal SUM0, SUM1 : std_logic_vector( n-1 downto 0 );
signal carry0, carry1 : std_logic;
signal zero, one : std_logic;
begin
zero<='0';
one<='1';
S0:
ripple_carryn
port
map(
e=>c,
f=>d,
carry_in=>zero, S=>SUM0, carry_out=>carry0 );
S1: ripple_carryn port map( e=>c, f=>d, carry_in=>one,
S=>SUM1, carry_out=>carry1 );
Result<=SUM0 when C_input='0' else SUM1 when
C_input='1' else "ZZZZ";
C_output<= (C_input and carry1) or carry0;
end;
:‫و سرانیام است بنچ این قسمت‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
ENTITY ripple_carryn_testbench IS
END ripple_carryn_testbench;
ARCHITECTURE
input_output
OF
ripple_carryn_testbench IS
COMPONENT rcn IS
PORT (carry_in
: IN STD_LOGIC ;
e, f
: IN STD_LOGIC_VECTOR(7
DOWNTO 0) ;
S
: OUT STD_LOGIC_VECTOR(7
DOWNTO 0) ;
carry_out
: OUT STD_LOGIC ) ;
END COMPONENT;
library IEEE;
use ieee.std_logic_1164.all;
FOR a1:rcn USE ENTITY WORK.ripple_carryn;
ENTITY carry_selectn_testbench IS
END carry_selectn_testbench;
ARCHITECTURE in_out OF carry_selectn_testbench IS
COMPONENT csn IS
GENERIC(n : INTEGER :=8);
port( c, d : in std_logic_vector( n-1 downto 0);
C_input : in std_logic;
Result : out std_logic_vector( n-1 downto 0);
C_output : out std_logic);
END COMPONENT;
FOR a1:csn USE ENTITY WORK.carry_selectn;
SIGNAL n : INTEGER :=8;
SIGNAL C_input : STD_LOGIC:='1';
SIGNAL c , d
: STD_LOGIC_VECTOR(n-1
DOWNTO 0) ;
SIGNAL Result : STD_LOGIC_VECTOR(n-1
DOWNTO 0) ;
SIGNAL C_output : STD_LOGIC;
BEGIN
a1
:
csn
(c,d,C_input,Result,C_output);
PORT
MAP
a2 : c <= "00000000" AFTER 0 NS, "00000001"
AFTER 10 NS, "10000110" AFTER 20 NS,
"00101001" AFTER 30 NS, "00111110" AFTER 40 NS;
a3 : d <= "00000001" AFTER 0 NS, "11110101"
AFTER 10 NS,"01011000" AFTER 20 NS,
"11000011" AFTER 30 NS, "00001110" AFTER 40 NS;
SIGNAL carry_in : STD_LOGIC := '1';
SIGNAL e , f
: STD_LOGIC_VECTOR(7
DOWNTO 0) ;
SIGNAL S
: STD_LOGIC_VECTOR(7
DOWNTO 0) ;
SIGNAL carry_out : STD_LOGIC;
BEGIN
a1 : rcn PORT MAP (carry_in,e,f,S,carry_out);
a2 : e <= "00000000" AFTER 10 NS, "00000001"
AFTER 20 NS, "01001001" AFTER 30 NS,
"10010010" AFTER 40 NS, "10100100" AFTER 50 NS;
a3 : f <= "00010010" AFTER 10 NS, "00011101"
AFTER 20 NS, "10001111" AFTER 30 NS,
"00100110" AFTER 40 NS, "11101101" AFTER 50 NS;
END input_output ;
n
‫ بشرای حالشت‬Carry Select Adder ‫برنامه‬
: ‫بيت‬
library IEEE;
use ieee.std_logic_1164.all;
entity carry_selectn is
GENERIC(n : INTEGER :=8);
port( c, d : in std_logic_vector( n-1 downto 0);
C_input : in std_logic;
Result : out std_logic_vector( n-1 downto 0);
C_output : out std_logic);
end carry_selectn;
architecture RTL of carry_selectn is
component ripple_carryn
5
ENTITY sevenseg_decoder_testbench IS
END sevenseg_decoder_testbench;
END in_out ;
‫ سون سگمنت‬-3
ARCHITECTURE test OF sevenseg_decoder_testbench
IS
COMPONENT sevseg_decod IS
PORT (
BCD:
in
STD_LOGIC_VECTOR (3 downto 0);
LED:
out
STD_LOGIC_VECTOR (6
downto 0) ) ;
END COMPONENT;
FOR
a1:sevseg_decod
WORK.sevenseg_decoder;
SIGNAL BCD
downto 0) := "0000";
SIGNAL LED
DOWNTO 0);
USE
ENTITY
‫در این قسمت به پياده سازی‬
‫مدارات مربوط به سون سگمنت م‬
‫پردازی س‬
7-Segment Decoder
‫ طراحی‬-1-3
‫مداری براح کنيد که ارداد ورودی‬
7- ‫ روی‬،3 ‫ را مطابق شکل‬9 ‫ اا‬0 ‫بين‬
‫ نمای دهدس‬Segment
: STD_LOGIC_VECTOR(3
: STD_LOGIC_VECTOR(6
BEGIN
a1 : sevseg_decod PORT MAP (BCD,LED);
a2 : BCD <= "0001" AFTER 10 NS,"0010"
AFTER 20 NS,"0110" AFTER 30 NS, "1001" AFTER 40
NS,"1110" AFTER 50 NS;
‫دیکدر به سون سگمنتس‬
‫ ااصا‬:3 ‫شکل‬
END test ;
‫ بيتی‬4 ‫ نمایش مجموع دو عدد‬-2-3
7-Segment ‫روی دو عدد‬
‫با اوجه به اینکه میموع دو ردد‬
‫در‬
‫به همراه بيت نقل‬
‫چهاربيت‬
‫بازه بين صفر اا س و یک قرار م‬
‫ برای امام حالت های ممکن‬،‫یيرد‬
‫ به دو سون سگمنت مقدار‬،‫حاصل جمع‬
‫ را‬1 ‫م دهي س در ضمن سون سگمنت‬
‫ را سمت چپ در نور م‬2 ‫سمت راست و‬
‫یيری س‬
:‫برنامه‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY sevenseg_sum IS
PORT ( sum : in STD_LOGIC_VECTOR (3 downto 0);
carry : in STD_LOGIC;
seg1 , seg2 : out
STD_LOGIC_VECTOR (6
downto 0)) ; --seg1:right , seg2:left
:‫برنامه الزم‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY sevenseg-decoder IS
PORT ( BCD: in STD_LOGIC_VECTOR (3 downto 0);
LED :out STD_LOGIC_VECTOR (6 downto 0));
END sevenseg_decoder;
ARCHITECTURE truth_table1 OF sevenseg_decoder IS
BEGIN
with BCD SELECT
LED<= "1111001" when "0001", --1
"0100100" when "0010", --2
"0110000" when "0011", --3
"0011001" when "0100", --4
"0010010" when "0101", --5
"0000010" when "0110", --6
"1111000" when "0111", --7
"0000000" when "1000", --8
"0010000" when "1001", --9
"1000000" when others; --0
END sevenseg_sum;
END truth_table1;
:‫است بنچ‬
ARCHITECTURE truth_table2 OF sevenseg_sum IS
SIGNAL num : STD_LOGIC_VECTOR (4 downto 0);
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
6
"0100100" when "10100", --20
"0100100" when "10101", --21
"0100100" when "10110", --22
"0100100" when "10111", --23
"0100100" when "11000", --24
"0100100" when "11001", --25
"0100100" when "11010", --26
"0100100" when "11011", --27
"0100100" when "11100", --28
"0100100" when "11101", --29
"0110000" when "11110", --30
"0110000" when "11111", --31
"1000000" when others; --0
BEGIN
num <= carry & sum;
END truth_table2 ;
:‫و است بنچ‬
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY sevenseg_sum_testbench IS
END sevenseg_sum_testbench;
ARCHITECTURE test OF sevenseg_sum_testbench IS
COMPONENT sevseg_sum IS
PORT (
sum
:
in
STD_LOGIC_VECTOR (3 downto 0);
carry : in STD_LOGIC;
seg1 , seg2 : out STD_LOGIC_VECTOR (6
downto 0) ) ;
END COMPONENT;
FOR a1 : sevseg_sum
WORK.sevenseg_sum;
USE
ENTITY
SIGNAL sum
: STD_LOGIC_VECTOR(3
downto 0) := "0000";
SIGNAL carry : STD_LOGIC := '1';
SIGNAL seg1 , seg2 : STD_LOGIC_VECTOR(6
DOWNTO 0);
BEGIN
a1
:
sevseg_sum
(sum,carry,seg1,seg2);
PORT
MAP
a2 : sum <= "0001" AFTER 10 NS,"0110"
AFTER 20 NS,"1110" AFTER 30 NS, "1001" AFTER 40
NS,"1111" AFTER 50 NS;
END test ;
‫ نتایج شبيه سازی ها‬-4
‫در این بخ نتایج شبيه سشازی اسشت‬
‫شرم‬
‫شتفاده از نش‬
‫شا اسش‬
‫شا را بش‬
‫شنچ هش‬
‫بش‬
:‫ مدحوه م کنيد‬ModelSim ‫افزار‬
WITH num SELECT
seg1<= "1111001" when "00001", --1
"0100100" when "00010", --2
"0110000" when "00011", --3
"0011001" when "00100", --4
"0010010" when "00101", --5
"0000010" when "00110", --6
"1111000" when "00111", --7
"0000000" when "01000", --8
"0010000" when "01001", --9
"1000000" when "01010", --10
"1111001" when "01011", --11
"0100100" when "01100", --12
"0110000" when "01101", --13
"0011001" when "01110", --14
"0010010" when "01111", --15
"0000010" when "10000", --16
"1111000" when "10001", --17
"0000000" when "10010", --18
"0010000" when "10011", --19
"1000000" when "10100", --20
"1111001" when "10101", --21
"0100100" when "10110", --22
"0110000" when "10111", --23
"0011001" when "11000", --24
"0010010" when "11001", --25
"0000010" when "11010", --26
"1111000" when "11011", --27
"0000000" when "11100", --28
"0010000" when "11101", --29
"1000000" when "11110", --30
"1111001" when "11111", --31
"1000000" when others; --0
WITH num SELECT
seg2<= "1000000" when "00001", --1
"1000000" when "00010", --2
"1000000" when "00011", --3
"1000000" when "00100", --4
"1000000" when "00101", --5
"1000000" when "00110", --6
"1000000" when "00111", --7
"1000000" when "01000", --8
"1000000" when "01001", --9
"1111001" when "01010", --10
"1111001" when "01011", --11
"1111001" when "01100", --12
"1111001" when "01101", --13
"1111001" when "01110", --14
"1111001" when "01111", --15
"1111001" when "10000", --16
"1111001" when "10001", --17
"1111001" when "10010", --18
"1111001" when "10011", --19
7
‫شکل ‪ :4‬شبيه سازی جمع کننده ‪ 4‬بيت‬
‫با استفاده از دستور جمع مممول س‬
‫شکل ‪ :5‬شبيه سازی ‪Carry Ripple Adder‬س‬
‫شکل ‪ :6‬شبيه سازی ‪Carry Select Adder‬س‬
‫شکل ‪ :7‬شبيه سازی ‪ Carry Ripple Adder‬در حالت ‪ n‬بيت‬
‫‪8‬‬
‫و ‪n=8‬س‬
‫س‬n=8 ‫و‬
‫ بيت‬n ‫ در حالت‬Carry Select Adder ‫ شبيه سازی‬:8 ‫شکل‬
‫س‬7seg decoder ‫ شبيه سازی‬:9 ‫شکل‬
‫س‬7seg ‫روی دو ردد‬
‫ بيت‬4 ‫میموع دو ردد‬
‫ نمای‬:9 ‫شکل‬
‫مراجع‬
[1]
Z. Navabi, VHDL Analysis & Modeling of Digital System. MC
Grow Hill, 1998.
9