פורסם 2012 במרץ 2113 שנים שלום,אז את כל האתחול הראשוני עשיתי במכונות מצבים, וכרגע אני די חושב איך לעשות את הקטע של השליחה - כי פשוט אני צריך להוציא מסכים לצג לפי כניסות.נניח כרגע שיש לי וקטור של 24 סיביות: וכל איפה שיש בווקטור '1' צריך להוציא לצג הודעה שאומרת: "תקלה מספר" - שורה ראשונה סוג של כמה רווחים, "1" (אם במקום אחד בוקטור יש '1') בשורה שנייה באמצע.עכשיו חשבתי לממש את זה ב-2 תוכניות, הראשונה init (הגדרות ושליחת תו תו) והשנייה controller שתיהיה אחרית לקבל את הווקטור הארוך (אמור להיות ווקטור אחד של בערך 190 סיביות ועוד וקטור של 6 סיביות שכנראה אני אשרשר) ואז להוציא ל-init כנראה done או ack ואז הInit תציג על הצג.בקטע הזה די נתקעתי, השאלה היא שהאם אני נמצא בתוך מצב מסיום בinit שנקרא send (לצורך הדוגמא) אני ארצה להימצא 16*2 * השהיות פעמיים.חשבתי לעבוד עם ROM שה-quartus יוצר, אבל זה סתם מסבך לי את העניינים (לא כל-כך טוב ב-vhdl).עריכה:יש כיוון חדש, לממש את הקונטרלר עם shift reg שיבדוק על הווקטור מתי יש אחד ובהתאם ישלח ל-LCD.אך עדיין אינני יודע איך לממש זאת ב- VHDL .אשמח לכל כיוון.תודה.
פורסם 2012 באפריל 1113 שנים מחבר אין בנאדם אחד בפורום שמתעסק עם זה?אולי מישהו יכול לפנות אותי למישהו חיצוני?
פורסם 2012 באפריל 1213 שנים מימוש של SHIFT REGISTER בVHDL זה ממש פשוט דוגמא: vector26..0<vector0&vector26..1 סינטקס מלא אתה יכול להיעזר על בגוגל (תוצאות מהאתר של ALTERA הכי טובות) בעקרון אתה משתמש בפעולה של שירשור ומשרשר את הביט שאתה רוצה "לסובב" וכל CLK של המערכת יתבצע לך סיבוב אחרי הפעולה של הSHIFT REG תעשה פעולת התניה פשוטה של לדוגמא if vector0 =='1' then flag ='1' אני נתתי דוגמא לFLAG אבל אתה יכול לעשות מונה או מה שבא לך. אני אישית לא כל כך הבנתי מה הפרוייקט שלך עושה אבל בVHDL תמיד תנסה לדמיין לך איך המערכת שלך מתפקד מבחינת מבנים, כניסות, יציאות... תנסה לפשט לך את הרעיון של כל מרכיב (COMPONENT) ותממש אותו בנפרד. (כך לפחות אני עובד )
פורסם 2012 באפריל 1613 שנים מחבר הפרויקט ממש פשוט.בודק קצר נתק בחוטים.בהתחלה אני מגדיר איך אני עובד עם 8255אח"כ בחור את פורט A ושלוח 8 אחדיםאח"כ השהייהאח"כ בוחר את פורט C ושולח 4 אחדים (4 הגבוהיים)אח"כ השהייהאח"כ קורא מפורט C הנמוך לווקטור מסיוםאח"כ השהייהאח"כ קורא מפורט Bאח"כ השהייהאח"כ בודק את הווקטור שיקבלתי, אם כולם אחדים ומעלה פלאג.אח"כ אותו דבר רק שולח אפסים.בסוף עושה OR בין 2 הווקטורים והתוצאה נשמרת בווקטור שלישי שהולך ל-LCD.כרגע יש מלא באגים בתוכנה הזאת, פעם עובדת פעם לא עובדת... מנסה לסדר את זה כבר שובע אך ללא יועיל...
פורסם 2012 באפריל 1813 שנים לפי השעה אתה יכול להבין שאין לי כל כך זמן.לא קראתי הכל רק שמתי לב שאתה צריך מימוש של אוגר הזזה.יש פקודות לכך מוכנות.SLL=shift left logicalSRL=shift right logicalברגע שאתה מזיז, הערך החדש שנכנס הוא אפס.יש לך קצת מידע פה:http://en.wikipedia.org/wiki/Logical_shiftובעקרון ככה ממשים אותו, זה חלק מתוכנית שהייתה לי בישג יד:case SW(3) is when '0' => VAR := VAR sll 1; -- SW(3)=0 SHIFT LEFT LOGICAL when others => LOADVAR := LOaDVAR srl 1; -- SW(3)=1 SHIFT RIGHT LOGICALהSW זה ווקטור הביט הרביעי שלו נבדק אם לעשות הזהה ימינה או שמאלה.VAR זה ווריאבל שמוגדר בתוך פרוסס.בשורה 1 אחרי SLL או SRL אומר להזיז ביט 1 ימינה או שמאלה תלוי בפעולה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.