Jpeg encoder
-
Upload
alon-cohen -
Category
Documents
-
view
88 -
download
2
Transcript of Jpeg encoder
Jpeg encoderJpeg encoderHardware implementationHardware implementation
with Verilogwith Verilog
Designed byDesigned by Alon Cohen ([email protected])Alon Cohen ([email protected])
Roi Biton, Yevgeny (Yoni) KhasinRoi Biton, Yevgeny (Yoni) Khasin Ariela Huber, Shulamyt Ajamy, Moshe Ariela Huber, Shulamyt Ajamy, Moshe
SzklarSzklar
Directed byDirected by Mr. Max NigriMr. Max Nigri
The Hebrew The Hebrew UniversityUniversityof Jerusalemof Jerusalem
1
The projectThe project
imagerimager
JPEG
JPEG Encoder
Encoder
JPEG File
RGB Data
SD CARDSD CARD((flashflash))Eye-On-Si® Ultra-compact
CMOS Digital Camera Module
example
Jpeg encoder for digital cameraJpeg encoder for digital camera
example
2
Top diagramTop diagram
JPEGJPEGEncoderEncoder
DateDate
shootshoot
RGBRGB
3
imagerimager
imagerimagerמודול המדמה הזרמת מידע מ מודול המדמה הזרמת מידע מ Data FormatData Format : : 8bit RGB8bit RGBסינכרוני מקבילי סינכרוני מקבילי רגל כניסה רגל כניסהshootshoot.טריגר לשליחת תמונה חדשה. – טריגר לשליחת תמונה חדשה – לפני העברת כל תמונה נשלח לפני העברת כל תמונה נשלחheaderheader המעביר את המעביר את
שם הקובץ וממדי התמונה.שם הקובץ וממדי התמונה.
4
playerplayer.מיצר לחיצת כפתור לצילום תמונה.מיצר לחיצת כפתור לצילום תמונה מיצר תאריך בקוד מיצר תאריך בקודASCIIASCII.. : קובע את איכות התמונה : קובע את איכות התמונהquality factorquality factor
00 – – lowlow11 - -midmid22 - - highhigh
5
flashflash
מודול המדמה כרטיס זיכרון.מודול המדמה כרטיס זיכרון. 32תקשורת מקבילית סינכרונית תקשורת מקבילית סינכרוניתbit32bit.. 8,16,24,328,16,24,32אפשרות לכתיבה של אפשרות לכתיבה של BitBit בכל בכל
עלית שעון.עלית שעון. העברת שם הקובץ מתבצעת לפני העברת העברת שם הקובץ מתבצעת לפני העברת
המידע.המידע.
6
encoderencoder
..jpg filejpg fileמקודד תמונה לפורמט מקודד תמונה לפורמט כניסה: תמונה בפורמט כניסה: תמונה בפורמטRGBRGB באופן טורי , באופן טורי ,
((data 8bitdata 8bit.).) 32מוצא: כתיבה סינכרונית מוצא: כתיבה סינכרוניתbit data32bit data לזיכרון לזיכרון
flashflash..:בקרות:בקרות
Quality factorQuality factor שני ביטים לקביעת איכות –שני ביטים לקביעת איכות– התמונה.התמונה.
Date(64bit)Date(64bit) הכנסת תאריך בקוד –הכנסת תאריך בקוד– ASCIIASCII..ShootShoot.טריגר לצילום תמונה. טריגר לצילום תמונה
JPEG
JPEG Encoder
Encoder
7
EncoderEncoderBlock diagram & Block diagram &
conceptconcept
8
Encoder Block diagramEncoder Block diagram
Qu
an
tiza
tio
nQ
ua
nti
zati
on
DCTDCT&&
ZIGZAGZIGZAG
RLCRLC & &
DPCMDPCM
DCTDCTClientClient
Triple Triple FIFOFIFO
ControlControlRGB to RGB to YCbCrYCbCr
ARBARBRAMRAM
BlocksBlocks
Wr PixelsWr PixelsClientClient
DateDateStamperStamper
AlinerAlinerInt to floatInt to float
Clk dividerClk divider
Quan ROM Quan ROM TBTB
FIFO FIFO writerwriter
Huffman Huffman codecode
Serial to Serial to paralelparalel
Flash Flash writerwriter
DCTDCTROMROM
9
תקשורת בין מודוליםתקשורת בין מודולים
תקן אחיד להעברת המידע בין המודולים השוניםתקן אחיד להעברת המידע בין המודולים השוניםspen_in/spen_outspen_in/spen_out' כל עוד מועבר בלוק\תמונה.' כל עוד מועבר בלוק\תמונה.11 –נמצא ב ' –נמצא ב ' d_in_valid/d_out_validd_in_valid/d_out_valid–'1–'1 מציין מידע תקף עבור עלית השעון ' מציין מידע תקף עבור עלית השעון '
הנוכחית.הנוכחית.rstrst.אתחול המודול. –אתחול המודול– mclkmclk.שעון עבודה של המודול. –שעון עבודה של המודול–
תחילת בלוק מידע תקףסוף בלוק
10
צילום תמונות ברצףצילום תמונות ברצף
Shoot לצילום תמונה חדשה
Busy מציין כי ה encoder באמצע
עבודה
הבלוקים בכניסת ה DCT
סיום קובץ
shootלא נלחץ אין תמונה מועברת
pxq דלוק בזמן העברת המידע
11
Block diagram – data Block diagram – data flowflow
מצד שמאל, כניסת המידע מה מצד שמאל, כניסת המידע מהimagerimager..Int to floatInt to float 8 – ממיר את המידע מ – ממיר את המידע מbit data8bit data ל ל floating point 24 floating point 24
bitbit..AlinerAliner מקבל טורי מקבל טורי R,G,BR,G,B ומוציא שלשה ומוציא שלשה {{R,G,BR,G,B}} 33מיושרים כל מיושרים כל
שעונים.שעונים.
12
Block diagram – data Block diagram – data flowflow
Date stamperDate stamper מבצע הדפסה מבצע הדפסה של תאריך לתוך התמונה תוך כדי של תאריך לתוך התמונה תוך כדי
זרימת המידע.זרימת המידע. התאריך מתקבל מחוץ למודול התאריך מתקבל מחוץ למודול
ע"י קו מקבילי ע"י קו מקבילי ASCIIASCIIבפורמט בפורמט ..64bit64bitשל של
נתן ע"י פרמטרים לבצע מתיחה נתן ע"י פרמטרים לבצע מתיחהוכיווץ אופקי ורוחבי לתאריך.וכיווץ אופקי ורוחבי לתאריך.
נתן להדפיס את כל ה נתן להדפיס את כל הA,B,CA,B,C
13
Block diagram – data Block diagram – data flowflow
RGBtoYCbCrRGBtoYCbCr מודול המבצע המרה לפורמט – מודול המבצע המרה לפורמט – Y,Cb,CrY,Cb,Cr ו ו offsetoffset ע"י ע"י 128128-- של של הכפלה במטריצה.הכפלה במטריצה.
Wr Pixel ClientWr Pixel Client מבצע כתיבה של המידע שורה אחר שורה לזיכרון מבצע כתיבה של המידע שורה אחר שורה לזיכרון RAMRAM בצורה בצורה שורות. שורות. 88 עם כל סיום כתיבה של עם כל סיום כתיבה של startstartציקלית ומייצר פולס ציקלית ומייצר פולס
שורות עם כל שורות עם כל 88בנוסף מספק את הכתובת ההתחלתית של כל בנוסף מספק את הכתובת ההתחלתית של כל startstart.לצורך סנכרון. לצורך סנכרון
To ARBTo ARB14
Block diagram – data Block diagram – data flowflow
RAM BlocksRAM Blocks – מאחסן את שורות המידע של התמונה המגיעה מ – – מאחסן את שורות המידע של התמונה המגיעה מ – wr pixels wr pixels clientclient..
ARBARB ארביטרציה ל – ארביטרציה ל – RAMRAM עם עם strict prioritystrict priority ל ל wr pixels clientwr pixels client..DCT ClientDCT Client מושך את רצועות המידע מה – מושך את רצועות המידע מה – RAMRAM בפורמט של בפורמט של blocks 8x8blocks 8x8
סדר משיכת המידע סדר משיכת המידעtop to down and left to righttop to down and left to right.. מקבל כתובת התחלתית וסגנל מקבל כתובת התחלתית וסגנלstartstart .לסימון כתובת וזמן הקריאה. לסימון כתובת וזמן הקריאה
From wr From wr pixels clientpixels client
To DCTTo DCT
15
Block diagram – data Block diagram – data flowflow
ביצוע ביצועDCTDCT במקביל על במקביל על Y,Cb,CrY,Cb,Cr.. ביצוע ע"י הכפלה במטריצת מקדמים מימין ביצוע ע"י הכפלה במטריצת מקדמים מימין
חיצוני חיצוני ROMROMומשמאל השמורה בזיכרון ומשמאל השמורה בזיכרון לשלושת המודולים.לשלושת המודולים.
BlockBlock
16
Block diagram – data Block diagram – data flowflow
ביצוע ביצועQuantizationQuantization במקביל על במקביל על Y,Cb,CrY,Cb,Cr.. טבלאות הקוונטיזציה עבור שלושה איכויות טבלאות הקוונטיזציה עבור שלושה איכויות
חיצוני למודולי ה חיצוני למודולי ה ROMROMשמורות ב שמורות ב QuantizationQuantization..
מודול מודולquan_table_swquan_table_sw מוסיף מוסיף offsetoffset מתאים מתאים 2bit quality 2bit quality בהתאם ל בהתאם ל ROMROMלכתובת ב לכתובת ב
factorfactor המגיע מחוץ למודול המגיע מחוץ למודול encoderencoder. . טבלאות טבלאותchrom & lumchrom & lum שמורות לאורך כך שמורות לאורך כך
כל מודול כל מודול ROMROMשע"י חיווט מתאים במוצא ה שע"י חיווט מתאים במוצא ה quanquan.מקבל את המידע המתאים לו. מקבל את המידע המתאים לו
17
Quality factorQuality factor פעולת הקוונטיזציה היא פעולת הקוונטיזציה היא
הכפלה בטבלת הקוונטיזציה הכפלה בטבלת הקוונטיזציה ועיגול התוצאה.ועיגול התוצאה.
להלן השוואה בין שלושה להלן השוואה בין שלושהאיכויות שונות: איכויות שונות:
Medium)8k(Value/)0.5*table(
Low)5.45k(value/table
High)11.5k(Value/)0.25*table( Bmp)54k(
18
Block diagram – data Block diagram – data flowflow
RLERLE - - Run Length EncodeRun Length Encode DPCMDPCM - - Differential Pulse Differential Pulse
Code ModulationCode Modulation מודול המממש את שני מודול המממש את שני
..RLE & DPCMRLE & DPCMהאפליקציות האפליקציות מוצאים מתחברים למודול מוצאים מתחברים למודול
FIFOFIFOהמבצע כתיבה ל המבצע כתיבה ל ניתן לראות כי כמות המידע ניתן לראות כי כמות המידע
במוצא קטנה בהרבה מכמות במוצא קטנה בהרבה מכמות המידע בכניסה.המידע בכניסה.
BlockBlock
19
Block diagram – data Block diagram – data flowflow
FIFO WriterFIFO Writer מקבל את שלושת ערוצי מקבל את שלושת ערוצי
המידע ומבצע ריבוב המידע ומבצע ריבוב triple tripleשלהם וכתיבה ל שלהם וכתיבה ל
fifofifo..Super FIFOSuper FIFO
מכיל שלושה סקטורים – מכיל שלושה סקטורים – של זיכרון הממומשים על של זיכרון הממומשים על
אחד. אחד.RAMRAMגבי גבי כאשר מגיע בלוק שלם כאשר מגיע בלוק שלם
הבלוקים יוצאים במוצא הבלוקים יוצאים במוצא אחד אחרי השני אחד אחרי השני בהתאם לבקשת בהתאם לבקשת
קריאה.קריאה. סימון תחילה וסוף בלוק סימון תחילה וסוף בלוק
מתבצעים ע"י שני מתבצעים ע"י שני ביטים ראשונים שהם ביטים ראשונים שהם
חלק מרגיסטרי המידע.חלק מרגיסטרי המידע. ניתן לראות שכמות ניתן לראות שכמות
המידע שונה בכל אחד המידע שונה בכל אחד מהמסלוליםמהמסלולים
20
Block diagram – data Block diagram – data flowflow
קידוד הופמן של המידע ע"י טבלאות השמורות ב קידוד הופמן של המידע ע"י טבלאות השמורות בROMROM והוצאה של המידע המקודד עם והוצאה של המידע המקודד עם ביטים לציון אורך המידע הרלוונטי.ביטים לציון אורך המידע הרלוונטי.
Serial to paralelSerial to paralel אוסף בצורה טורית את הביטים באורכים השונים ומוציא מידע – אוסף בצורה טורית את הביטים באורכים השונים ומוציא מידע – flashflash לכתיבה ל לכתיבה ל 32bit32bitבאורך אחיד של באורך אחיד של
21
Block diagram – data Block diagram – data flowflow
Flash writerFlash writer יצור וכתיבה של שם הקובץ ו – יצור וכתיבה של שם הקובץ ו – headerheader ל ל jpeg filejpeg file.. כתיבת המידע המגיע מה כתיבת המידע המגיע מהserial to paralelserial to paralel.למקום המתאים בקובץ. למקום המתאים בקובץ
22
ROM & RAM CalculationROM & RAM CalculationDate Stamper ROMDate Stamper ROM
255255 תווי תווי ASCIIASCII 5, כל תו , כל תוx5bit5x5bit255255**55**5/85/8 = = 797byte797byte :5מבנה: מבנהbit x 1275 rows5bit x 1275 rows11bit address11bit address
RAM BlocksRAM Blocks דרישה מה דרישה מהDCTDCT לרווח בין כל לרווח בין כל data_validdata_valid :88 במוצא: במוצא cyclescycles דרישה מה דרישה מהDCTDCT 627627 למס' מחזורים בין הבלוקים למס' מחזורים בין הבלוקים 528528 = =88**6666מס' מחזורים במעבר בלוק מס' מחזורים במעבר בלוק :11551155סה"כ מחזורים דרושים לבלוק כלל השהייה בין בלוקים: סה"כ מחזורים דרושים לבלוק כלל השהייה בין בלוקים 147840147840(=(=1024/81024/8*)*)11551155 : : 10241024סה"כ מחזורי שעון לפינויי רצועה באורך סה"כ מחזורי שעון לפינויי רצועה באורך :61606160==147840/8/3147840/8/3סה"כ שורות זיכרון שיכתבו בזמן זה: סה"כ שורות זיכרון שיכתבו בזמן זה : 1024סה"כ מס' שורות זיכרון שדרושות : סה"כ מס' שורות זיכרון שדרושותpix*8+6160=143521024pix*8+6160=14352 14352לכן גודל הזיכרון הדרוש הוא לכן גודל הזיכרון הדרוש הואrows*72bit = 14352rows*72bit = 126kb126kb14bit address14bit address
23
ROM & RAM CalculationROM & RAM CalculationDCT ROM – commonDCT ROM – common
.משמש להחזקת המטריצה לביצוע ההמרה.משמש להחזקת המטריצה לביצוע ההמרה
6464 value of 24bit floating pointvalue of 24bit floating pointSize = 64*24/8 = Size = 64*24/8 = 192byte192byte66 bit addressbit address
DCT RAMDCT RAM.משמש לשמירת המטריצה המתקבלת לאחר הכפלה ראשונה.משמש לשמירת המטריצה המתקבלת לאחר הכפלה ראשונה6464 value of 24bit floating pointvalue of 24bit floating pointSize = 64*24/8 = Size = 64*24/8 = 192byte192byte66 bit addressbit address
24
ROM & RAM CalculationROM & RAM CalculationQuantization ROM – commonQuantization ROM – common
( משמש להחזקת שלושה זוגות( משמש להחזקת שלושה זוגותluma & chromeluma & chrome מטריצות קבועים עבור שלושה ) מטריצות קבועים עבור שלושה )דרגות איכות לתמונה.דרגות איכות לתמונה.
6464**33==192192 rows of 2*24bit floating pointrows of 2*24bit floating pointSize = 64*3*2*24/8 = Size = 64*3*2*24/8 = 1152byte1152byte88 bit addressbit address
Super FIFO Dual port RAMSuper FIFO Dual port RAM משמש לשמירת המידע של שלושת המסלולים משמש לשמירת המידע של שלושת המסלוליםY,Cb,CrY,Cb,Cr .לצורך איחוד שלהם מחדש. לצורך איחוד שלהם מחדש
..FlashFlashמאפשר גם השהייה של פעולת הכתיבה ל מאפשר גם השהייה של פעולת הכתיבה ל השהייה מקסימאלית מה השהייה מקסימאלית מהflashflash 80 מותאמת ל מותאמת לcycles80cycles לכן דרושה תוספת של לכן דרושה תוספת של
80/880/8==1010 rows per rows per sectorsector
בנוסף ל בנוסף לCb, CrCb, Cr 128128 = = 22**6464 דרושים עוד דרושים עוד rowsrows 22 ועוד ועוד rowsrows ל ל YY :160160 = = 2+22+2**3+643+64**1010סה"כ: סה"כ
159159 rows * 21bit = rows * 21bit = 420byte420byte8bit address8bit address
25
ROM & RAM CalculationROM & RAM CalculationHuffman table ROMHuffman table ROM
מחזיק את טבלת הערכים לביצוע קידוד הופמןמחזיק את טבלת הערכים לביצוע קידוד הופמןChrominance DC – 12 rowsChrominance DC – 12 rowsLuminance DC – 12 rowsLuminance DC – 12 rowsChrominance AC – 163 rowsChrominance AC – 163 rowsLuminance AC – 163 rowsLuminance AC – 163 rowsSum: 350 rows * 20bit = Sum: 350 rows * 20bit = 875byte875byte9bit address9bit address
Flash writer ROMFlash writer ROM מחזיק את ה מחזיק את הHeaderHeader שנכתב בתחילת קובץ ה שנכתב בתחילת קובץ ה jpegjpeg ואת טבלאות הקוונטיזציה ואת טבלאות הקוונטיזציה
הדחוסות עבור שלושת האיכויות הנתמכות במערכת.הדחוסות עבור שלושת האיכויות הנתמכות במערכת.881881 rows * 8bit = rows * 8bit = 881bytes881bytes10bit address10bit address
26
ROM & RAM summaryROM & RAM summary
RAM Blocks = 126KbyteRAM Blocks = 126Kbyte! ! All otherAll other ROM = 3.8kbROM = 3.8kbRAM = 0.6kbRAM = 0.6kb
27
Modules Modules implementationimplementation
28
Advanced Advanced FeatureFeature
Date StamperDate Stamperהדבקת תאריך לתמונה בזמן מעבר המידע: אפשרות להדביק כל
font השמור ב ROM מיועד. ניתן לבצע מתיחה אורכית ורוחבית ולקבוע את מיקום הדבקת התאריך ע"י שינויי פרמטרים מובנים.
BONUS
BONUS
29
BONUS:BONUS: date_stamper date_stamper
Inputs:Inputs:R_aline, G_aline, B_aline R_aline, G_aline, B_aline –– original alined RGB. original alined RGB.date date –– the date to be stamped. the date to be stamped.date_en - enable/disable stamping feature.date_en - enable/disable stamping feature.
Outputs:Outputs: R_out, G_out, B_out R_out, G_out, B_out –– ““stampedstamped”” RGB. RGB.30
BONUS:BONUS: date_stamper date_stamper contcont..
muxdate_reg
8
MULDIG_HEIGHT
LOGIC
LOGIC
LOGIC
LOGIC
startspen_inhdclk
LOGIC
LOGIC
X_cnt
Y_cnt
X_START_FROMY_START_FROM
row_numcol_num
work_flag
DIG_WIDTH
LOGIC
LOGIC
CUBE_HEIGHT
LOGIC
LOGIC
CUBE_WIDTH dig_col
dig_row
dig_start_add+
fonts ROM“ascii” ordered
add
mux
5
1
mux{R,G,B}outoriginal {R,G,B}
stamp_pixel{255,0,0}
3
3
work_flag
work_flag
work_flag
31
BONUS:BONUS: date_stamper date_stamper contcont...המימדים והמיקומים מוגדרים כפרמטרים וניתנים לשינוי בקלות
1 2 3 4
1234
X_cnt = X_START_FROMY_cnt = Y_START_FROM
col_num = 0row_num = 0
image: digit dimensions:
CUBE_HEIGHT
pixel
CUBE_WIDTH
DIG_WIDTH
DIG_HEIGHT
cube dimensions:
32
BONUS:BONUS: date_stamper date_stamper contcont..
:כמה מימדים נוספים:כמה מימדים נוספים
CUBE_HEIGHT
CUBE_WIDTH
CUBE_HEIGHT
CUBE_WIDTH
CUBE_HEIGHT
CUBE_WIDTH
33
BONUS:BONUS: date_stamper date_stamper contcont..
.work_flag = 1המודול פעיל רק באזור בו – מחוץ לאזור זה, הפיקסלים מועברים ישירות.
work_flag = 0שאר התמונה –
work_flag = 1אזור הדבקת התאריך –
34
BONUS:BONUS: date_stamper date_stamper contcont..
ומסודריםROMהתוים שמורים ב- בכפולותASCIIבכתובות ע"פ סדר
כאשר הגדרנו(cubes)של גודל התו ב- .5שגודל התו אצלנו הינו
ASCII table font ROM
0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
00
0 0
0 0
0 0
11 1
1
11
1
1 1
1
1
1
1
1
1
1
1
1
1
1
11
1
1
1
1 1
1 1
1 1
1 1
1 1 1
1
1
1
address
48 x 5
49 x 5
50 x 5
51 x 5
0
1
2
3
ההגדרה וההזנה של הפונטים נעשתהבאופן ידני ודרשה מעט יצירתיות...
35
BONUS:BONUS: date_stamper date_stamper contcont..
כפי שהוסבר לעיל מאפשר, פרט להדבקת התאריך, הדבקת כל כיתוב אחרROMסידור הפונטים ב- שחפצים בו באופן נוח וגינרי, ע"י הזנת הכיתוב בצורה פשוטה של מחרוזת:
ונשמר בתוך מערך.(behavioral Verilog)התאריך מועבר ע"י מודול דמה חיצוני מודול זה מדמה גם אפשור\ביטול ההדבקה.
player
wire [NUM_OF_DIG*8-1:0] DATE;reg date_en;
date_stamper
reg [7:0] date_reg[7:0];
wire en
36
BONUS:BONUS: date_stamper date_stamper contcont..
DebuggingDebugging הגדרנו מערך דו מימדי המדמה הגדרנו מערך דו מימדי המדמה debuggingdebuggingהמודל פותח באופן עצמאי, ולכן לשם – המודל פותח באופן עצמאי, ולכן לשם –
תמונה.תמונה.
' מסמל שלא התבצעה הדבקה בפיקסל הנוכחי.' מסמל שלא התבצעה הדבקה בפיקסל הנוכחי.00''
' מסמל שבוצעה הדבקה.' מסמל שבוצעה הדבקה.11''
עבור הדוגמא לעיל:עבור הדוגמא לעיל:
37דוגמאות נוספות:דוגמאות נוספות:
BONUS:BONUS: date_stamper date_stamper contcont..
38
BONUS:BONUS: date_stamper date_stamper contcont.. ובתמונה האמיתית:ובתמונה האמיתית:
39
Accessories Accessories modulesmodules
Int to floatInt to float
JustifyJustify
multipliermultiplier
40
Int_to_fpInt_to_fp תיאור:
:}fp=}ma_ea לפי ההגדרה: fp לייצוג intהמודל ממיר מספר מייצוג ma [15:0], ea [7:0] ובשימוש של המודל justify.שניתן בכיתה
Input: intהמספר בייצוג
Output: , וביט over_flow, ביט המצביע על מצב של fp [23:0]המספר בייצוג
under_flowנוסף שמצביע על מצב של הערות:
.justifyהמודל עושה שימוש במודל המודל עובד ללא שעון בכלל.
המספר מוצב בשלב ההתחלתי כמו שהוא00001111במטיסה, והאקס' מקבל ערך קבוע
41
JustifyJustify תיאור:
המודל מקבל מנטיסה ואקס' ומיישר אותם לפי הלוגיקה בתרשים המצורף.
Input: ea [7:0] ,ma [15:0] , last_is_1
Output: fpהמספר בייצוג
הערות:המודל עובד ללא שעון בכלל.
שינינו את המודל המקורי והוספנו לו את הסיבית last_is_1 'שמתריעה אם הסיבית האחרונה של המנ
על מנת שלא נחתוך אותה )ראה 1המקורית שווה ל-תרשים(
(ma[i]^ma[i-1])
אז זה1 או 0 -
?אין
i=16
?יש
ma[0] = 1
ma[16:1] + 16'h1
ma[16:1]
{ea[7],ea} + 9'd1
last_is_1
{ma,1'b1} << (15-found-1)
ma << (15-found)
{ea[7],ea} - 9'd15 + found
?לא ?כן
?כן
?כן
?לא
?לא
ma [16:0]ea_justified [7:0]
over_flow
under_flow
ea [7:0]
ma_justified [16:0]
last_is_1
נחפש את המקום הראשון במנט'שבו יש שתי סיביות שונות בריצה
ומטה16מהסיבית ה
במנט' bit, ההמקורית?1האחרון =
42
MultiplyMultiply תיאור:
)הכפלת מנטיסות, סכימת fp מספרים בייצוג 2המודל מבצע הכפלה של (.justifyאקס' ותיקון בעזרת ה
Input: fp[23:0]שני מספרים בייצוג
Output: , וביט over_flow, ביט המצביע על מצב של fp [23:0]המכפלה בייצוג
under_flowנוסף שמצביע על מצב של הערות:
המודל עובד ללא שעון בכלל.
a_fp [23:0] o_fp [23:0]
over_flow
under_flowb_fp [23:0]
fp מספרים 2נכנסים
נפצל את המספרים למנטיסה ואקס'
נבצע ריפוד: פעמים16את המטיסה נרפד בעזרת האיבר האחרון -
את האקס' נרפד בעזרת האיבר האחרון – פעם אחת
נכפיל את המנטיסות
נסכום את האקס'
ונקבל אתה תוצאהjustifyנעביר את התוצאה ב
דוגמא:דוגמא:
43
חלק ראשון –קליטת המידע ויצירת בלוקים
44
RGBtoYCbCrRGBtoYCbCr- - -ממיר מ-ממיר מRGBRGB-ל- ל YCbCrYCbCr ע"י ע"י מטריצות.מטריצות.הכפלת הכפלת
WrPixelsClientWrPixelsClient- - כותב "רצועות" של בלוקים אל כותב "רצועות" של בלוקים אלשורה אחר שורה.שורה אחר שורה. RAMRAMה-ה-
arb_strictarb_strict- - נותן עדיפות מלאה למודול נותן עדיפות מלאה למודולWrPixelsClientWrPixelsClient..
ram_blocksram_blocks- - מאחסן את הבלוקים של הפיקסלים מאחסן את הבלוקים של הפיקסלים..WrPixelsClientWrPixelsClientהנכתבים ע"י הנכתבים ע"י
DCTclientDCTclient - - -קורא את הפיקסלים מה-קורא את הפיקסלים מהRAMRAM בסדר בסדר בלוק אחר בלוק בלוק אחר בלוק Y,Cb,CrY,Cb,Crושולח ושולח הרצויהרצוי
..DCTDCTהלאה אל ה-הלאה אל ה-date_stamperdate_stamper- - מדביק תאריך לתמונה.. מדביק תאריך לתמונה.בונוסבונוס .
45
46
RGBtoYCbCrRGBtoYCbCr
Inputs:Inputs: Red, Green, Blue Red, Green, Blue –– 24 bit fp. 24 bit fp.
start start –– start convert. start convert. Outputs:Outputs: Y, Cb, Cr Y, Cb, Cr –– 24 bit fp. 24 bit fp.
47
RGBtoYCbCr contRGBtoYCbCr cont..
YY 0.299 0.587 0.114 0.299 0.587 0.114 R R 128 128
Cb = Cb = - 0.1687 - 0.3313 0.5 * - 0.1687 - 0.3313 0.5 * G - G - 0 0
Cr Cr 0.5 - 0.4187 - 0.0813 0.5 - 0.4187 - 0.0813 B B 0 0
logic
logic
mux
0.2990.2990.5870.5870.1140.114
--0.16870.1687
--0.33130.33130.50.5
0.50.5--0.41870.4187
--0.08130.0813
mul add reg muxRGB
j
j
i
i
Y
Cb
Cr
-128
48
RGBtoYCbCr contRGBtoYCbCr cont..
start
calculations
dout_valid, when Y,Cb and Crcalculated and ready.
49
RGBtoYCbCr contRGBtoYCbCr cont..
שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה שימוש ב שימוש בmultipliermultiplier.יחיד. יחיד מטריצת הקבועים מוחזקת כמערך דו מימדי של מטריצת הקבועים מוחזקת כמערך דו מימדי שלwireswires-11 ו- ו-00. )מקוצרים ל-. )מקוצרים ל
בהתאמה(.בהתאמה(. שני רגיסטרים שני רגיסטריםi,ji,j.רצים על הכפלת המטריצה. רצים על הכפלת המטריצה המוקסים בכניסה ובמוצא מנתבים את המידע בהתאם ל המוקסים בכניסה ובמוצא מנתבים את המידע בהתאם לi,ji,j.. רגיסטר זמני שומר את הערך הנצבר של כפל השורה בוקטור העמודה ובסוף השורה רגיסטר זמני שומר את הערך הנצבר של כפל השורה בוקטור העמודה ובסוף השורה
מועבר למוצא המתאים.מועבר למוצא המתאים.
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו -שמירת ערכי המטריצה ב- שמירת ערכי המטריצה בROMROM .מחוץ למודול. מחוץ למודול
חסרונות: כמות מספרים קטנה שלא מצדיקה הוספת חסרונות: כמות מספרים קטנה שלא מצדיקה הוספתROMROM .. שמירת הערכים בתוך מערך דו מימדי פנימי הייתה טבעית יותר כי מדובר במטריצה, וזה שמירת הערכים בתוך מערך דו מימדי פנימי הייתה טבעית יותר כי מדובר במטריצה, וזה
הקל על ביצוע פעולת הכפל.הקל על ביצוע פעולת הכפל.
50
WrPixelsClientWrPixelsClient
Inputs:Inputs: Y, Cb, Cr Y, Cb, Cr –– 24 bit fp. 24 bit fp.ack ack –– acknowledge from arb_strict. acknowledge from arb_strict.
Outputs:Outputs: data data –– 72 bit of {Y,Cb,Cr} together. 72 bit of {Y,Cb,Cr} together.strip_ready strip_ready –– finished writing a full strip into RAM. finished writing a full strip into RAM.start_add start_add –– starting address of the strip in RAM. starting address of the strip in RAM.req req –– request from arb_strict. request from arb_strict.
51
WrPixelsClient contWrPixelsClient cont..
Y
Cb
Cr
ack
to arb/ram_blocks{Y,Cb,Cr }72 bit
spen_in
din_validreq
add cnt cmp
muxto DCTclient
blocks_num
1
strip_ready (1 bit pulse), start_add (14 bit)
Strip ready0
52
WrPixelsClient cont.WrPixelsClient cont.
valid from RGBtoYCbCr
pixels
strip ready to DCTclient,when a full strip writtento ram_blocks
start_add to DCTclient,when a full strip writtento ram_blocks{Y,Cb,Cr }data to ram_Blocks
always receives ack for req
53
WrPixelsClient contWrPixelsClient cont
שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה -הכתיבה אל ה- הכתיבה אל הram_blocksram_blocks מתבצעת בכל פעם שיש מתבצעת בכל פעם שיש validvalid -מ- מ RGBtoYCbCrRGBtoYCbCr.. – וכך הכתיבה מתבצעת "שורה אחר שורה". , וכך הכתיבה מתבצעת "שורה אחר שורה".11הכתובת לכתיבה עולה ב – הכתובת לכתיבה עולה ב , המודול מקבל בכניסה את אורך התמונה וכך ניתן לדעת מתי התמלאה "רצועה המודול מקבל בכניסה את אורך התמונה וכך ניתן לדעת מתי התמלאה "רצועה
שלמה".שלמה". עבור כל "רצועה" שהתמלאה נשלח הפולס עבור כל "רצועה" שהתמלאה נשלח הפולס""strip readystrip ready”” והכתובת ממנה התחילה והכתובת ממנה התחילה
על מנת שידע מתי ומהיכן להתחיל לקרוא. על מנת שידע מתי ומהיכן להתחיל לקרוא.DCTclientDCTclientה"רצועה" להתמלא, אל ה- ה"רצועה" להתמלא, אל ה- -המודול תמיד יקבל עדיפות מה- המודול תמיד יקבל עדיפות מהarb_strictarb_strict.על מנת לשמור על זרימת מידע תקינה. על מנת לשמור על זרימת מידע תקינה
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו 88ספירת ספירת hdhd."במקום לקבל את רוחב התמונה, על מנת לזהות מילוי "רצועה". ,במקום לקבל את רוחב התמונה, על מנת לזהות מילוי "רצועה,
החיסרונות:החיסרונות: -חוסר סינכרון עקב ה- חוסר סינכרון עקב הpipelinepipeline-שנוצר בין ה- שנוצר בין ה imagerimager.לבין המודול. לבין המודול -ה- הhdhd.עולה בתחילת שורה ולא בסוף שורה וזה מסרבל את הלוגיקה. עולה בתחילת שורה ולא בסוף שורה וזה מסרבל את הלוגיקה
-שמירת הפיקסלים בסדר של "בלוק אחר בלוק" בתוך ה- שמירת הפיקסלים בסדר של "בלוק אחר בלוק" בתוך הRAMRAM ולא "שורה אחר ולא "שורה אחר שורה".שורה".
למעשה זהו אינו עניין עקרוני, ובסופו של דבר החלטנו שהמודול למעשה זהו אינו עניין עקרוני, ובסופו של דבר החלטנו שהמודולDCTclientDCTclient יהיה זה יהיה זה שיקרא "בלוק אחר בלוק".שיקרא "בלוק אחר בלוק". 54
arb_strictarb_strict
Inputs:Inputs:wr_data_1, wr_data_2 wr_data_1, wr_data_2 –– 72 bit of {Y,Cb,Cr}. 72 bit of {Y,Cb,Cr}.add_1, add_2 add_1, add_2 –– wanted address of RAM. wanted address of RAM.req_1, req_2 req_1, req_2 –– clients requests. clients requests.rnw_1, rnw_2 rnw_1, rnw_2 –– ““read not writeread not write”” requests of the clients. requests of the clients.
Outputs:Outputs: ack_1, ack_2 ack_1, ack_2 –– acknowledges to clients. 1 has higher acknowledges to clients. 1 has higher priority.priority.
add, wr_data, rnw add, wr_data, rnw –– preferred client preferred client’’s signals directed s signals directed to RAM.to RAM.
55
arb_strict contarb_strict cont..
logic
logic
mux
req1 (gets full priority)
req2
ack1
ack2
Address, Datato ram_blocks
Address1, Data1
Address2
Client1 = WrPixelsClient
Client2 = DCTclient
56
arb_strict contarb_strict cont..
client_2 requests constantly,But he gets ack only if client_1doesn’t send a request.
whenever client_1 sends a request,he’s acknowledged immediately.
the acknowledgedclient’s wires connectedto ram_blocks.
client1 = WrPixelsClient client2 = DCTclient 57
arb_strict contarb_strict cont..
שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה -מגדיר יחס עדיפות בין המודולים המחוברים דרכו אל ה- מגדיר יחס עדיפות בין המודולים המחוברים דרכו אל הram_blocksram_blocks.. -בכל פעם שהמודול המועדף ביותר מבקש פניה ל- בכל פעם שהמודול המועדף ביותר מבקש פניה לram_blocksram_blocks ( (reqreq)) הוא מקבל הוא מקבל
..ram_blocksram_blocks, ללא תלות אם באותו זמן מודול אחר פונה אל ה- , ללא תלות אם באותו זמן מודול אחר פונה אל ה- ((ackack))אישור מיידי אישור מיידי -כמו כן, אם המודול המועדף מתקשר עם ה- כמו כן, אם המודול המועדף מתקשר עם הram_blocksram_blocks שום מודול אחר לא יקבל שום מודול אחר לא יקבל
..((strict lockstrict lock))אישור אם יבקש פנייה עד שהמודול המועדף יסיים את ההתקשרות. אישור אם יבקש פנייה עד שהמודול המועדף יסיים את ההתקשרות. 11 מודולים בלבד – מודולים בלבד – 22אצלנו יחס העדיפות נקבע בין אצלנו יחס העדיפות נקבע בין--WrPixelsClient, 2-WrPixelsClient, 2-
DCTclientDCTclient..
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו למעשה יש כמה קונפיגורציות למימוש למעשה יש כמה קונפיגורציות למימושarbarb כפי שנלמדו בקורס, אך כמובן כפי שנלמדו בקורס, אך כמובן
היא המתאימה ביותר עבורינו כיוון שאין למנוע מ- היא המתאימה ביותר עבורינו כיוון שאין למנוע מ- strict lockstrict lockשקונפיגורציית ה- שקונפיגורציית ה- WrPixelsClientWrPixelsClient -את ההתקשרות עם ה- את ההתקשרות עם ה ram_blocksram_blocks.)בשום מקרה )ראה לעיל(. בשום מקרה )ראה לעיל
58
ram_blocksram_blocks
Inputs:Inputs: add add –– 14 bit address. 14 bit address.
wr_data wr_data –– 72 bit of {Y,Cb,Cr}to store. 72 bit of {Y,Cb,Cr}to store. Outputs:Outputs: rd_data rd_data –– 72 bit of {Y,Cb,Cr}to 72 bit of {Y,Cb,Cr}to
read.read.59
ram_blocks contram_blocks cont..“block1” “block2”
ram_blocksR 24bit G 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bitR 24bit B 24bit
line1 of block1
line1 of block2
line2 of block1
G 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bitG 24bit
IMAGE
מילוי בסדר "רגיל""שורה אחר שורה"
60
ram_blocks contram_blocks cont..
the pixels being filled:
srrip_ready, DCTclientcan start reading the data.
rnw swiches to read becauseDCTclient began reading.
DCTclient beginreading the data.
WrPixelsClient continueswrite occasionaly, and thedata not being read duringthis cycle.
61
ram_blocks contram_blocks cont..שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה "מאחסן זמנית את הפיקסלים על מנת שישלפו ממנו בסדר של "בלוק אחר בלוק" מאחסן זמנית את הפיקסלים על מנת שישלפו ממנו בסדר של "בלוק אחר בלוק
..DCTDCTלצורך ביצוע ה- לצורך ביצוע ה- ביט. ביט.7272 פיקסלים, ובסה"כ פיקסלים, ובסה"כ 33 ביט כפול ביט כפול 2424רוחב כל תא הינו רוחב כל תא הינו רצועות" מלאות. "רצועות" מלאות.22מרחב הכתובות תוכנן כך שהזיכרון יוכל לאחסן בו זמנית עד מרחב הכתובות תוכנן כך שהזיכרון יוכל לאחסן בו זמנית עד"
פיקסלים, החישוב הינו: פיקסלים, החישוב הינו:10241024ובהנחה שרוחב התמונה המירבי הינו ובהנחה שרוחב התמונה המירבי הינו
1024 * 8 * 2 = 16K1024 * 8 * 2 = 16K =>=> 14 bit14 bit
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו.מיתוג בין שני אזורי זיכרון, אחד לכל רצועה, זה יותר פשוט אך בזבזני יותר.מיתוג בין שני אזורי זיכרון, אחד לכל רצועה, זה יותר פשוט אך בזבזני יותר
פיקסליםבשורה
שורותברצועה
רצועות
62
DCTclientDCTclient
Inputs:Inputs:start start –– strip ready in RAM. strip ready in RAM.start_add start_add –– starting address of the strip in starting address of the strip in
RAM.RAM.rd_data rd_data –– 72 bit of {Y,Cb,Cr} from RAM. 72 bit of {Y,Cb,Cr} from RAM.ack ack –– acknowledge from arb_strict. acknowledge from arb_strict.
Outputs:Outputs: Ydata, Cbdata, Crdata Ydata, Cbdata, Crdata –– 24 bit fp. 24 bit fp.req req –– request from arb_strict. request from arb_strict.
63
DCTclient contDCTclient cont..ram_blocks
line1 of block1
line1 of block2
line2 of block1
Y
Cb
Crmux
{Y,Cb,Cr }72 bit
ack
computed
address
computed
address
to ram_blocks(through arb_strict)
R 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bit
R 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bitR 24bitG 24bitB 24bit
G 24bit
“block1”
Y
Cb
Cr
“block2” “block3”
שליפה ושליחה בסדר של "בלוק אחר בלוק"
64
DCTclient contDCTclient cont..
start received fromWrPixelsClient whena strip is ready.
the read address is setto the start_add receivedfrom WrPixelsClient, andadvanced on.
req being set,and ack received.
d_out_valid, with 8clock spaces requiredby the DCT modules.
65
DCTclient contDCTclient cont..שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה -ה- הDCTclientDCTclient -שולף את הפיקסלים מה- שולף את הפיקסלים מה ram_blocksram_blocks ע"פ סדר מוגדר כך שהוא ע"פ סדר מוגדר כך שהוא
בסדר של "בלוק אחר בלוק". בסדר של "בלוק אחר בלוק".DCTDCTמעביר אותם הלאה אל ה- מעביר אותם הלאה אל ה- מקבל את הפולס מקבל את הפולס""strip readystrip ready”” "ואת הכתובת ההתחלתית שבה מאוחסנת ה"רצועה" ואת הכתובת ההתחלתית שבה מאוחסנת ה"רצועה
..ram_blocksram_blocks, וכך יודע מתי ומהיכן לקרוא את הפיקסלים מה- , וכך יודע מתי ומהיכן לקרוא את הפיקסלים מה- ((start_addstart_add))הנוכחית הנוכחית חישוב הכתובת: המודול מכיל שני מונים פנימיים חישוב הכתובת: המודול מכיל שני מונים פנימייםi,ji,j המציינים את מספר השורה המציינים את מספר השורה
המציין את המציין את block_cntblock_cntוהעמודה של הפיקסל הנוכחי בתוך הבלוק הנוכחי, ומונה והעמודה של הפיקסל הנוכחי בתוך הבלוק הנוכחי, ומונה הבלוק הנוכחי בתוך ה"רצועה". כמו כן מקבל בכניסה את מספר הבלוקים הבלוק הנוכחי בתוך ה"רצועה". כמו כן מקבל בכניסה את מספר הבלוקים
((blocks_numblocks_num)).. חישוב הכתובת לשליפת הפיקסל אם כך הינו:חישוב הכתובת לשליפת הפיקסל אם כך הינו:
add = start_add + (i*blocks_num*8 + block_cnt*8 + j)add = start_add + (i*blocks_num*8 + block_cnt*8 + j) שעונים בין בלוק לבלוק בשליחה אל שעונים בין בלוק לבלוק בשליחה אל 450450 שעונים מלאים בין פיקסל לפיקסל ו- שעונים מלאים בין פיקסל לפיקסל ו- 88ממתין ממתין
על מנת לתת לו את הזמן הנדרש לביצוע פעולתו. על מנת לתת לו את הזמן הנדרש לביצוע פעולתו. DCTDCTה- ה- -יחד עם זאת, יש לדאוג שקצב "ריקון" ה- יחד עם זאת, יש לדאוג שקצב "ריקון" הram_blocksram_blocks יהיה מהיר יותר מקצב המילוי יהיה מהיר יותר מקצב המילוי
שלו, על מנת למנוע "דריסה" של הפיקסלים.שלו, על מנת למנוע "דריסה" של הפיקסלים.
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו -כפי שהוסבר ב- כפי שהוסבר בWrPixelsClientWrPixelsClient -השליפה היתה נעשית בסדר רגיל מה- , השליפה היתה נעשית בסדר רגיל מה ,
ram_blocksram_blocks אילו היינו מחליטים לאחסן בו את הפיקסלים מראש בסדר של "בלוק אילו היינו מחליטים לאחסן בו את הפיקסלים מראש בסדר של "בלוק אחר בלוק".אחר בלוק".
66
חלק שני –עיבוד המידעחלק שני –עיבוד המידע
67
DCT AlgorithmDCT Algorithm
68
DCT AlgorithmDCT Algorithm
CC= =
DCT)Block( = C * Block * CDCT)Block( = C * Block * C’’
69
DCTDCT תיאור:
המודל מבצע הכפלה של המטריצה במטריצת מקדמים בצורה הבאה: ופולט את התוצאה בסדר "זיגזג".
Input:data_in: מספר בייצוג fp מספרים המיצגים 64, כחלק מבלוק של
שורה אחרי שורה שמאל לימין.8X8מטריצה spen_in:( 8+1*64 דלוק כל זמן כניסת הבלוק.)מחזורים
d_in_valid: דלוק בכניסת fp.)אחד )מחזור אחד rst, mclk
Output:data_out: מספר בייצוג fp שהוא תוצאת מכפלת המטריצות, כחלק ,
בסידור "זיגזג".8X8 מספרים המיצגים מטריצה 64מבלוק של spen_out:( 8+1*64 דלוק כל זמן יציאת הבלוק.)מחזורים
d_out_valid: דלוק ביציאת fp.)אחד )מחזור אחד
הערות:המטריצה היא אורטוגונלית ולכן אותה מטריצת קבועים
תשמש להכפלה משמאל ומימין. מחזורים ליציאת האיבר 17מרגע כניסת האיבר האחרון נמתין
הראשון.
1C In C
1 TC C
T
input
70
+ 1 1 0 1 0 1 1 0…
validx
ROM
DCT – block DCT – block diagramdiagramdata_in[23:0]
data_out[23:0]
24
24
1
במידה וזו פעם ראשונה שנרשום בטיפול בבלוק הנוכחיiבמקום ה-
אחרת נסכום data_inנרשום את ה
יברור בין מצב של הכפלה משמאל)מטריצה נכנסת( להכפלה מימין )שאז
המטריצה היא תוצאת ההכפלה הקודמת(ramששמורה ב
מערך וולידציה
ram64 fp
71
תחילת הבלוק הנכנס:תחילת הבלוק הנכנס:
עולה spen_inה
spen_outוה d_out_valid .)למטה )עד שלא נקבל את כל האינפוטים של הבלוק כולו אנחנו לא מוציאים שום דבר החוצה
נשים לב שהאיבר הראשון מקבל מחזור נוסף לצורך איתחול
SignalsSignals
::הוצאת איברים החוצההוצאת איברים החוצה
, עולה כל שמונה מחזורים יוצא איבר אחד החוצה )אחרי בעצם מכפלה של שורה כפול עמודה(.spen_outשמהרגע שה 72
עבודה מקבילית:עבודה מקבילית:
. לכולם סיגנלי b2v_DCT_Y , b2v_DCT_Cb , b2v_DCT_Cr עובדים במקביל : DCTשלושה ( ואותה מטריצת מקדמים. clk,rst,spen_in,d_in_validמערכת זהים )
73
שיקולי תכנון:שיקולי תכנון: קריאה של כל קריאה של כלinputinputפעם אחת בלבד פעם אחת בלבד איתחול – בעזרת מטריצת וולידציהאיתחול – בעזרת מטריצת וולידציה מטריצת קבועים – נשים לב שהמטריצות אורטוגונליות, ולכן מספיקה מטריצה אחת ליצוג, ענן מטריצת קבועים – נשים לב שהמטריצות אורטוגונליות, ולכן מספיקה מטריצה אחת ליצוג, ענן
לוגי יקבע את סדר קריאה.לוגי יקבע את סדר קריאה."זיגזג – מודל שקובע באיזה סדר להכפיל מימין על מנת להוציא את התוצאות בסדר "זיגזג"זיגזג – מודל שקובע באיזה סדר להכפיל מימין על מנת להוציא את התוצאות בסדר "זיגזגשימוש במודל מכפלה וסכימה אחדשימוש במודל מכפלה וסכימה אחדשמירה על קצב קליטה וטרופוט קבועשמירה על קצב קליטה וטרופוט קבוע
:אלטרנטיבות שנבחנו. נפסל משיקולי חיסכון במקום, למרות ROMזיגזג – נבחנה האופציה להחליף את המודל ב•
שלטעמם של אחרים זה יותר אלגנטי. אינפוטים. נבחרה האופציה 64איתחול ערכים – נבחנה האופציה לאתחל את המטריצה •
למערך ולידציה, משיקולי שעון.
74
QuantizationQuantization
75
QuantizationQuantizationקלטקלט
)בלוק( הזורמים בצורה )בלוק( הזורמים בצורה CrCr או או CbCb או או YY ערכים של ערכים של 6464 floating floating)הערכים מיוצגים בצורת )הערכים מיוצגים בצורת DCTDCTטורית לאחר פעולת טורית לאחר פעולת
pointpoint))
עיבוד נתוניםעיבוד נתוניםכל ערך מחולק בערך קוונטיזציה מתאים.כל ערך מחולק בערך קוונטיזציה מתאים.1(1(
למספרים שלמים בטווח למספרים שלמים בטווח 11המרת התוצאה מסעיף המרת התוצאה מסעיף 2(2(num< 1024num< 1024> 1024> 1024. -. -
פלטפלט CrCr או או CbCb או או YY מקוונטטים ושלמים של מקוונטטים ושלמים של DCTDCT ערכי ערכי 6464
)הערכים מיוצגים בצורת )הערכים מיוצגים בצורת )בלוק( הזורמים בצורה טורית.)בלוק( הזורמים בצורה טורית.((22המשלים ל-המשלים ל-
76
Data_in [23:0] Data_out
[10:0]
ROM Adress [5:0]ROMQuantization
Table
multiplying
Quantization
FloatToint
1/Quantization value [23:0]
77
ROMQuantization
Table
multiplying
Quantization
FloatToint
24’hfc00_08 = 252
24’h4000_fd = 1/16
6’h03 = 3
11’h010 = 16
78
Example of signalsExample of signals
Output with zeros because the quantization
Delaying of one cycle
79
QuantizationQuantizationשיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה יצירת מודול נפרד של יצירת מודול נפרד שלfloat_to_intfloat_to_int על מנת להתמקד בכל מקרי הקצה על מנת להתמקד בכל מקרי הקצה
של פעולה זו.של פעולה זו. יצירת יצירתcyclecycle בין קלט לפלט על מנת לוודא את התוצאה כאשר המחיר אינו בין קלט לפלט על מנת לוודא את התוצאה כאשר המחיר אינו
((pipelinepipelineגבוה )גבוה )
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-במקום המרה ל-במקום המרה לintint-המרה ישירה ל- המרה ישירה ל categorycategory -ו- ו offsetoffset כי זהו הפלט כי זהו הפלט
החשוב.החשוב.-יתרונות: האקספוננט של ה-יתרונות: האקספוננט של הfloatfloat-זהה ל- זהה ל categorycategory-ומקום ה-, ומקום ה ,offsetoffset ידוע ידוע
)צמוד לנקודה( .)צמוד לנקודה( . חסרונות: במודול הבא קיים גם מקדם חסרונות: במודול הבא קיים גם מקדםDCDC הדורש חיסור שאי אפשר לקיימו הדורש חיסור שאי אפשר לקיימו
..offsetoffset ו- ו-categorycategoryלאחר שהמספר מתחלק ל-לאחר שהמספר מתחלק ל-.חסרונות: בניתי קודם את המודול הבא, והשינוי היה דורש יותר עבודה.חסרונות: בניתי קודם את המודול הבא, והשינוי היה דורש יותר עבודה
80
RLC_DPCMRLC_DPCMמטרהמטרה
לכווץ את המידע הקיים.לכווץ את המידע הקיים.
הדרךהדרך
.I.I ערכי אפס אינם יוצאים כפלט אלא ערכי אפס אינם יוצאים כפלט אלאמתווספים לערכים שאינם אפס.מתווספים לערכים שאינם אפס.
.II.II ערכים שאינם אפס נערכים מחדש ערכים שאינם אפס נערכים מחדשלקראת קידוד בעזרת "קוד האפמן". לקראת קידוד בעזרת "קוד האפמן".
81
RLC_DPCMRLC_DPCMקלטקלט
הזורמים בצורה טורית. כל הזורמים בצורה טורית. כל CrCr או או CbCb או או YY של של שלמיםשלמים מקוונטטים ו מקוונטטים וDCTDCT ערכי ערכי 6464
aa>>10241024, מקיים , מקיים aaערך, לדוגמה, ערך, לדוגמה, >1024>1024--הערות:הערות:
להלן, "בלוק"., להלן, "בלוק".6464הערכים מאוגדים ביחידות של הערכים מאוגדים ביחידות של ,-22הערכים מיוצגים בצורת המשלים ל-הערכים מיוצגים בצורת המשלים ל.. נשים לב כי הערך הראשון ב"בלוק" הוא מקדם נשים לב כי הערך הראשון ב"בלוק" הוא מקדםDCDC והשאר מקדמי והשאר מקדמי ACAC..
עיבוד נתוניםעיבוד נתוניםn כל ערך שהינו אפס אינו יוצא כפלט אלא נרשם בעיבוד נתונים, ורק אם אחריו כל ערך שהינו אפס אינו יוצא כפלט אלא נרשם בעיבוד נתונים, ורק אם אחריו
בבלוק יופיע ערך שאינו אפס, ייצא הערך הזה כפלט ואיתו מספר האפסים בבלוק יופיע ערך שאינו אפס, ייצא הערך הזה כפלט ואיתו מספר האפסים ( כמה ( כמה 0,150,15 אפסים ייצאו זוג הערכים ) אפסים ייצאו זוג הערכים )1515שהופיעו לפניו. )אם נרשמו יותר מ-שהופיעו לפניו. )אם נרשמו יותר מ-
שצריך, ואח"כ הערך שאינו אפס יחד עם מספר האפסים שנותר. (שצריך, ואח"כ הערך שאינו אפס יחד עם מספר האפסים שנותר. (n מציאת הקבוצה אליה הערך משתייך, להלן, הקטגוריה. כלומר, נמצא קטגוריה מציאת הקבוצה אליה הערך משתייך, להלן, הקטגוריה. כלומר, נמצא קטגוריהnn
..a|< 2^na|< 2^n( =<|( =<|n-1n-1^)^)22 כך ש- כך ש- aaלערך לערך n -מציאת ה- מציאת הoffsetoffset.המיקום של הערך בתוך הקטגוריה בסדר עולה., המיקום של הערך בתוך הקטגוריה בסדר עולה ,
פלטפלט שלו ומספר האפסים שהופיעו לפניו שלו ומספר האפסים שהופיעו לפניו offsetoffsetערכים הכוללים את הקטגוריה של הערך, ה-ערכים הכוללים את הקטגוריה של הערך, ה-
ברצף . נשים לב כי כעת איננו יודעים מהי כמות ערכי הפלט שיצאו רק אנו יודעים ברצף . נשים לב כי כעת איננו יודעים מהי כמות ערכי הפלט שיצאו רק אנו יודעים ..6464כי הכמות אינה גדולה מ-כי הכמות אינה גדולה מ-
( לסמן סוף בלוק.( לסמן סוף בלוק.0,00,0כמו כן אם הערך האחרון בבלוק הינו אפס יישלח זוג ערכים )כמו כן אם הערך האחרון בבלוק הינו אפס יישלח זוג ערכים )
82
הצגת הערכים מחדשהצגת הערכים מחדש
קטגוריהקטגוריה
83
הצגת הערכים מחדשהצגת הערכים מחדש
-ה-הOffsetOffset מיקוםמיקום מציג את מציג את המספר בתוך הקטגוריה המספר בתוך הקטגוריה
..בסדר עולהבסדר עולה בה בה 33לדוגמה קטגוריה לדוגמה קטגוריה
נמצאים המספרים: נמצאים המספרים: --77,,……-,-,4,44,4,,……77
-ניתן לראות כי ה- ניתן לראות כי הoffsetoffset תמיד חיובי. כמו כן תמיד חיובי. כמו כן
של מספר חיובי של מספר חיובי offsetoffsetה-ה-הוא המספר עצמו, ללא הוא המספר עצמו, ללא
צורך בביט סימן.צורך בביט סימן.-מספר הביטים של ה-מספר הביטים של הoffsetoffset
קטן בביט אחד מערך קטן בביט אחד מערך המספר בכניסה.המספר בכניסה.
Offset Offset המספרהמספר מציאתמציאתoffsetoffset
7777
6666
5555
4444
-4-433
-5-522
-6-611
-7-70084
הצגת הערכים מחדש בבינאריהצגת הערכים מחדש בבינאריהמספהמספ
בבינאריבבינארירר
7700000000000000
01110111
6600000000000000
01100110
5500000000000000
01010101
4400000000000000
01000100
-4-4111111111111111110011100
-5-5111111111111111101111011
-6-6111111111111111101011010
-7-7111111111111111100111001
מציאת קטגוריהמציאת קטגוריה
33 ביטים] ביטים]1111[[
OffsetOffset ביטים] ביטים]1010[[
0000000000000000111111
00000000000000111111
0000000000000000111010
00000000000000111010
0000000000000000110101
00000000000000110101
0000000000000000110000
00000000000000110000
1111111111111111001111
00000000000000001111
1111111111111111001010
00000000000000001010
1111111111111111000101
00000000000000000011
1111111111111111000000
00000000000000000000
a=a-1
If )a<0(
הפחתה לערכים
השליליים
85
Data_in [10:0]
Category[3:0]
RLC_DPCM
Ofset[9:0]
Num of zeros [3:0]
d_out_validd_in_valid
1) if the input is zero just count it.
2) If not, find the
large bit of the number (category)
3) The location of the input in
the category
Inputs & Outputs
86
11’h000
Not relevant
RLC_DPCM
Not relevant
Not relevant
d_out_valid ==0d_in_valid==1
Num==0
Valid data became to not valid
Data_in is zero a=0
87
דוגמאות של דילול המידעדוגמאות של דילול המידע
A lot of Valid data became to not valid data thanks to the quantization that zero the data .
אפסים
מספר האפסים
88
דוגמה לדילול אפסיםדוגמה לדילול אפסים( בלבד ביציאה.0,0 וערך )DC ערכי אפס בכניסה יוצאים כערך 63
ערכים שאינם אפס המעורבים עם אפסים ובהמשך 5 ערכים מתוכם רק 63( בלבד0,0 ערכים וערך )5רק אפסים. יוצאים כ-
89
דוגמה לדילול אפסים באוסף של דוגמה לדילול אפסים באוסף של בלוקיםבלוקים
כניסהיציאה
90
11’h050 = 80
4’b0111 = 7
RLC_DPCM
10’b0001010000 = 80
4’b0001 = 1
d_out_valid ==1d_in_valid==1
Num!=0Num =
00001010000
Category = 7
Offset = 80 0001010000
Next Data_in is positive
a>0
91
11’h7b0 = -80
4’b0111 = 7
RLC_DPCM
10’b 00000101111 =
474’b0001 = 1
d_out_valid ==1d_in_valid==1
Num!=0 Num = 11110110000Category = 7
Offset = 000001011
11
Next Data_in is negative
a<0
92
דוגמה לשלושה בלוקים המעובדים דוגמה לשלושה בלוקים המעובדים במקבילבמקביל
in
out
Cb
Cr
Y
93
,מודול זה, מודול זהRLC_DPCMRLC_DPCM מקבל את המידע , מקבל את המידע , מחזורי שעון, לכן לא נאגר מידע מחזורי שעון, לכן לא נאגר מידע 88פעם ב-פעם ב-
בכניסה, וקבלת המידע פשוטה.בכניסה, וקבלת המידע פשוטה. 33ביציאה המידע צריך להיות יציב לאורך ביציאה המידע צריך להיות יציב לאורך
מודולים של מודולים של 33מחזורי שעון בדיוק כי קיימים מחזורי שעון בדיוק כי קיימים RLC_DPCMRLC_DPCM במקביל אך המודול הבא במקביל אך המודול הבא
אחריהם קורא כל פעם רק מאחד מהשלושה.אחריהם קורא כל פעם רק מאחד מהשלושה.
הכניסה והיציאה הכניסה והיציאה תזמוןתזמון
94
דוגמה לתזמון האותות בסוף דוגמה לתזמון האותות בסוף בלוקבלוק
בכניסה המידע cycleבתוקף ל-
אחד, אך ביציאה cycles 3ל-
Spen_in יורד ולאחר מחזורים יורד 3
spen_out
end of block מופיע לשלושה מחזורי
שעון
95
בעיה בתזמון המוצא ופתרונהבעיה בתזמון המוצא ופתרונה כל עוד הערכים בכניסה הם אפס, אין ערכים כלל כל עוד הערכים בכניסה הם אפס, אין ערכים כלל
אפסים מופיע ערך אפסים מופיע ערך 6060במוצא, אבל ,לדוגמה, אם לאחר במוצא, אבל ,לדוגמה, אם לאחר זוגות מספרים ברצף. זוגות מספרים ברצף.44שונה מאפס, אמורים לצאת שונה מאפס, אמורים לצאת
((0,150,15( , )( , )0,150,15( , )( , )0,150,15( , )( , )a,12a,12 ) )
מחזורים, אם כן, מחזורים, אם כן, 33: כל ערך צריך להישאר : כל ערך צריך להישאר הבעיההבעיה מחזורים מחזורים 88 מחזורים, אבל לאחר מחזורים, אבל לאחר 1212המוצא תפוס ל-המוצא תפוס ל-נכנס ערך חדש.נכנס ערך חדש.
ניתן להפעיל : ניתן להפעיל הפתרוןהפתרון :FIFOFIFO אך, לדעתי, פתרון זה , אך, לדעתי, פתרון זה ,מיותר כי אין כאן הרבה ערכים שאינם ידועים וצריך מיותר כי אין כאן הרבה ערכים שאינם ידועים וצריך
לשמור אותם, ונדרשת רק שמירה של הערך האחרון לשמור אותם, ונדרשת רק שמירה של הערך האחרון ((a,12a,12 ) )..
16+16+16+12 = 60
96
DCDCהערך הערך
-הערך הראשון של הבלוק הוא ערך ה-הערך הראשון של הבלוק הוא ערך הDCDC..-ערך ה-ערך הDCDC הוא הממוצע שסביבו נעים הערכים הוא הממוצע שסביבו נעים הערכים
הבאים של הבלוק.הבאים של הבלוק.-קידוד ה-קידוד הDCDC נבנה על-פי ההנחה שאין הפרש נבנה על-פי ההנחה שאין הפרש
בבלוק הנוכחי לערכו בבלוק בבלוק הנוכחי לערכו בבלוק DCDCגדול בין ערך ה-גדול בין ערך ה- הוא ההפרש הוא ההפרש DCDCהקודם, לכן ערך המוצא של ה-הקודם, לכן ערך המוצא של ה-
–– Out = DIFF = DCOut = DIFF = DCi iבין הערכים הנ"ל. בין הערכים הנ"ל. DCDCi-1i-1
-ערך ה-ערך הDCDC.נרשם בכל מקרה גם אם הוא אפס. נרשם בכל מקרה גם אם הוא אפס 97
מחדש מחדשDCDCהצגת ערך ה-הצגת ערך ה-
יש לשים לב יש לשים לבלמקרה קצה בו למקרה קצה בו
ההפרש בין ההפרש בין הערכים גדול מ-|הערכים גדול מ-|
|, לכן לערכי |, לכן לערכי 10241024 יש קטגוריה יש קטגוריה DCDCה-ה-
..1111נוספת, נוספת, -ערך ה-ערך הoffsetoffset
נבנה בצורה זהה נבנה בצורה זהה לשאר הערכים.לשאר הערכים.
98
DCDC דוגמא לקידוד ה-דוגמא לקידוד ה-
הבלוק הבא
Category 4 + offset 3 = -12
DCi – DCi-1 = -25 –)-13( = -12
DCi – DCi-1 = 8 –)-3( = 11
DCi – DCi-1 = -4 –8 = -12
Category 4 + offset 11 = 11
Category 4 + offset 003 = -12
99
ישנן שתי אפשרויות לסיום הבלוקישנן שתי אפשרויות לסיום הבלוק.הערך האחרון הנכנס שונה מאפס.הערך האחרון הנכנס שונה מאפס
הערך במוצא יהיה מקודד כרגיל ויחד איתו יעלו הערך במוצא יהיה מקודד כרגיל ויחד איתו יעלו ””d_out_validd_out_valid““לשלושה מחזורי שעון הדגלים לשלושה מחזורי שעון הדגלים
““eobeob””.. יירד מחזור שעון אחד אחריהם. יירד מחזור שעון אחד אחריהם.””spen_outspen_out““הדגל הדגל
.הערך האחרון הנכנס הוא אפס.הערך האחרון הנכנס הוא אפס (, (, 0,00,0הערך במוצא יהיה )הערך במוצא יהיה )
category = 0 & num_of_zeros =0category = 0 & num_of_zeros =0כלומר כלומר כדי להודיע על סיום הבלוק.כדי להודיע על סיום הבלוק.
סוף הבלוקסוף הבלוק
100
סוף הבלוק - דוגמאסוף הבלוק - דוגמאאפשרות א' המידע האחרון שונה מאפס
אפשרות ב' המידע האחרון הוא אפס
( 0,0המידע במוצא )101
RLC_DPCMRLC_DPCMשיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה מציאת הביט המשמעותי הראשון במספר השלם והגדרת הקטגוריה לפיו. )במספר מציאת הביט המשמעותי הראשון במספר השלם והגדרת הקטגוריה לפיו. )במספר
חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון שאינו אחד(חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון שאינו אחד(-מציאת ה-מציאת הoffsetoffset.הוסברה לעיל. הוסברה לעיל אלא אם המידע הוא( אלא אם המידע הוא שמירת מספר האפסים בכל קליטת ערך אפס( שמירת מספר האפסים בכל קליטת ערך אפסDCDC)) קריאת אות המוצא נעשית פעם בשלושה קריאת אות המוצא נעשית פעם בשלושהcyclescycles בלבד, לכן המידע במוצא חייב בלבד, לכן המידע במוצא חייב
בדיוק אחרת תיתכן קריאה כפולה או ייתכן שהמידע בדיוק אחרת תיתכן קריאה כפולה או ייתכן שהמידע cyclescyclesלהישאר לשלושה להישאר לשלושה במוצא כלל לא ייקרא. בעקבות כך ומפני שאנו יודעים שלא יגיע עוד מידע למבוא במוצא כלל לא ייקרא. בעקבות כך ומפני שאנו יודעים שלא יגיע עוד מידע למבוא
והמידע עצמו והמידע עצמו d_out_valid, spen_out, eobd_out_valid, spen_out, eob)) השונים) השונים)flagsflags ה- ה-cyclescycles,, 33תוך תוך בדיוק. בדיוק.cyclescyclesנשמרים לשלושה נשמרים לשלושה
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו ניתן אולי היה ליצור את המודול ללא שעון, אבל מכיוון שבכל מקרה עוברים בדרך ניתן אולי היה ליצור את המודול ללא שעון, אבל מכיוון שבכל מקרה עוברים בדרך
כלל כמה סיבובי שעון עד שמשתמשים באותות המוצא וגם בגלל הצורך להציג כלל כמה סיבובי שעון עד שמשתמשים באותות המוצא וגם בגלל הצורך להציג מידע יציב לאחר לוגיקה לא קצרה העדפתי להוסיף סיבוב שעון אחד בלבד.מידע יציב לאחר לוגיקה לא קצרה העדפתי להוסיף סיבוב שעון אחד בלבד.
בתחילה תוכננו שני מעגלים מקבילים אחד לערך בתחילה תוכננו שני מעגלים מקבילים אחד לערךDCDC ואחד לערכי ואחד לערכי ACAC אבל מנגנון אבל מנגנון הקידוד דומה, לכן העדפתי לעבד את שניהם במודול יחיד עם השינויים הקידוד דומה, לכן העדפתי לעבד את שניהם במודול יחיד עם השינויים
המתבקשים.המתבקשים.FIFOFIFO במוצא , במקרה קצה שהוזכר לעיל, אך שמירת ערך יחיד לאורך כמה במוצא , במקרה קצה שהוזכר לעיל, אך שמירת ערך יחיד לאורך כמה
מחזורי שעון פותרת את הבעיה בצורה יותר פשוטה.מחזורי שעון פותרת את הבעיה בצורה יותר פשוטה.102
RLE_DPCMRLE_DPCMשיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה .מציאת הביט המשמעותי הראשון במספר השלם והגדרת הקטגוריה לפיו. מציאת הביט המשמעותי הראשון במספר השלם והגדרת הקטגוריה לפיו
)במספר חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון )במספר חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון שאינו אחד(שאינו אחד(
-מציאת ה-מציאת הoffsetoffset.ע"י הורדת הביט הנ"ל. ע"י הורדת הביט הנ"ל אלא אם המידע הוא( אלא אם המידע הוא שמירת מספר האפסים בכל קליטת ערך אפס( שמירת מספר האפסים בכל קליטת ערך אפסDCDC)) קריאת אות המוצא נעשית פעם בשלושה קריאת אות המוצא נעשית פעם בשלושהcyclescycles בלבד, לכן המידע במוצא בלבד, לכן המידע במוצא
בדיוק אחרת תיתכן קריאה כפולה או ייתכן בדיוק אחרת תיתכן קריאה כפולה או ייתכן cyclescyclesחייב להישאר לשלושה חייב להישאר לשלושה שהמידע במוצא כלל לא ייקרא. בעקבות כך ומפני שאנו יודעים שלא יגיע שהמידע במוצא כלל לא ייקרא. בעקבות כך ומפני שאנו יודעים שלא יגיע
,d_out_valid, d_out_valid)) השונים) השונים)flagsflags ה- ה-cyclescycles,, 33עוד מידע למבוא תוך עוד מידע למבוא תוך spen_out, eobspen_out, eob והמידע עצמו נשמרים לשלושה והמידע עצמו נשמרים לשלושה cyclescycles.בדיוק. בדיוק
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו ניתן אולי היה ליצור את המודול ללא שעון, אבל מכיוון שבכל מקרה עוברים ניתן אולי היה ליצור את המודול ללא שעון, אבל מכיוון שבכל מקרה עוברים
בדרך כלל כמה סיבובי שעון עד שמשתמשים באותות המוצא וגם בגלל בדרך כלל כמה סיבובי שעון עד שמשתמשים באותות המוצא וגם בגלל הצורך להציג מידע יציב לאחר לוגיקה לא קצרה העדפתי להוסיף סיבוב הצורך להציג מידע יציב לאחר לוגיקה לא קצרה העדפתי להוסיף סיבוב
שעון אחד בלבד.שעון אחד בלבד.
103
Huffman Huffman – – 33חלק חלק codecode
Triple Triple FIFOFIFO
FIFO writerFIFO writer
Huffman Huffman codecode
Serial to Serial to paralelparalel
Flash Flash writerwriter
104
Triple FIFOTriple FIFO FIFOFIFO נכתב לזיכרון נכתב לזיכרון Y, Cr, CbY, Cr, Cb המידע המגיע במקביל מ המידע המגיע במקביל מ •
לצורך העברתו בחזרה למידע טורי.לצורך העברתו בחזרה למידע טורי. מאפשר לאחסן זמנית את שלושת הבלוקים מאפשר לאחסן זמנית את שלושת הבלוקים FIFOFIFO זיכרון ה זיכרון ה •
המגיעים עד להוצאתם לקידוד הופמן.המגיעים עד להוצאתם לקידוד הופמן. הוא לאפשר אחסון זמני של המידע הוא לאפשר אחסון זמני של המידע FIFOFIFO תפקיד נוסף של ה תפקיד נוסף של ה •
..flashflashבמידה ונדרשת עצירה ע"י ה במידה ונדרשת עצירה ע"י ה
105
FIFO_WRITERFIFO_WRITER
-מטרה- מודול זה יקרא את המידע היוצא מה-מטרה- מודול זה יקרא את המידע היוצא מה RLCRLC -המקבילי ויעבירו לאחסון זמני ב- המקבילי ויעבירו לאחסון זמני ב
SUPER_FIFOSUPER_FIFO . .
106
תיאור עבודת המודולתיאור עבודת המודול
למודול זה. למודול זה. inputsinputs מתחברים כ- מתחברים כ- RLCRLCשלושת המודולים של ה-שלושת המודולים של ה- של שלושתם, כך שהוא של שלושתם, כך שהוא data_vlaiddata_vlaidמודול זה סורק את ה-מודול זה סורק את ה-
בודק כל אחד כל שלוש מחזורים. המידע הנכנס מוזרם החוצה בודק כל אחד כל שלוש מחזורים. המידע הנכנס מוזרם החוצה עם רגיסטר שמציין האם המידע היוצא עם רגיסטר שמציין האם המידע היוצא SUPER FIFOSUPER FIFOל-ל-
. . Y/Cb/CrY/Cb/Crשייך ל-שייך ל-
עקרונות חשובים במימוש:עקרונות חשובים במימוש: המידע שנכנס מוחזק לשלוש המידע שנכנס מוחזק לשלושCYCLESCYCLES.. לכל מידע נכנס מתווספים שני ביטים לכל מידע נכנס מתווספים שני ביטיםMSBMSB כך שהראשון מייצג תחילת כך שהראשון מייצג תחילת
בלוק והשני מייצג סוף בלוק.בלוק והשני מייצג סוף בלוק.
107
תחילת-בלוקתחילת-בלוק
INPUT הקידוד-DC-של ה RLC-מגיע יחד, ושלושת ה VALID_BIT נדלקים. בנוסף ה START_BLOCK-מוחזק דלוק על מנת להכניס ל DATA .ביט תחילת בלוק
. CYCהחל מנקודה זו כל ביט רשאי להידלק לבד, כאשר מובטח שיוחזק דלוק למשך שלוש
ביט תחילת בלוק
OUTPUT – wr_sector .מציין את שייכות המידע הנכתב החוצה wr .מציין ניתן לקרוא מידע מהקו
WR_DATA זה המידע שנכתב החוצה כאשר המבנה שלו–st_blk[1],end_blk[1],zeros[4],category[4],offset[10] ביטים. חשוב לציין 20 בסך הכול
.0 נמצא ב- zeros ה DCשכאשר מגיע קידוד 108
אמצע-בלוקאמצע-בלוק
ניתן לראות פה הדלקה של ניתן לראות פה הדלקה שלvalid_bitsvalid_bits -המייצגים מידע תקין ב- המייצגים מידע תקין ב Cb,CrCb,Cr . .
כעבור כעבורCYCCYC כאשר ה כאשר ה wr_sectorwr_sector מצביע על מצביע על CbCb נדלק נדלק wrwr כאשר כאשר תקין.תקין. CrCr הוא מוחזק גם למחזור הבא כיוון שגם ה-הוא מוחזק גם למחזור הבא כיוון שגם ה-
בנוסף בנוסףstart blockstart block .כבוי כיוון שאנו באמצע בלוק. כבוי כיוון שאנו באמצע בלוק
109
סוף-בלוקסוף-בלוק
בסוף הבלוק ניתן לראות הדלקה של בסוף הבלוק ניתן לראות הדלקה שלeobeob -והדלקה של ה- והדלקה של ה bitbit המסמן שזהו המסמן שזהו במידע האחרון בבלוק.במידע האחרון בבלוק.
-בסוף כל בלוק מובטח ששלושת הביטים של ה-בסוף כל בלוק מובטח ששלושת הביטים של הvalidvalid יהיו דלוקים כיוון יהיו דלוקים כיוון שהעבודה שמתבצעת לפני מודול זה מסתיימת באותו הזמן.שהעבודה שמתבצעת לפני מודול זה מסתיימת באותו הזמן.
110
SUPER FIFOSUPER FIFO
-מודול זה ייקרא את המידע מה-מודול זה ייקרא את המידע מהFIFO_WRITERFIFO_WRITER יחיד. יחיד. RAMRAM וייפזר אותו בין שלושה סקטורים ב- וייפזר אותו בין שלושה סקטורים ב-
המידע שיאוכסן ייקרא לעומת זאת בצורה המידע שיאוכסן ייקרא לעומת זאת בצורה סקטוריאליתסקטוריאלית
עצמאי FIFO כל סקטור מתפקד מעין כאשר לכל אחד מוגדר כתובת התחלה
וכתובת סיום. תאים מעבר 10לכל סקטור יש כ-
למינימום ההכרחי, דבר המאפשר סייקלים 80 באורך של HALTלהיערך ל-
. flashהמגיע מה -
111
FIFOFIFOגודל ה-גודל ה--הכתיבה והקריאה מהסקטור של ה-הכתיבה והקריאה מהסקטור של הYY מתבצעת במקביל לכן הוא לא מתבצעת במקביל לכן הוא לא
מתמלא לכן נסתפק בשני כתובות.מתמלא לכן נסתפק בשני כתובות. הקריאה מהסקטור של הקריאה מהסקטור שלCBCB,,CRCR מתחיל כאשר כל הבלוק נמצא כבר ב מתחיל כאשר כל הבלוק נמצא כבר ב
FIFOFIFO קידודים לכל אחד. קיבלנו תוספת קידודים לכל אחד. קיבלנו תוספת 6464. במקרה הקיצוני ביותר יהיו . במקרה הקיצוני ביותר יהיו כתובות. כתובות.128128של עוד של עוד
לכל לכל 1010 כתובות נוספות, כתובות נוספות, 3030 כתובות דרושות, הוספנו כ- כתובות דרושות, הוספנו כ-130130סה"כ סה"כ SECSEC . .. כל כתובת . כל כתובת HALTHALT נותן נותן FLASHFLASHעל מנת להתמודד עם מצב שבו העל מנת להתמודד עם מצב שבו ה. . 8080 סייקלים-סה"כ סייקלים-סה"כ 88אקסטרה נותנת מרווח אגירה של אקסטרה נותנת מרווח אגירה של
112
–עקרון פעולה –עקרון פעולהFIFOFIFOכתיבה ל-כתיבה ל- המידע שנכתב נקרא מהקווים בתנאי שרגל המידע שנכתב נקרא מהקווים בתנאי שרגלWRWR.נמצאת באחד. נמצאת באחד wr_sectorwr_sector שני ביטים - שני ביטים - INPUTINPUT המציינים לאיזה סקטור לכתוב. כתיבה המציינים לאיזה סקטור לכתוב. כתיבה
באחד. באחד. WRWRתתבצע כאמור ש-תתבצע כאמור ש- כאשר בסקטור מסוים מגיעים לגבול העליון של הכתובת המוקצות לאותו כאשר בסקטור מסוים מגיעים לגבול העליון של הכתובת המוקצות לאותו
סקטור, הכתיבה הבאה מתבצעת לכתובת הראשונה באותו סקטור.סקטור, הכתיבה הבאה מתבצעת לכתובת הראשונה באותו סקטור.
113
FIFO signals WRFIFO signals WR
המידע בכניסה נכתב בעליה של
WR
המידע צריך להיכתב 1לסקטור
המידע נכתב 8לכתובת
ניתן לראות מחזור אחריי את הקידום 9בכתובת ל-
114
–עקרון פעולה –עקרון פעולהFIFOFIFOקריאה מ-קריאה מ- המידע נקרא מה המידע נקרא מהFIFOFIFO :בצורה סקטוריאלית: בצורה סקטוריאלית
Y,CB,CRY,CB,CR.וחוזר חלילה. וחוזר חלילה -ה-הFIFOFIFO הוא מודול אדיש, כלומר השליטה הוא מודול אדיש, כלומר השליטה
במעבר בין הסקטורים מתבצעת מבחוץ. במעבר בין הסקטורים מתבצעת מבחוץ. ,כאשר יש מידע בסקטור ממנו רוצים לקרוא, כאשר יש מידע בסקטור ממנו רוצים לקרוא
והמודול שמתחבר והמודול שמתחבר 00 יורדת ל- יורדת ל-EMPTYEMPTYרגל רגל למידע היוצא יכול לקבל מידע.למידע היוצא יכול לקבל מידע.
גילוי נאות:הקריאה של מידע החוצה מתבצע גילוי נאות:הקריאה של מידע החוצה מתבצעבירידת שעון. בירידת שעון.
115
FIFO signals RDFIFO signals RD
רגל EMPTY למעלה- אין מידע
הסקטור הנוכחי ממנו
מבצעת קריאה-
שליטה מבחוץ
ניתן לראות אחריי שני
מחזורים את יוצא מה- המידעRAM ורגל
EMPTYלמטה
מתבצעת כתיבה
לסקטור ממנו קוראים
116
FIFO signals RD-swap FIFO signals RD-swap sectorssectors
המידע 1בסקטור
מסתיים ויש מעבר
2לסקטור הבא בתור.
3 ל-2המעבר בין סקטור הרבה יותר מהיר
מהמעבר הקודם כיוון שהבלוק כבר מוכן כולו
ולכן אין 2בסקטור השהיות בין קריאה
לקריאה. המידע זורם ברצף.
3המעבר בין סקטור גם כן מהיר 1ל-
מאותה סיבה. לאחר 1ההחלפה לסקטור
ניתן לראות ש EMPTY למעלה כיוון
שהטיפול ב- סקטורים היה מהיר יותר 2,3
מקצב הגעה של בלוק חדש.117
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-33שימוש ב-שימוש ב FIFOFIFO נפרדים. אחד לכל נפרדים. אחד לכל
סקטורים.סקטורים.
יתרונות: קל יותר למימושיתרונות: קל יותר למימוש
חסרונות: בזבוז מקום.חסרונות: בזבוז מקום. ניהול הסקטורים לקריאה יתנהל על ידי ה ניהול הסקטורים לקריאה יתנהל על ידי ה
FIFOFIFO::
יתרונות:קל יותר למימוש יתרונות:קל יותר למימוש
במהותו הוא מודול אדיש עם במהותו הוא מודול אדיש עם FIFOFIFOחסרונות: חסרונות: מסגרת מאוד ברורהמסגרת מאוד ברורה
118
Huffman codingHuffman coding
119
HUFFMAN_CODEHUFFMAN_CODE מטרה- מודול זה ייקח את המידע השמור מטרה- מודול זה ייקח את המידע השמור
של ה- של ה- SECTORSSECTORSבשלושת ה-בשלושת ה-SUPER_FIFOSUPER_FIFO 44 וימיר אותם באמצעות וימיר אותם באמצעות
טבלאות קידוד שונות. המידע היוצא ממודול זה טבלאות קידוד שונות. המידע היוצא ממודול זה מועבר למודול הבא בשרשרת מועבר למודול הבא בשרשרת SERIAL_TO_PARALLELSERIAL_TO_PARALLEL..
120
תיאור עבודת המודולתיאור עבודת המודול . המודול מתחיל את פעולתו כאשר נכנס סיגנל המציין . המודול מתחיל את פעולתו כאשר נכנס סיגנל המצייןYYהמודול מאותחל לקרוא תחילה מסקטור המודול מאותחל לקרוא תחילה מסקטור
איננו ריק. המידע של הקטגוריה והאפסים מגיע ובאמצעותם מתבצע חישוב של איננו ריק. המידע של הקטגוריה והאפסים מגיע ובאמצעותם מתבצע חישוב של YYשסקטור שסקטור הכתובת שלהכתובת של
(. הקידוד היוצא מכיל בתוכו את אורך הקידוד. (. הקידוד היוצא מכיל בתוכו את אורך הקידוד. Y,CB,CR,AC,DCY,CB,CR,AC,DCהקידוד המתאים )בהתאם להקידוד המתאים )בהתאם להקידודהקידוד
. . PIPE-LINEPIPE-LINE שלא עבר קידוד , אך הושהה על ידי שלא עבר קידוד , אך הושהה על ידי OFFSETOFFSETיוצא החוצה יחד עם ה יוצא החוצה יחד עם ה
..VALIDVALID מלווה בביט מלווה בביט SERIAL TO PARALLELSERIAL TO PARALLELהמידע היוצא מועבר למודול המידע היוצא מועבר למודול
עקרונות חשובים במימוש:עקרונות חשובים במימוש:-שימוש ב-שימוש בROMROM -יחיד כך שארבעת הטבלאות שמורות זה אחר זו. והתנועה בתוך ה- יחיד כך שארבעת הטבלאות שמורות זה אחר זו. והתנועה בתוך ה ROMROM
..OffsetsOffsetsהיא ביחס לארבע היא ביחס לארבע -בתחילת כל שורה ב-בתחילת כל שורה בROMROM -שמור אורך ה- שמור אורך ה DATADATA.של אותה שורה. של אותה שורה -המידע שנקרא מה- המידע שנקרא מה SUPER_FIFOSUPER_FIFO נקרא בצורה סקטוריאלית, כלומר קודם בלוק של נקרא בצורה סקטוריאלית, כלומר קודם בלוק של YY , ,
וחוזר חלילה. וחוזר חלילה. CrCr בלוק של בלוק של CbCbבלוק של, בלוק של,
121
HUFFMAN_CODE HUFFMAN_CODE diagramdiagram
PIPELINEX2
OFFSET [11]
CATEGORY[4]
OFFSET [11]
OFFSET_LENGTH[4]
Logic implementation: 10*zeros+category+offset
ZEROS[4]
ROM CONTAIN4 HUFFMANTABLES
The encode result [16]
Length of encode data[4]
ST_B,EN_B[2]
Calc Which table to use offset
RD_SECTOR[2]
122
תאור הסיגנליםתאור הסיגנלים נגמר המידע ברום
, מידע 1מגיע המידע ה-DC.
המידע מקודד באמצעות ROMטבלה שלוש ב-
המידע הבא 2מקודד מטבלה
ROMב-
תוצאות קידוד DCה-
. AC תוצאות קידוד ה-בשני השורות מתחת
ניתן לראות את ההפרדה לקידוד
ואורכו.
VALID_OUTבשני
הסיגנלים הללו יש את
OFFSETה-ואת
אורכו-נלקח כפונקציה של
123הקטגוריה
אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-רומים נפרדים. אחד לכל טבלה. רומים נפרדים. אחד לכל טבלה.44שימוש ב-שימוש ב
יתרונות: אין.יתרונות: אין.
חסרונות: בזבוז מקום.חסרונות: בזבוז מקום. ניהול הסקטורים לקריאה יתנהל על ידי ה ניהול הסקטורים לקריאה יתנהל על ידי ה
FIFOFIFO::
יתרונות:קל יותר למימוש יתרונות:קל יותר למימוש
FIFOFIFOחסרונות: מודול זה מתפקד כקליינט של ה חסרונות: מודול זה מתפקד כקליינט של ה
ומימושו בתצורה זו יותר הגיוני.ומימושו בתצורה זו יותר הגיוני.
124
Bits collectionBits collection
125
SERIAL2PARALLELSERIAL2PARALLEL מטרה: מודול זה ייקח את המידע היוצא ממודול מטרה: מודול זה ייקח את המידע היוצא ממודול
ביט ביט 22 - מידע המגיע בגודל הנע מ- - מידע המגיע בגודל הנע מ- HUFFMAN_CODEHUFFMAN_CODEה-ה- ביט. ביט. 2626ועד ועד
ביט ביט 1616כאשר יש כאשר יש מידע זה מולבש על רגיסטר הזזה.המידע יוצא מידע זה מולבש על רגיסטר הזזה.המידע יוצא שעברו סינון מהבס המכסימלי דרכו הגיעו. שעברו סינון מהבס המכסימלי דרכו הגיעו.
מודול זה יספור את מספר הבלוקים שעברו דרכו וירים דגל ברגע מודול זה יספור את מספר הבלוקים שעברו דרכו וירים דגל ברגע שנגמרה העבודה. רגל זו תשלח למודולים בהמשך וחשובה שנגמרה העבודה. רגל זו תשלח למודולים בהמשך וחשובה
מאוד לסגירתה הסופית של התמונה. מאוד לסגירתה הסופית של התמונה.
126
SERIAL2PARALLEL SERIAL2PARALLEL diagram 1diagram 1
קידוד הופמן נכנס למודול
אורך הקידוד נכנס למודול
OFFSETאורך נכנס למודול OFFSET
5 0000 0000 0001 1001
00 0111 1011 7
1100 1000 0000 0000 0000 0111 1011 0000 0000
בין הבסים ORביצוע משותף אורך הקודמים
1100 1111 1010 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 1001
המקום שממנו ניתן למקם מידע חדש
0000 0000 0000 0000 0000 1100 1111 1010 1001
ולאחר כניסת המידע החדש 4ניתן לראות בדיאגראמה שברגיסטר נמצא כבר מידע באורך מלאים. MSB ביטים 16. הוצאת מידע החוצה מתבצעת רק שה 15מגיע אורך המידע ל-
רגיסטר הזזה המחזיק את כל המידע שעדיין לא יצא החוצה
המקום שממנו ניתן למקם מידע חדש
127
SERIAL2PARALLEL SERIAL2PARALLEL diagram 2diagram 2
קידוד הופמן נכנס למודול
אורך הקידוד נכנס למודול
OFFSETאורך נכנס למודול OFFSET
5 0000 0000 0001 1001
00 0111 1011 7
1100 1000 0000 0000 0000 0111 1011 0000 0000
בין הבסים ORביצוע משותף אורך הקודמים
1100 1111 1010 0000 0000
רגיסטר הזזה המחזיק את כל המידע 0000 0000 0000 0000 0000 1010 1111 1100 1001שעדיין לא יצא החוצה
1100 1111 1011 1001
JPGשני הבייטים שיוצאים החוצה מוכנים לכתיבה לקובץ
1001 1100 1111 1011 1001 1111 0100 0000 0000
DATA_VALID ביטים. בסייקל הבא מידע זה ייקרא החוצה, כיוון שכבר בנקודת זמן זו עולה 16רגיסטר הזזה מלא ביותר מ-החוצה.
128
SERIAL2PARALLEL SERIAL2PARALLEL diagram 3diagram 3
קידוד הופמן נכנס למודול
אורך הקידוד נכנס למודול
OFFSETאורך נכנס למודול OFFSET
2 0000 0000 0000 0001
00 0000 0001 1
0000 0000 0000 0000 0100
0010 0000 0000 0000 0000
בין הבסים ORביצוע משותף אורך הקודמים
0000 0000 0001 1000 0000 0000 0000 0000 0000
1001 1100 1111 1011 1001 1111 0100 0000 0000
1001 1111 0100 0000 0000 0000 0000 0000 0000
0110 0000 0000 0000 0000 0000
1001 1111 0101 1000 0000 0000 0000 0000 0000
בס זה מחזיק את המידע החדש שצריך להיכתב עם הזזה ימינה
בס זה מחזיק את המידע הישן שצריך להישאר ברגיסטר הזזה אך הוא מוזז שמאלה כיוון שהוא המידע העדכני ביותר
בין הבסים ORביצוע רגיסטר ההזזה לפני עדכון המידע בתוכו- המידע בשחור יכול הקודמים
להידרס
1001 1111 0101 1000 0000 0000 0000 0000 0000
רגיסטר ההזזה לאחר העדכון 129
פוינטר המציין היכן ניתן להניח מידע
נכנס מידע למודול קידוד הופמן ואורכו
OFFSET ואורכו
OFFSET .וקידוד לאחר עריכה
OFFSETאורך וקידוד
רגיסטר זה מתמלא במידע שנגזר מהבסים
בהתאם לגודלם המדויק
תיאור של מידע נכנס- ותהליך עיבודו
130
פוינטר המציין היכן ניתן להניח מידע
נכנס מידע למודול קידוד הופמן ואורכו
OFFSET ואורכו
פרמטר המחזיק את המיקום ממנו ניתן להעביר מידע החוצה
תיאור של מידע נכנס- ותהליך עיבודו
וקידוד לאחר עריכה. OFFSET וקידודOFFSETאורך
מידע החוצה מוכן
מידע שאינו נכתב החוצה והופך להיות מידע הנכתב החוצה לאחר הוצאת המידע MSBהמידע ב-
הנוכחי
המידע החדש שנכנס צריך להיכתב לאחר שארית המידע שנותרה לאחר הכתיבה
החוצה
131
:תרחיש קיצוני: תרחיש קיצוני
זהו קידוד מאוד נדיר.זהו קידוד מאוד נדיר.
אפסים, קטגוריה אפסים, קטגוריה 00במידה ומגיע עבור בלוק כלשהו רצף של המידע הנ"ל – במידה ומגיע עבור בלוק כלשהו רצף של המידע הנ"ל – 1010
כאשר הוא מסוגל לנקות כאשר הוא מסוגל לנקות 2626. נכנס למודול זה מידע באורך של . נכנס למודול זה מידע באורך של 1616ואורך קידוד ואורך קידוד כל כל1616
סיקל. במצב זה היה עלול להיווצר מצב של אגירה. סיקל. במצב זה היה עלול להיווצר מצב של אגירה.
אך גם תרחיש קיצוני זה קיבל מענה. אך גם תרחיש קיצוני זה קיבל מענה.
למודול מוגדר קו אדום שברגע שיש מידע ששוכב מימין אליו הוא מרים למודול מוגדר קו אדום שברגע שיש מידע ששוכב מימין אליו הוא מרים HALTHALT
למידע הנכנס, מרוקן את המידע שנאגר עליו.למידע הנכנס, מרוקן את המידע שנאגר עליו.
ומאפשר הזרמה מחודשת של המידע.ומאפשר הזרמה מחודשת של המידע.
132
ספירת הבלוקיםספירת הבלוקים
סיום תמונהסיום תמונה
ספירת בלוקים שהסתיימו
מידע אחרון של התמונה הנוכחית
Data valid בייט יצא 1 נמתח עוד סייקל על מנת ששארית המידע שנותרה- בגודל 133החוצה
Writing the jpeg Writing the jpeg filefile
134
FLASH_WRITERFLASH_WRITER:מטרות:מטרות
..FLASHFLASH ל- ל-JPGJPG. מודול זה יכתוב את התמונה בפורמט . מודול זה יכתוב את התמונה בפורמט 11
.מודול זה יכניס לקובץ את טבלת הקוונטיזציה באמצעותה בוצע הקידוד..מודול זה יכניס לקובץ את טבלת הקוונטיזציה באמצעותה בוצע הקידוד.22
.מודול זה ייקרא את הפרמטרים המאפיינים את התמונה הנתונה.מודול זה ייקרא את הפרמטרים המאפיינים את התמונה הנתונה33
ויישלו אותם בפורמט. ויישלו אותם בפורמט.
SERTIAL TO PARALLELSERTIAL TO PARALLEL.מודול זה ייקח את המידע שהוצמד ב-.מודול זה ייקח את המידע שהוצמד ב-44
""0000" המחייב תוספת "" המחייב תוספת "FFFFוישפוך אותו לקובץ תוך כדי בדיקת בייט "וישפוך אותו לקובץ תוך כדי בדיקת בייט "
אחריו. אחריו.
135
תיאור עבודת המודולתיאור עבודת המודול . מודול זה בתחילת עבודתו, עובד מול השעון של . מודול זה בתחילת עבודתו, עובד מול השעון של IMAGERIMAGER של ה- של ה- SHOOTSHOOTהמודול מאזין לרגל המודול מאזין לרגל
ה –ה –
IMAGERIMAGER השעון האיטי של המערכת. קורא את שם הקובץ המיועד, ואת גודל התמונה אותה , השעון האיטי של המערכת. קורא את שם הקובץ המיועד, ואת גודל התמונה אותה ,המערכתהמערכת
הולכת לקודד.הולכת לקודד.
INFOINFO עם השעון המהיר של המערכת. כתיבת ה- עם השעון המהיר של המערכת. כתיבת ה- INFOINFOלאחר מכן מתחילה כתיבה של ה-לאחר מכן מתחילה כתיבה של ה-מצריכה מצריכה
. .JPGJPGהכרות עמוקה עם מבנה ה-הכרות עמוקה עם מבנה ה-
לאחר הגעת המידע האחרון מתבצעת נעילה של הקובץ. לאחר הגעת המידע האחרון מתבצעת נעילה של הקובץ.
עקרונות חשובים במימוש:עקרונות חשובים במימוש:-שימוש ב-שימוש בROMROM -יחיד המכיל את כל ה- יחיד המכיל את כל ה INFOINFO בכל הקומבינציות שייתכנו, בהתאם לטבלת בכל הקומבינציות שייתכנו, בהתאם לטבלת
הקוונטיזציה הרלוונטית.הקוונטיזציה הרלוונטית.": ברגע שמגיע בייט שעבר קידוד :"ברגע שמגיע בייט שעבר קידודFFFF" אחריו." אחריו.0000" מודול זה ידאג להכניס "" מודול זה ידאג להכניס " מודול זה ייתן מודול זה ייתןHALTHALT -ל- ל FLASHFLASH .כל זמן שאין לו מידע מוכן לכתיבה לקובץ. כל זמן שאין לו מידע מוכן לכתיבה לקובץ
136
מבט כולל – שלבי עבודהמבט כולל – שלבי עבודה
INFOכתיבת FLASH_HALT כתיבת הבלוקים המקודדים
FFD9סגירת קובץ -
מידע אחרון –ניתן לסגור תמונה
137
תחילת עבודה- האזנה תחילת עבודה- האזנה IMAGERIMAGERל-ל-
מימדי התמונה
IMAGERשעון שם הקובץ
FLASHשעון 138
FLASHFLASHיצירת קובץ ב-יצירת קובץ ב-
Halt -ל FLASHיורד למטה FLASHשם התמונה נכתב ל-
139
INFOINFOכתיבת כתיבת
שם התמונה סיים את דרכו ל -FLASH . המידע ROMמתבצעות קריאות ל-
יוצא בגודל בייט כל פעם
והמידע הראשון נכתב לקובץ.0 יורדת ל-HALT בייטים הרגל של 4כאשר יש
VALIDמיקום הבייטים שהם בבס
140
SERIAL TO PARALLELSERIAL TO PARALLELמידע מקודד מגיע מ-מידע מקודד מגיע מ-
SERIAL TOמידע נכנס מה- PARALLEL
VALID BIT -IN
VALID BIT -
OUT
D_OUTלפלאש
שני בייטים מה LSB נקראים
מהבאס ונכתבים
בפלאש
פה לעומת זאת נכתבים שלושה
בייטים כיוון FFשהגיע מידע
.למודול מוגדר
00להכניס אחריהם 141
SERIAL TO PARALLELSERIAL TO PARALLELמידע אחרון מגיע מ-מידע אחרון מגיע מ-
EOF מגיע לפלאש ואיתו
INFO של סגירת JPGקובץ
“FFD9- ”
המידע המקודד האחרון באורך
בייט אחד
142
FLASHFLASH מה- מה- HALTHALTטיפול ב-טיפול ב-
ברגע שמגיע ברגע שמגיעHALTHALT -מה- מה FLASHFLASH כל כל ממשיכה ממשיכה SUPER FIFOSUPER FIFOהמערכת עד ל- המערכת עד ל-
נכנס למצב של נכנס למצב של FIFOFIFOלעבוד כרגיל, וה-לעבוד כרגיל, וה-אגירת מידע והקפאת יציאת המידע.אגירת מידע והקפאת יציאת המידע.
בשקפים הבאים ניתן להתרשם מהמערכת בשקפים הבאים ניתן להתרשם מהמערכתHALTHALTבשגרה ומהמערכת במצב של בשגרה ומהמערכת במצב של
143
HALTהמערכת ללא
HALTהמערכת עם
FIFO כרגיל
שאר המערכת בהשהיה
144
HALTהמערכת ללא
INFO בשלב כתיבת ה- HALTהמערכת עם
145
HALTHALT בזמן בזמן FIFOFIFOאגירה ב-אגירה ב-
BUFFERSניתן להתבונן בשלוש הללו המציינים את כמות המידע בכל
זמן בכל סקטור
HALT FLASHמה-
1עולה ל-
מתחילה להתבצ
ע אגירהHALT
FLASHמה-0יורד ל-
מידע נשאב
1מסקטור ו
BUFFER 0יורד ל-146
DebuggingDebugging
147
Debugging: us vs. Debugging: us vs. cristi.ccristi.c
לצורך דיבוג השחלנו בקוד של קריסטי בשפת לצורך דיבוג השחלנו בקוד של קריסטי בשפתסי הדפסות לתוך קובץ טקסט במקומות סי הדפסות לתוך קובץ טקסט במקומות
דבר זהה עשינו דבר זהה עשינו ..ה"אסטרטגיים" שעניינו אותנוה"אסטרטגיים" שעניינו אותנובפרוייקט שלנו ע"י חיבור "מודול דיבאג" בפרוייקט שלנו ע"י חיבור "מודול דיבאג"
למוצאי המודולים המעניינים המדפיס את למוצאי המודולים המעניינים המדפיס את הביטים לתוך קובץ. דבר זה אפשר לנו להשוות הביטים לתוך קובץ. דבר זה אפשר לנו להשוות את הסיגנלים שלנו לאלו של קריסטי ביט אחר את הסיגנלים שלנו לאלו של קריסטי ביט אחר
ביט, מודול אחר מודול...ביט, מודול אחר מודול...
148
Debugging: us vs. Debugging: us vs. cristi.ccristi.c
הרחבת מתודות הכתיבה לתוך קובץ .JPEGה-
.JPEGהביטים שנכתבים לקובץ ה- הביטים שנכתבים לקובץ טקסט.
.RGBהדפסת
149
Debugging: us vs. Debugging: us vs. cristi.ccristi.c
.DCTהדפסת הכניסה ל-
הדפסת מוצא הקוונטיזציהמזוגזג.
הדפסת.zeroes, category, offset
150
Debugging: us vs. Debugging: us vs. cristi.ccristi.cקובץ הפלטים של קריסטי
נראה באופן הבא:
הדרים:
סוף הדרים:תחילת הקידוד:הבלוק הראשון:
RGB, RGB.…:
151
Debugging: us vs. Debugging: us vs. cristi.ccristi.c אנחנוההשוואה: קריסטי
DCT_in
zigzagafterquantization
RLE & DPCM
152
SniffingSniffing מודול המתחבר במקביל לכל אחד מודול המתחבר במקביל לכל אחד
מקווי המידע בין המודולים מקווי המידע בין המודולים במערכת ומבצע כתיבה של כל במערכת ומבצע כתיבה של כל
בלוק לקובץ נפרד.בלוק לקובץ נפרד.
153
UtilsUtilsלהלן כמה כלי עזר שבנינו:
RLE & DPCM לפלוטים של parsingמבצע .num of zeroes, category and offsetלקבלת
.Excelמומש ב-
.hex2bin ו- bin2hexממיר .Visual Basicמומש ב-
154
Utils contUtils cont..מזגזג וקטור עומד.
64מציג וקטור עומד של .8X8בצורת מטריצה של
"מיישר" וקטור עומד מזוגזג.
עם נקודה עשרונית.YCbCr ל- RGBמבצע את הפעולה המתמטית להמרת
באמצעות כפל מטריצות עם נקודה עשרונית.DCTמבצע את פעולת ה-
vecדוגמא: zigzag)vec(
v2matrix)zigzag)vec((
155
דגשים ועמידה ביעדיםדגשים ועמידה ביעדים
לפני כחודשיים(. )לפני כחודשיים(.19.4.0919.4.09הגשת הפרויקט כולל מצגת בתאריך היעד המקורי הגשת הפרויקט כולל מצגת בתאריך היעד המקורי( 1024תמיכה בגודל תמונה של עד תמיכה בגודל תמונה של עדx10241024x1024 מימוש מימושhalthalt חוזר מה חוזר מה flashflash מחזורי שעון. מחזורי שעון.8080 ל ל תמיכה בשלושה תמיכה בשלושהQuality FactorQuality Factor...תמיכה בהמרה של צילום תמונות ברצף.תמיכה בהמרה של צילום תמונות ברצף הדפסת תאריך על התמונה –כלל תמיכה בהדפסת אותיות בפורמט הדפסת תאריך על התמונה –כלל תמיכה בהדפסת אותיות בפורמטASCIIASCII , ,
אפשרות למתיחה וכיווץ אופקי ואנכי ושינויי מיקום התאריך בתמונה.אפשרות למתיחה וכיווץ אופקי ואנכי ושינויי מיקום התאריך בתמונה..שיקולי תכנון של צמצום לוגיקה וזיכרון לאורך כל הפרויקט.שיקולי תכנון של צמצום לוגיקה וזיכרון לאורך כל הפרויקט איחוד זיכרונות איחוד זיכרונותROMROM ו ו RAMRAM.עבור שלושת המסלולים. עבור שלושת המסלולים
.בניית מצגת מושקעת המכילה תיעוד מפורט של כל הפרויקט.בניית מצגת מושקעת המכילה תיעוד מפורט של כל הפרויקט מימוש של מימוש שלFIFOFIFO.משולש על זיכרון אחד. משולש על זיכרון אחד בנית כל הטבלאות ע"י סקריפטים אוטומטיים שאפשרו המרה מושלמת של בנית כל הטבלאות ע"י סקריפטים אוטומטיים שאפשרו המרה מושלמת של
התמונה ללא שגיאות.התמונה ללא שגיאות..הפתעה בהמשך.הפתעה בהמשך
156
.תודה לקריסטי על הקוד שעזר מאוד בפיתוח המודול.תודה לקריסטי על הקוד שעזר מאוד בפיתוח המודול
תודה ענקית למקס ניגרי על ההרצאות תודה ענקית למקס ניגרי על ההרצאותהמרתקות, על הידע והמקצועיות הרבה המרתקות, על הידע והמקצועיות הרבה
שרכשנו בזכותו.שרכשנו בזכותו.
157
אלון כהן, רועי ביטון, יבגני )יוני( חסין משה שקלר, אריאלה הובר, שולמית
עג'מי
ENDEND
158