logo

מונה Verilog Grey

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

מונה Verilog Grey

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

ישנם סוגים שונים של קודים אפורים, כגון קוד מאוזן, בינארי משתקף, מרווח מרבי וקוד אפור נגד פוד.

למונים יש תפקיד ראשוני של הפקת רצף פלט מוגדר ולעיתים הם מכונים כמחוללי תבניות.

לְעַצֵב

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

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

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

 module gray_ctr # (parameter N = 4) ( input clk, input rstn, output reg [N-1:0] out); reg [N-1:0] q; always @ (posedge clk) begin if (!rstn) begin q <= 0; out <="0;" end else begin q + 1; `ifdef for_loop for (int i="0;" n-1; out[i] ^ q[i]; out[n-1] `else q[n-1:1] q[n-2:0]}; `endif endmodule pre> <h3>Hardware Schematic</h3> <img src="//techcodeview.com/img/verilog-tutorial/27/verilog-gray-counter-2.webp" alt="Verilog Gray Counter"> <h3>Testbench</h3> <pre> module tb; parameter N = 4; reg clk; reg rstn; wire [N-1:0] out; gray_ctr u0 ( .clk(clk), .rstn(rstn), .out(out)); always #10 clk = ~clk; initial begin {clk, rstn} <= 0; $monitor ('t="%0t" rstn="%0b" out="0x%0h&apos;," $time, rstn, out); repeat(2) @ (posedge clk); <="1;" repeat(20) $finish; end endmodule pre> <p>And it produces the following output, such as:</p> <pre> ncsim&gt; run T=0 rstn=0 out=0xx T=10 rstn=0 out=0x0 T=30 rstn=1 out=0x0 T=50 rstn=1 out=0x1 T=70 rstn=1 out=0x3 T=90 rstn=1 out=0x2 T=110 rstn=1 out=0x6 T=130 rstn=1 out=0x7 T=150 rstn=1 out=0x5 T=170 rstn=1 out=0x4 T=190 rstn=1 out=0xc T=210 rstn=1 out=0xd T=230 rstn=1 out=0xf T=250 rstn=1 out=0xe T=270 rstn=1 out=0xa T=290 rstn=1 out=0xb T=310 rstn=1 out=0x9 T=330 rstn=1 out=0x8 T=350 rstn=1 out=0x0 T=370 rstn=1 out=0x1 T=390 rstn=1 out=0x3 T=410 rstn=1 out=0x2 Simulation complete via $finish(1) at time 430 NS + 0 </pre> <h3>Balanced Gray Code</h3> <p>In balanced Gray codes, the number of changes in different coordinate positions is as close as possible.</p> <p>A Gray code is <strong> <em>uniform</em> </strong> or <strong> <em>uniformly</em> </strong> balanced if its transition counts are all equal.</p> <p>Gray codes can also be <strong> <em>exponentially</em> </strong> balanced if all of their transition counts are adjacent powers of two, and such codes exist for every power of two.</p> <p>For example, a balanced 4-bit Gray code has 16 transitions, which can be evenly distributed among all four positions (four transitions per position), making it uniformly balanced.</p> <pre> 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 </pre> <h3>n-ary Gray Code</h3> <p>There are many specialized types of Gray codes other than the binary-reflected Gray code. One such type of Gray code is the n-ary Gray code, also known as a <strong> <em>non-Boolean</em> </strong> Gray code. As the name implies, this type of Gray code uses non-Boolean values in its encodings.</p> <p>For example, a 3-ary ternary Gray code would use the values {0, 1, and 2}. The (n, k)-Gray code is the n-ary Gray code with k digits. The sequence of elements in the (3, 2)-Gray code is: {00, 01, 02, 12, 11, 10, 20, 21, and 22}.</p> <p>The (n, k)-Gray code may be constructed recursively, as the BRGC, or may be constructed iteratively.</p> <h3>Monotonic Gray Codes</h3> <p>Monotonic codes are useful in interconnection networks theory, especially for minimizing dilation for linear arrays of processors.</p> <p>If we define the weight of a binary string to be the number of 1s in the string, then although we clearly cannot have a Gray code with strictly increasing weight, we may want to approximate this by having the code run through two adjacent weights before reaching the next one.</p> <h3>Beckett-Gray Code</h3> <p>Another type of Gray code, the Beckett-Gray code, is named for Irish playwright <strong> <em>Samuel Beckett</em> </strong> , who was interested in <strong> <em>symmetry</em> </strong> . His play <strong> <em>Quad</em> </strong> features four actors and is divided into sixteen time periods. Each period ends with one of the four actors entering or leaving the stage.</p> <p>The play begins with an empty stage, and Beckett wanted each subset of actors to appear on stage exactly once. A 4-bit binary Gray code can represent the set of actors currently on stage.</p> <p>However,</p> <p>Beckett placed an additional restriction on the script: he wished the actors to enter and exit so that the actor who had been on stage the longest would always be the one to exit.</p> <p>The actors could then be represented by a first-in, first-out (FIFO) queue so that the actor being dequeued is always the one who was enqueued first.</p> <p>Beckett was unable to find a Beckett-Gray code for his play, and indeed, an exhaustive listing of all possible sequences reveals that no such code exists for n = 4. It is known today that such codes do exist for n = 2, 5, 6, 7, and 8, and do not exist for n = 3 or 4.</p> <h3>Snake-in-the-box Codes</h3> <p>Snake-in-the-box codes, or snakes, are the sequences of nodes of induced paths in an n-dimensional <strong> <em>hypercube</em> </strong> graph, and coil-in-the-box codes, or coils, are the sequences of nodes of induced cycles in a hypercube.</p> <p>Viewed as Gray codes, these sequences have the property of detecting any single-bit coding error.</p> <h3>Single-track Gray Code</h3> <p>Another kind of Gray code is the single-track Gray code (STGC) developed by <strong> <em>Norman B. Spedding</em> </strong> and refined by <strong> <em>Hiltgen, Paterson</em> </strong> and <strong> <em>Brandestini</em> </strong> in &apos;Single-track Gray codes&apos; (1996).</p> <p>The STGC is a cyclical list of P unique binary encodings of length n such that two consecutive words differ in exactly one position. When the list is examined as a P &#xD7; n matrix, each column is a cyclic shift of the first column.</p> <p>The name comes from their use with rotary encoders, where many tracks are being sensed by contacts, resulting in each in an output of 0 or 1. To reduce noise due to different contacts not switching the same moment in time, one preferably sets up the tracks so that the contacts&apos; data output is in Gray code.</p> <p>To get high angular accuracy, one needs lots of contacts; to achieve at least 1-degree accuracy, one needs at least 360 distinct positions per revolution, which requires a minimum of 9 bits of data and the same number of contacts.</p> <p>If all contacts are placed at the same angular position, then 9 tracks are needed to get a standard BRGC with at least 1-degree accuracy. However, if the manufacturer moves a contact to a different angular position but at the same distance from the center shaft, then the corresponding &apos;ring pattern&apos; needs to be rotated the same angle to give the same output.</p> <h3>Two-dimensions Gray Code</h3> <p>Two-dimensional Gray codes are used in communication to minimize the number of bit errors in quadrature amplitude modulation adjacent points in the constellation.</p> <p>In a standard encoding, the horizontal and vertical adjacent constellation points differ by a single bit, and adjacent diagonal points differ by 2 bits.</p> <hr></=></pre></=>

קוד אפור מאוזן

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

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

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

לדוגמה, לקוד גריי מאוזן של 4 סיביות יש 16 מעברים, שניתן לחלק אותם באופן שווה בין כל ארבעת המיקומים (ארבעה מעברים לכל מיקום), מה שהופך אותו למאוזן באופן אחיד.

 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 

קוד אפור n-ary

ישנם סוגים מיוחדים רבים של קודי אפור מלבד הקוד האפור המשתקף בינארי. סוג אחד כזה של קוד אפור הוא קוד האפור n-ארי, הידוע גם בשם a לא בוליאני קוד אפור. כפי שהשם מרמז, סוג זה של קוד גריי משתמש בערכים לא בוליאניים בקידוד שלו.

לדוגמה, קוד אפור תלת-טרי ישתמש בערכים {0, 1 ו-2}. הקוד (n, k)-אפור הוא הקוד האפור n-ארי עם k ספרות. רצף האלמנטים בקוד (3, 2)-אפור הוא: {00, 01, 02, 12, 11, 10, 20, 21 ו-22}.

הקוד (n, k)-Gray עשוי להיות בנוי רקורסיבית, כמו BRGC, או יכול להיות בנוי באופן איטרטיבי.

קודים אפורים מונוטוניים

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

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

קוד בקט-גריי

סוג אחר של קוד אפור, קוד בקט-גריי, נקרא על שם המחזאי האירי סמואל בקט , מי התעניין סִימֶטרִיָה . המחזה שלו מְרוּבָּע כולל ארבעה שחקנים ומחולק לשישה עשר פרקי זמן. כל תקופה מסתיימת בכך שאחד מארבעת השחקנים נכנס או יוצא מהבמה.

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

למרות זאת,

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

לאחר מכן, השחקנים יכולים להיות מיוצגים על ידי תור נכנס ראשון, יוצא ראשון (FIFO), כך שהשחקן שתורחק תמיד הוא זה שעמד ראשון בתור.

בקט לא הצליח למצוא קוד בקט-גריי למחזה שלו, ואכן, רשימה ממצה של כל הרצפים האפשריים מגלה שלא קיים קוד כזה עבור n = 4. כיום ידוע שקודים כאלה אכן קיימים עבור n = 2, 5 , 6, 7 ו-8, ואינם קיימים עבור n = 3 או 4.

קודי נחש בתיבה

קודי נחש בתיבה, או נחשים, הם רצפים של צמתים של נתיבים מושרה ב-n-ממד היפרקוב גרף, וקודי סליל-בקופסה, או סלילים, הם רצפי הצמתים של מחזורים מושרים ב-hypercube.

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

קוד גריי רצועה אחת

סוג אחר של קוד גריי הוא קוד גריי חד-מסלול (STGC) שפותח על ידי נורמן בי סדינג ומעודן על ידי הילטגן, פטרסון ו ברנדסטיני ב-'Single-track Gray codes' (1996).

ה-STGC הוא רשימה מחזורית של קידודים בינאריים ייחודיים P באורך n כך ששתי מילים רצופות שונות בדיוק במיקום אחד. כאשר הרשימה נבחנת כמטריצה ​​P × n, כל עמודה היא הזזה מחזורית של העמודה הראשונה.

ג'אווה מופעלת

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

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

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

קוד אפור דו מימדי

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

בקידוד סטנדרטי, נקודות הקונסטלציה הסמוכות האופקיות והאנכיות נבדלות בסיבית אחת, ונקודות אלכסוניות סמוכות נבדלות ב-2 ביטים.