עבור לתוכן

מחפש מישהו שיודע VHDL ויכול לכתוב בשבילי תוכנית

Featured Replies

פורסם
  • מחבר

את הלימודים סיימתי מזמן ואת הידע שבקושי היה לי כבר נשכח.... ולהתחיל להתעסק בזה אני לא מתכוון.

אני צריך להגיש את ה"עבודה" הזאת במקום לגשת לבוחן ולקבל ציון סופי.

  • תגובות 37
  • צפיות 7.7k
  • נוצר
  • תגובה אחרונה
פורסם

לפי מה שהבנתי ממך, אתה רוצה מכונת מצבים עם 2 מצבים, כאשר במצבים האלה אתה פשוט סופר עד 15? (וכשאתה מגיע ל-15 מה אתה רוצה שיקרה?)

מה זאת אומרת 4 יציאות שסופרות את היציאות\כניסות ?

- אתה מתכוון למשתנה שמגודר בתור - Inout או Buffer פשוט בתוכנה?

שאלות כלליות:

יש לך דרישות מסיומת ממשתנים? (שיהיו בטיפוס מסיום?)

האם יש לך איזה שהוא ידע ב-VHDL - דבר הכי דוגרי?

פורסם
  • מחבר

אני רק מתאר את מה שנאמר לי לעשות ממש במילים אלה פחות או יותר, גם עניין ה4 יציאות.

אני צריך מכונת מצבים שתספור מעלה כאשר יש 1 בכניסה ומטה כאשר יש 0 בכניסה, כאשר זה מגיע ל0 או 15 זה נתקע עד שמתחלף המצב.

אין לי מושג מה זה אומר, זה מה שנאמר לי....

לגבי הבאפר זה לא נראה לי משנה כי מבחינת תוכנה זה אותו הדבר כל עוד זה לא בחומרה לא?

אין דרישות מסויימות למשתנים.

יש לי ידע ממש מינימלי, אבל לא משהו שאני יכול להשתמש בו.

תודה!

פורסם

אני צריך מכונת מצבים שתספור מעלה כאשר יש 1 בכניסה ומטה כאשר יש 0 בכניסה, כאשר זה מגיע ל0 או 15 זה נתקע עד שמתחלף המצב.

אז לפי המשפט הזה אני מבין שאתה רוצה שהוא יתקע במצב מסוים כל עוד הכניסה לא משתנה?

פורסם
  • מחבר

חיובי.

פורסם

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;


entity TEST is
port(
X : in std_logic; --X=1 - count up.
clk,reset : in std_logic
);
end entity;


architecture rtl of TEST is
signal counter : integer range 0 to 15;
type state_type is (up,down,idle);
-- Register to hold the current state
signal state : state_type;
begin
process(clk,reset,X) is
begin
if(reset = '1') then
state <= idle;
elsif (clk'event and clk = '1') then
case state is
when idle =>
if(X = '1') then
counter <= 0;
state <= up;
elsif(X = '0') then
counter <= 15;
state <= down;
end if;
when up =>
if(counter = 15) then
state <= idle;
else
counter <= counter +1;
end if;
when down =>
if(counter = 0) then
state <= idle;
else
counter <= counter - 1;
end if;
when others =>
state <= idle;
end case;
end if;
end process;end architecture;

כמה דברים:

1. עשיתי לך את הקוד תחת clk ו- reset אסינכורני (כך עובדים היום).

2. עשיתי לך מצב נוסף (idle) ששם הוא בוחר לפי הכניסה X את המצב המתאים.

3. לא הבנתי את הקטע של ה- 4 יציאות\כניסות - אז זה לא מופיע.

מפה נראה לי שתוכל להמשיך (לפי מה שהבנתי ממך, זה צריך להיות התרגיל, רק לא ברור לי רמת התרגיל).

בהצלחה.

פורסם
  • מחבר

יש לך מסר :hi:

פורסם

מצחיק... אני נותן תרגיל די דומה למהנדסים חדשים אצלנו כחלק מקורס פנימי ב-VHDL. מורכב יותר כמובן אבל באותו סגנון. :D

הרעיון הוא שיש לחניון מחסום יציאה ומחסום כניסה וסה"כ 15 מקומות חניה בחניון.

כל פעם שמחסום נפתח הוא שולח פולס למערכת הבקרה.

מערכת הבקרה צריכה:

1. לתת אינדיקציה תמידית כמה מקומות פנויים בחניון.

2. לסגור את מחסום הכניסה אם החניון מלא

3. לסגור את מחסום היציאה אם החניון ריק.

צריך לרשום ENTITY עם 2 הכניסות הנ"ל, יציאת בקרה למחסומים ו4bit לציון מספר המקומות הפנויים (בינארי). גם תוכנת הבדיקה צריכה לעבור על כל המצבים האפשריים - יותר מאתגר מהיחידה עצמה...

סה"כ תוכנית מאוד פשוטה, אבל צריך להגדיר מה קורה אם שניהם נפתחים בו זמנית, מה עושים במקרים "לא חוקיים", איך מאפסים את מערכת הבקרה וכדומה.

יש גם נושאים למתקדמים במשימה הזו כמו איך לא לפספס פולס, איך לא לספור אותו פעמיים, טיפול ב-spikes על הקווים וכדומה.

פורסם

הפולס שהוא שלוח הוא חיובי? - צריך לתפוס את עליית הפולס?

אתה מרצה במקרה? או מראיין עבודה?

פורסם
  • מחבר

אין צורך לסבך את התוכנית, משהו פשוט, לא צריך מערכת פידבקים או משהו כזה. משהו ממש פשוט.

פורסם


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;


entity TEST is
port(
clk : in std_logic;
reset : in std_logic;
GATE_in : in std_logic;
GATE_out : in std_logic;
Free_space : out std_logic_vector(3 downto 0);
X_in : out std_logic; --'0' - open gate, '1' -close gate
X_out : out std_logic --'0' - open gate, '1' -close gate
);
end entity;


architecture rtl of TEST is
signal f_free_space : std_logic_vector(3 downto 0);
signal counter : integer range 0 to 15;
type state_type is (up,down,idle,free);
-- Register to hold the current state
signal state : state_type;
begin
process(clk,reset,GATE_in,GATE_out) is
begin
if(reset = '1') then
counter <= 0;
f_free_space <= (others => '1');
X_in <= '0';
X_out <= '0';
state <= idle;
elsif (clk'event and clk = '1') then
case state is
when idle =>
if(GATE_in = '1') then
state <= up;
elsif(GATE_out = '1') then
state <= down;
end if;
when up =>
counter <= counter + 1;
f_free_space <= f_free_space - 1;
state <= free;
X_out <= '0';
when down =>
counter <= counter - 1;
f_free_space <= f_free_space + 1;
state <= free;
X_in <= '0';
when free =>
Free_space <= f_free_space;
state <= idle;
if(f_free_space = "1111") then
X_out <= '1';
elsif(f_free_space = "0000") then
X_in <= '1';
end if;
end case;
end if;
end process;
end architecture;

זאת התוכנית המאוד פשוטה ש tmpusr דיבר עליה.

אני כרגע בשלבים של לפענח בעיה שנוצרה לי בקוד המורכב יותר, לאחר-מכן אני אפרסם גם את הקוד המורכב יותר

פורסם
  • מחבר

זאת בעצם תוכנית לשער אחד נכון?

פורסם

שער כניסה ושער יציאה, כאשר יש 15 מקומות.

Free_space - זה המקומות הפנויים בבניארי.

GATE_in - זה שער הכניסה.

GATE_out - זה שער היציאה.

X_in - אחראי על פתיחה\סגירה של שער הכניסה.

X_out - אחראי על פתיחה\סגריה של שער היציאה.

Counter - מונה שבעזרתו אני סופר כמה מכוניות נכנסות או יוצאות

f_free_space - דגל שעוזר לי עם המקומות הפנויים (אני לא יכול לקרוא מיציאה).

ומכונות מצבים עם 4 מצבים, כאשר ב-UP הוא סופר כמה מוכניות נכסנו (בתנאי שיש 1 ב-GATE_in) ופותח את שער היציאה. ב-down הוא סופר כמה מכונית יצאו (בתנאי שיש 1 ב-GATE_out) ופותח את שער הכניסה. ב- free הוא "מציג" כמה מקומות יש וסוגר את שער היציאה מתי שהחנייה פתחוה וסוגר את שער הכניסה מתי שאין מקמות.

אפשר לשכלל יותר את התוכנה, אבל ביקשת פשוט.

אם צריך הסבר נוסף, אני כאן.

פורסם

אתם מסבכים ללא צורך - לא לכל דבר צריך מכונת מצבים...

כל מה שצריך זה UP-DOWN-COUNTER עם limiter וזהו כמעט.

פורסם

אני צריך מכונת מצבים עם 2 כניסות שסופרות מ0 עד 15 מעלה ומטה. כאשר ב0 וב15 זה נתקע.

הבחור ביקש מכונת מצבים.

לא משנה כבר, זה נעשה.

ד"א: כשאמרת למתקדמים, לא לספור פעמיים ולא לפספס ספירה, זה פשוט לממש שם F.F (כמו D F.F)?

ד"א2:

איך אני מצוטט 2 קטעים מ-2 אנשים?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים