תרגילים - Private Backup

‫‪ 1‬‬
‫תרגילים ב‪VHDL -‬‬
‫תרגיל ‪1‬‬
‫‪S‬‬
‫‪A‬‬
‫‪F‬‬
‫נתון ‪ buffer ‬הפועל עם עכבה גבוהה ‪ Z‬לפי טבלת אמת הבאה‪:‬‬
‫‪F‬‬
‫עכבה גבוהה‬
‫‪ Z‬‬
‫‪ A‬‬
‫‪ ‬‬
‫‪S‬‬
‫‪0‬‬
‫‪1‬‬
‫א‪ .‬כתוב תוכנית ב‪ VHDL-‬למימוש הרכיב ‪ ‬‬
‫‪ ‬‬
‫ב‪ .‬המעגל הבא מורכב מהרכיב הנ"ל ‪ ‬‬
‫‪ ‬‬
‫‪s1‬‬
‫‪x‬‬
‫‪fout‬‬
‫‪s2‬‬
‫‪y‬‬
‫כתוב תוכנית בעזרת פקודת ‪port map ‬‬
‫‪ VHDL‬תרגיל ‪1‬‬
‫חיון אבי ויואל כהן ‪ ‬‬
2
'‫ השלם את הטבלה הבאה עבור המעגל בסעיף ב‬.‫ג‬
S1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
S2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
x
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
y
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Fout
2 ‫תרגיל‬
:‫נתונה התוכנית‬
entity exam3 is
port (
A: in BIT_VECTOR (3 downto 0);
F,V,W: out BIT_VECTOR (3 downto 0)
);
end ;
architecture exam3 of exam3 is
begin
F<='0'& A(3 downto 1);
V<= ('1'& A(2)& A(0)& '0');
W<= not(A);
end;
‫ אם‬F,V,W ‫מה יהיה תוכן‬
A="0101" ‫חיון אבי ויואל כהן‬
1 ‫ תרגיל‬VHDL
3
3 ‫תרגיל‬
VHDL ‫לפניך תוכנית בשפת חומרה‬
.‫ הסבר מה עושה התוכנית‬.‫א‬
y ‫ מה ערך המוצא‬, e=1 -‫ ו‬data=1101 ‫ אם‬.‫ב‬
ENTITY x
IS
PORT ( clk, e, rl : IN BIT;
data
: IN BIT_VECTOR (3 DOWNTO 0);
y
: OUT BIT_VECTOR (3 DOWNTO 0));
END;
ARCHITECTURE
behave OF x
IS
BEGIN
PROCESS (clk, e )
variable temp : BIT_VECTOR ( 3 DOWNTO 0 );
BEGIN
IF e='1'
THEN
temp :=
data;
ELSIF clk'EVENT AND clk='1' THEN
CASE
rl
IS
WHEN '0'
=> temp :=
'0' & temp (3 DOWNTO 1);
WHEN '1'
=> temp :=
temp(2 DOWNTO 0) & '0';
END CASE;
END IF;
Y<= temp;
END PROCESS;
END behave;
(rl=0) Y ‫ השלם את המוצא‬.‫ג‬
50
100
150
200
250
300
350
400
450
500
550
600
650
ns
650
ns
clk
e
rl
data
1101
y
(rl=1) Y ‫ השלם את המוצא‬.‫ד‬
50
100
150
200
250
300
350
400
450
500
550
600
clk
e
rl
data
1101
y
‫חיון אבי ויואל כהן‬
1 ‫ תרגיל‬VHDL
‫‪ 4‬‬
‫תרגיל ‪4‬‬
‫נתונה המערכת הבאה הכוללת ‪ DFF 3‬הפעילים בעליית שעון ושער ‪AND‬‬
‫‪ck‬‬
‫‪U4‬‬
‫‪net3‬‬
‫‪q‬‬
‫‪U3‬‬
‫‪net2‬‬
‫‪clk‬‬
‫‪q‬‬
‫‪clk‬‬
‫‪d‬‬
‫‪d‬‬
‫‪dff1‬‬
‫‪dff1‬‬
‫‪U2‬‬
‫‪net1‬‬
‫‪q‬‬
‫‪clk‬‬
‫‪din‬‬
‫‪d‬‬
‫‪dff1‬‬
‫‪U1‬‬
‫‪I2‬‬
‫‪O‬‬
‫‪out1‬‬
‫‪I1‬‬
‫‪I0‬‬
‫א‪ .‬תכנן את ה‪) DFF -‬שם ‪ (dff1‬ואת שער ‪) AND‬שם ‪ (and3‬‬
‫ב‪ .‬כתוב תוכנית למערכת הכוללת בעזרת פקודת ‪ ,port map ‬השתמש ב‪component -‬‬
‫‪ DFF1,AND3 ‐ ‬לבניית המערכת‪ .‬‬
‫תרגיל ‪5‬‬
‫נתון מרבב ‪ 4‬ל‪1-‬‬
‫‪S1 S0 output‬‬
‫‪output‬‬
‫‪d0‬‬
‫‪d1‬‬
‫‪d2‬‬
‫‪d3‬‬
‫‪s0‬‬
‫‪ d0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪d1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪d2‬‬
‫‪0‬‬
‫‪1‬‬
‫‪ d3‬‬
‫‪1‬‬
‫‪1‬‬
‫‪s1‬‬
‫‪mux4to1‬‬
‫א‪ .‬כתוב תוכנית לרכיב הנ"ל תוך שימוש ב‪ PROCESS -‬‬
‫ב‪ .‬כתוב תוכנית ל‪ MUX-‬מ‪ 256-‬ל‪ 1-‬‬
‫הערה‪ :‬הגדר את ‪ D‬כווקטור של ‪ 256‬סיביות ואת ‪ S ‬כמשתנה ‪ INTEGER‬‬
‫‪ ‬‬
‫‪ VHDL‬תרגיל ‪1‬‬
‫חיון אבי ויואל כהן ‪ ‬‬
5
6 ‫תרגיל‬
‫נתונה תוכנית למונה‬
ENTITY counter1 IS
PORT
(
clk : IN BIT;
clear : IN BIT;
q : OUT INTEGER RANGE 0 TO 255
);
END counter1;
ARCHITECTURE count OF counter1 IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF clear = '0' THEN
cnt := 0;
ELSE
cnt := cnt + 1;
END IF;
END IF;
q <= cnt;
END PROCESS;
END count;
‫ הסבר כיצד סופר המונה‬.‫א‬
(‫ )רשום רק את השינוי‬99 ‫ שנה את התוכנית כך שהמונה יספור עד‬.‫ב‬
(‫ שנה את התוכנית כן שהוא יהיה אסינכרוני )רשום רק את השינוי‬,‫ הוא סינכרוני‬Clear .‫ג‬
50-‫ וקטן מ‬20-‫' כאשר המונה יהיה בעל ערך הגדול מ‬1' ‫ שיוציא‬F ‫ הוסף למונה יציאה בשם‬.‫ד‬
‫חיון אבי ויואל כהן‬
1 ‫ תרגיל‬VHDL
6
7 ‫תרגיל‬
:‫נתונה התוכנית הבאה‬
ENTITY XXX IS
PORT
(
clk : IN BIT;
clear : IN BIT;
q : OUT BIT
);
END;
ARCHITECTURE X OF XXX IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 9;
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF clear = '0' THEN
cnt := 0;
ELSIF (cnt<9) THEN
cnt := cnt + 1;
ELSE
cnt := 0;
END IF;
END IF;
IF (cnt>2) THEN
q <= '0';
ELSE
q <= '1';
END IF;
END PROCESS;
END X;
ck ‫ מחזורי שעון‬20 ‫ עבור‬clear=1 ‫ כאשר‬cnt ‫ והמשתנה‬q ‫שרטט את גל המוצא‬
8 ‫תרגיל‬
,‫ הפעיל בעלייה‬ clk ‫מטה עם מבוא‬-‫( מעלה‬0-9) BCD ‫ אשר למונה‬VHDL ‫כתוב תוכנית בשפת‬
.‫' סופר מטה‬0'-‫' שהמונה סופר מעלה ו‬1' -‫ הקובע ב‬U_D ‫ סינכרוני הפעיל בגבוה ומבוא‬CLR ‫מבוא‬
‫חיון אבי ויואל כהן‬
1 ‫ תרגיל‬VHDL
‫‪ 7‬‬
‫תרגיל ‪9‬‬
‫נתונה תוכנית שסופרת מספר האחדים של הכניסה ‪ d‬‬
‫‪ENTITY count_value_1 IS‬‬
‫(‪PORT‬‬
‫;)‪d : IN BIT_VECTOR (99 DOWNTO 0‬‬
‫;)‪q : OUT INTEGER RANGE 0 TO 99‬‬
‫;‪END count_value_1‬‬
‫‪ARCHITECTURE maxpld OF count_value_1 IS‬‬
‫‪BEGIN‬‬
‫)‪PROCESS (d‬‬
‫;‪VARIABLE num_bits : INTEGER‬‬
‫‪BEGIN‬‬
‫;‪num_bits := 0‬‬
‫‪FOR i IN 0 to 99 LOOP‬‬
‫‪IF d(i) = '1' THEN‬‬
‫;‪num_bits := num_bits + 1‬‬
‫;‪END IF‬‬
‫;‪END LOOP‬‬
‫;‪q <= num_bits‬‬
‫;‪END PROCESS‬‬
‫;‪END maxpld‬‬
‫א‪ .‬הסבר את התוכנית ‪ ‬‬
‫ב‪ .‬מדוע קיימת ההשמה ‪ num_bits := 0‬‬
‫ג‪ .‬שנה את התוכנית כך שהמוצא ‪ q ‬יציג את מספר האפסים‪ .‬‬
‫ד‪ .‬שנה את התוכנית כך שהמוצא יציג פעולת ‪ XOR‬בין כל הסיביות של ‪ d‬‬
‫ה‪ .‬שנה את התוכנית כך שהמוצא יציג מספר המייצג את מספר האפסים עד ה‪ '1' -‬לוגי הימני‬
‫ביותר ‪ .‬‬
‫) לדוגמא אם ‪ d=…………….100000‬אז ‪ , q=5 ‬במקרה שכל הסיביות ‪ 0‬אז ‪(q=100‬‬
‫‪ VHDL‬תרגיל ‪1‬‬
‫חיון אבי ויואל כהן ‪ ‬‬
8
10 ‫תרגיל‬
signal -‫ ובתכנית השנייה כ‬variable -‫ מוגדר כ‬cnt ‫ בתוכנית אחת‬,‫נתונות שתי תוכניות של מונה‬
. ‫הסבר את ההבדלים בין התוכניות‬
1 ‫תוכנית‬
ENTITY counter1 IS
PORT ( clk,clear : IN BIT;
q : OUT INTEGER RANGE 0 TO 15 );
END counter1;
ARCHITECTURE count OF counter1 IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 15;
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF clear = '0' THEN
cnt := 0;
ELSE
cnt := cnt + 1;
cnt := cnt + 1;
END IF;
END IF;
q <= cnt;
END PROCESS;
END count;
2 ‫תוכנית‬
ENTITY counter2 IS
PORT( clk,clear : IN BIT;
q : OUT INTEGER RANGE 0 TO 15);
END counter2;
ARCHITECTURE count OF counter2 IS
signal cnt : INTEGER RANGE 0 TO 15;
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF clear = '0' THEN
cnt <= 0;
ELSE
cnt <= cnt + 1;
cnt <= cnt + 1;
END IF;
END IF;
END PROCESS;
q <= cnt;
END count;
‫חיון אבי ויואל כהן‬
1 ‫ תרגיל‬VHDL
‫‪ 9‬‬
‫תרגיל ‪11‬‬
‫‪ ‬נתונה מכונת המצבים הבאה‪:‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫"‪Q="00‬‬
‫"‪Q="01‬‬
‫‪S2‬‬
‫‪reset‬‬
‫‪S1‬‬
‫'‪x='0‬‬
‫'‪x='1‬‬
‫"‪Q="10‬‬
‫‪S3‬‬
‫כניסת המכונה ‪ CK :‬הפעיל בעליית שעון‪ reset ,‬אסינכרוני הפעיל ב‪ 1 -‬לוגי ו‪ x -‬‬
‫יציאת המכונה ‪ Q :‬בגודל ‪ 2‬סיביות‪.‬‬
‫כתוב תוכנית למימוש המכונה‪.‬‬
‫תרגיל ‪12‬‬
‫תכנן מכונת מצבים מסוג ‪ MOOR ‬המגלה את הקוד ‪110‬‬
‫כניסות המכונה – ‪ clk ‬פעיל בעליית שעון‪ x ,‬כניסת הקוד‪ reset ,‬סינכרוני פעיל בגבוה‬
‫מוצא ‪ q ‬לגילוי הקוד‬
‫‪ VHDL‬תרגיל ‪1‬‬
‫חיון אבי ויואל כהן ‪ ‬‬
‫‪ 10‬‬
‫תרגיל ‪13‬‬
‫נתונה מכונת מצבים למכונת כביסה‬
‫למכונה ‪ 4‬מצבים‪:‬‬
‫•‬
‫הכנסת מים‪ water -‬עד שהמים הגיעו לגובה עליון ‪ ‬‬
‫•‬
‫חימום – ‪ heat‬עד שהטמפ' הגיע לערך הרצוי ‪ ‬‬
‫•‬
‫הוצאת מים – ‪ pump‬עד שהמים הגיעו לגובה תחתון ‪ ‬‬
‫•‬
‫סיום ‪stop -‬‬
‫‪reset‬‬
‫'‪lev el_h='0‬‬
‫'‪Tem p ='0‬‬
‫'‪lev el_h='1‬‬
‫'‪H='1‬‬
‫‪heat‬‬
‫'‪W ='1‬‬
‫‪water‬‬
‫'‪Tem p ='1‬‬
‫‪stop‬‬
‫'‪P='1‬‬
‫‪pump‬‬
‫'‪lev el_L='1‬‬
‫'‪lev el_L='0‬‬
‫כתוב תוכנית למכונת ‪ MOOR‬הנ"ל ‪ ,‬השתמש בשני ‪ , PROCESS ‬אחד עבור המעבר בין המצבים‬
‫התלוי ב‪ CK-‬והשני התלוי במצב ‪STATE ‬‬
‫‪ VHDL‬תרגיל ‪1‬‬
‫חיון אבי ויואל כהן ‪ ‬‬