שכפול מבניות באמצעות פקודה GENERATE

1
GENERATE ‫שכפול מבניות באמצעות פקודה‬
DFF 4 -‫דוגמא אוגר הזזה המורכב מ‬
DFF ‫תוכנית של‬
U1
clk
q
d
dff1
entity dff1 is
port(
clk,d:in bit;
q:out bit
);
end;
architecture dff of dff1 is
begin
process(clk)
begin
if clk'event and clk='1' then
q<=d;
end if;
end process;
end dff;
‫ סיביות‬4 ‫אוגר הזזה של‬
clk
U0
clk
d
d
dff1
U1
q
x0
clk
d
dff1
U2
q
x1
clk
d
dff1
U3
q
x2
clk
q
d
dff1
x3
q3
q2
q1
q0
‫ חיון אבי‬:‫ ערך‬ http://site.2all.co.il/hayun/ ‫ שכפול מבניות‬VHDL
2
:‫אם נרצה לכתוב את התוכנית ללא שכפול נכתוב את התוכנית הבאה‬
entity shift_register3 is
port(
clk:in bit;
d:in bit;
q:out bit_vector(3 downto 0)
);
end;
architecture reg of shift_register3 is
component dff1
port(
clk,d:in bit;
q:out bit
);
end component;
signal x:bit_vector(3 downto 0);
begin
u0:dff1 port map
(clk=>clk,d=>d,q=>x(0));
u1:dff1 port map
(clk=>clk,d=>x(0),q=>x(1));
u2:dff1 port map
(clk=>clk,d=>x(1),q=>x(2));
u3:dff1 port map
(clk=>clk,d=>x(2),q=>x(3));
q<=x;
end reg;
. q -‫ המתחבר בסוף ל‬X ‫ בשם‬signal ‫יש לשים לב שהוגדר‬
‫ של‬q ‫ למוצא‬FF-‫ של ה‬d ‫ תתקבל הודעת שגיאה לגבי החיבור בין כניסה‬q -‫אם נחבר ישירות ל‬
.‫האוגר‬
‫אותה תוכנית ע"י שכפול‬
entity shift_register2 is
port(
clk:in bit;
d:in bit;
q:out bit_vector(3 downto 0)
);
end;
architecture reg of shift_register2 is
component dff1
port(
clk,d:in bit;
q:out bit
);
end component;
signal x:bit_vector(3 downto 0);
‫ חיון אבי‬:‫ ערך‬ http://site.2all.co.il/hayun/ ‫ שכפול מבניות‬VHDL
3
begin
u0:dff1 port map
(clk=>clk,d=>d,q=>x(0));
gen_reg:
for i in 1 to 3 generate
un:dff1 port map
(clk=>clk,d=>x(i-1),q=>x(i));
end generate gen_reg;
q<=x;
end reg;
d-‫ ל‬q -‫ מ‬3 ‫ עד‬1-‫ וכל השאר בעזרת לולאה מ‬d -‫ הראשון מתחבר ישירות ל‬FF -‫ה‬
if…..generate ‫אותו תכנון עם שימוש בפקודת‬
entity shift_register is
port(
clk:in bit;
d:in bit;
q:out bit_vector(3 downto 0)
);
end;
architecture reg of shift_register is
component dff1
port(
clk,d:in bit;
q:out bit
);
end component;
signal x:bit_vector(3 downto 0);
begin
gen_reg:
for i in 0 to 3 generate
lsb: if i=0
generate
u0:dff1 port map
(clk=>clk,d=>d,q=>x(i));
end generate lsb;
bits:
if i>0
generate
un:dff1 port map
(clk=>clk,d=>x(i-1),q=>x(i));
end generate bits;
end generate gen_reg;
q<=x;
end reg;
‫ חיון אבי‬:‫ ערך‬ http://site.2all.co.il/hayun/ ‫ שכפול מבניות‬VHDL
4
Generic ‫ סיביות ע"י שימוש במשתנה‬n ‫שכפול כללי עבור‬
entity shift_generic is
generic
(n_bit:integer:=8);
-- 8 bit
port(
clk:in bit;
d:in bit;
q:out bit_vector(n_bit-1 downto 0)
);
end;
architecture reg of shift_generic is
component dff1
port(
clk,d:in bit;
q:out bit
);
end component;
signal x:bit_vector(n_bit-1 downto 0);
begin
u0:dff1 port map
(clk=>clk,d=>d,q=>x(0));
gen_reg:
for i in 1 to (n_bit-1) generate
un:dff1 port map
(clk=>clk,d=>x(i-1),q=>x(i));
end generate gen_reg;
q<=x;
end reg;
‫ חיון אבי‬:‫ ערך‬ http://site.2all.co.il/hayun/ ‫ שכפול מבניות‬VHDL