נושא המאמר: יצירת קובצי נתונים לכניסות ויציאות של מודול חומרה המתוכנן ב-VHDL או VERILOG לצורך סימולציה.
מאת: רמי אטאס שמור מאמר למועדפים
רמי אטאס טלפון: 077-6621276 נייד: 052-5597916 דוא"ל: [email protected] http://blog.tapuz.co.il/ramiattas השכלה: בוגר הפקולטה להנדסת חשמל בטכניון מינהל עסקים למהנדסים ניסיון מקצועי: ניהול של פרויקטים מורכבים ומולטידיסיפלינרים באלקטרוניקה פיתוח ושילוב מערכות ספרתיות ומערכות בדיקה, תכנון FPGA וכרטיסים (BOARD DESIGN) הבנויים סביב מיקרופרוססור ניהול ואינטגרציה חומרה תוכנה. המתכנן וארכיטקט המערכת נדרש למצוא דרכי בדיקה למודול או למערכת המלאה המתוכננים לרוב ב-VHDL או ב-VERILOG במאמר זה מוצגת דרך בדיקה ליצירת קובצי נתונים באמצעות שפה עילית C בדוגמא להלן. (ניתן ליצור קבצים אילה בכל שפה עילית כולל שפות תכנון חומרה VHDL ו(VERILOG. חלק מקובצי הנתונים מזינים את כניסות המודול והחלק האחר של קובצי הנתונים מושווים ליציאות המודול. בדוגמא להלן כל כניסה לפקודת ה while חופפת לעליית שעון במערכת ולפיכך התוכנית מיצרת אות כניסה לפי אלגוריתם שיתואר להלן ובעליית השעון בה יש משמעות ליציאות מיוצרים האותות המתאימים כתוצאה מאותות הכניסה הקודמים. בדוגמא להלן התוכנה מיצרת אותות כניסה למפענח בקר תקשורת RS232. היות ואותות נדגמים ע"י שעון המהיר פי 16, אותות הכניסה הנוצרים ע"י התוכנה חוזרים על עצמם 16 פעם. בשרטוט למטה כל ביט כולל Start Data Stop משודר ברציפות 16 פעם. קובץ הכניסה RS232Test.txt יוצר Data סריאלית .ערך כל Byte משודר עולה מקודמו ב-1 לכן קובץ היציאה VecDat.txt שהתוכנה יוצרת ושבtest bench יושווה ליציאות המודול נראה כך: 00000000 00000001 00000010 : 11111110 11111111 להלן קובץ יוצר האותות הכתוב ב-C // RS232.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include "stdio.h" #include "power.cpp" #include using namespace std; void main() {//---------------------------------------------------------------------------------------------------void main() //fstream myfile; //myfile.open ("RS232Test.txt"); FILE *F_RS232Test,*F_VecDat; const int MsTransmit = 7; const int start = 0,Stop = 2,Transmit =1; const int MsCountSamples = 15; const int MsNbit =7; int i; int TestState= start; int CountDi =0; int remin; char VecDi [8]; //char Di; int k=0; //int TempBit; int CountSamples= 0; int i_transmit=0; //int kmodu; int Nbit= 0; //char Ckmodu; int MaxDi = power (2,(MsTransmit+1))-1; F_RS232Test = fopen("RS232Test.txt","wt"); if (!F_RS232Test) cout<< "Failed To Open RS232Test"; F_VecDat = fopen("VecDat.txt","wt"); if (!F_VecDat) cout<< "Failed To Open VecDat"; while (CountDi <= MaxDi) { //-----------------------------------------------------------------while (CountDi <= MaxDi) switch(TestState) { // ---------------------------------------------------------switch(TestState) case start: if(CountSamples == MsCountSamples) TestState = Transmit; else {fprintf(F_RS232Test,"%d",0); fputs("\n",F_RS232Test); printf("%d\n",0); } break; case Transmit: if(CountSamples==0) { if (Nbit==0) remin=CountDi; //--------------if(CountSamples==0) VecDi[Nbit] = remin%2 +48; remin = remin/2; }//-------------------------------------------if(CountSamples==0) fputc(VecDi[Nbit],F_RS232Test);//-----------------fputc(VecDi[Nbit],F_RS232Test); fputs("\n",F_RS232Test); printf("%c\n",VecDi[Nbit]); if(CountSamples == MsCountSamples) { //----------------------if(CountSamples == MsCountSamples) if (Nbit==MsNbit) {//fputs(VecDi,F_VecDat); //fputs("\n",F_VecDat); for(i=MsNbit;i>=0;i--)fputc(VecDi[i],F_VecDat); fputs("\n",F_VecDat); Nbit=0; CountDi++; TestState = Stop; } else {Nbit++; } } //-----------------------if(CountSamples == MsCountSamples) break; case Stop: if(CountSamples == MsCountSamples) TestState = start; else {fprintf(F_RS232Test,"%d",1); fputs("\n",F_RS232Test); printf("%d\n",1); } break; default: TestState = start; break; }// ---------------------------------------------------------switch(TestState) if (CountSamples == MsCountSamples) CountSamples =0; else CountSamples++; }//-----------------------------------------------------------------while (CountDi <= MaxDi) fclose(F_RS232Test); fclose(F_VecDat); }//---------------------------------------------------------------------------------------------------void main()
blog.tapuz.co.il/ramiattas
מאמר זה נוסף לאתר "ארטיקל" מאמרים ע"י רמי אטאס שאישר שהוא הכותב של מאמר זה ושהקישור בסיום המאמר הוא לאתר האינטרנט שבבעלותו, מפרסם מאמר זה אישר בפרסומו מאמר זה הסכמה לתנאי השימוש באתר "ארטיקל", וכמו כן אישר את העובדה ש"ארטיקל" אינם מציגים בתוך גוף המאמר "קרדיט", כפי שמצוי אולי באתרי מאמרים אחרים, מלבד קישור לאתר מפרסם המאמר (בהרשמה אין שדה לרישום קרדיט לכותב). מפרסם מאמר זה אישר שמאמר זה מפורסם אולי גם באתרי מאמרים אחרים בחלקו או בשלמותו, והוא מאשר שמאמר זה נוסף על ידו לאתר "ארטיקל".
צוות "ארטיקל" מצהיר בזאת שאינו לוקח או מפרסם מאמרים ביוזמתו וללא אישור של כותב המאמר בהווה ובעתיד, מאמרים שפורסמו בעבר בתקופת הרצת האתר הראשונית ונמצאו פגומים כתוצאה מטעות ותום לב, הוסרו לחלוטין מכל מאגרי המידע של אתר "ארטיקל", ולצוות "ארטיקל" אישורים בכתב על כך שנושא זה טופל ונסגר.
הערה זו כתובה בלשון זכר לצורך בהירות בקריאות, אך מתייחסת לנשים וגברים כאחד, אם מצאת טעות או שימוש לרעה במאמר זה למרות הכתוב לעי"ל אנא צור קשר עם מערכת "ארטיקל" בפקס 03-6203887.
בכדי להגיע לאתר מאמרים ארטיקל דרך מנועי החיפוש, רישמו : מאמרים על , מאמרים בנושא, מאמר על, מאמר בנושא, מאמרים אקדמיים, ואת התחום בו אתם זקוקים למידע.