Top Banner
Jpeg encoder Jpeg encoder Hardware implementation Hardware implementation with Verilog with Verilog Designed by Designed by Alon Cohen Alon Cohen ([email protected]) ([email protected]) Roi Biton, Yevgeny (Yoni) Roi Biton, Yevgeny (Yoni) Khasin Khasin Ariela Huber, Shulamyt Ajamy, Ariela Huber, Shulamyt Ajamy, Moshe Szklar Moshe Szklar Directed by Directed by Mr. Mr. Max Nigri Max Nigri The Hebrew The Hebrew University University of Jerusalem of Jerusalem 1
158
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

Page 2: Jpeg encoder

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

Page 3: Jpeg encoder

Top diagramTop diagram

JPEGJPEGEncoderEncoder

DateDate

shootshoot

RGBRGB

3

Page 4: Jpeg encoder

imagerimager

imagerimagerמודול המדמה הזרמת מידע מ מודול המדמה הזרמת מידע מ Data FormatData Format : : 8bit RGB8bit RGBסינכרוני מקבילי סינכרוני מקבילי רגל כניסה רגל כניסהshootshoot.טריגר לשליחת תמונה חדשה. – טריגר לשליחת תמונה חדשה – לפני העברת כל תמונה נשלח לפני העברת כל תמונה נשלחheaderheader המעביר את המעביר את

שם הקובץ וממדי התמונה.שם הקובץ וממדי התמונה.

4

Page 5: Jpeg encoder

playerplayer.מיצר לחיצת כפתור לצילום תמונה.מיצר לחיצת כפתור לצילום תמונה מיצר תאריך בקוד מיצר תאריך בקודASCIIASCII.. : קובע את איכות התמונה : קובע את איכות התמונהquality factorquality factor

00 – – lowlow11 - -midmid22 - - highhigh

5

Page 6: Jpeg encoder

flashflash

מודול המדמה כרטיס זיכרון.מודול המדמה כרטיס זיכרון. 32תקשורת מקבילית סינכרונית תקשורת מקבילית סינכרוניתbit32bit.. 8,16,24,328,16,24,32אפשרות לכתיבה של אפשרות לכתיבה של BitBit בכל בכל

עלית שעון.עלית שעון. העברת שם הקובץ מתבצעת לפני העברת העברת שם הקובץ מתבצעת לפני העברת

המידע.המידע.

6

Page 7: Jpeg encoder

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

Page 8: Jpeg encoder

EncoderEncoderBlock diagram & Block diagram &

conceptconcept

8

Page 9: Jpeg encoder

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

Page 10: Jpeg encoder

תקשורת בין מודוליםתקשורת בין מודולים

תקן אחיד להעברת המידע בין המודולים השוניםתקן אחיד להעברת המידע בין המודולים השוניםspen_in/spen_outspen_in/spen_out' כל עוד מועבר בלוק\תמונה.' כל עוד מועבר בלוק\תמונה.11 –נמצא ב ' –נמצא ב ' d_in_valid/d_out_validd_in_valid/d_out_valid–'1–'1 מציין מידע תקף עבור עלית השעון ' מציין מידע תקף עבור עלית השעון '

הנוכחית.הנוכחית.rstrst.אתחול המודול. –אתחול המודול– mclkmclk.שעון עבודה של המודול. –שעון עבודה של המודול–

תחילת בלוק מידע תקףסוף בלוק

10

Page 11: Jpeg encoder

צילום תמונות ברצףצילום תמונות ברצף

Shoot לצילום תמונה חדשה

Busy מציין כי ה encoder באמצע

עבודה

הבלוקים בכניסת ה DCT

סיום קובץ

shootלא נלחץ אין תמונה מועברת

pxq דלוק בזמן העברת המידע

11

Page 12: Jpeg encoder

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

Page 13: Jpeg encoder

Block diagram – data Block diagram – data flowflow

Date stamperDate stamper מבצע הדפסה מבצע הדפסה של תאריך לתוך התמונה תוך כדי של תאריך לתוך התמונה תוך כדי

זרימת המידע.זרימת המידע. התאריך מתקבל מחוץ למודול התאריך מתקבל מחוץ למודול

ע"י קו מקבילי ע"י קו מקבילי ASCIIASCIIבפורמט בפורמט ..64bit64bitשל של

נתן ע"י פרמטרים לבצע מתיחה נתן ע"י פרמטרים לבצע מתיחהוכיווץ אופקי ורוחבי לתאריך.וכיווץ אופקי ורוחבי לתאריך.

נתן להדפיס את כל ה נתן להדפיס את כל הA,B,CA,B,C

13

Page 14: Jpeg encoder

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

Page 15: Jpeg encoder

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

Page 16: Jpeg encoder

Block diagram – data Block diagram – data flowflow

ביצוע ביצועDCTDCT במקביל על במקביל על Y,Cb,CrY,Cb,Cr.. ביצוע ע"י הכפלה במטריצת מקדמים מימין ביצוע ע"י הכפלה במטריצת מקדמים מימין

חיצוני חיצוני ROMROMומשמאל השמורה בזיכרון ומשמאל השמורה בזיכרון לשלושת המודולים.לשלושת המודולים.

BlockBlock

16

Page 17: Jpeg encoder

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

Page 18: Jpeg encoder

Quality factorQuality factor פעולת הקוונטיזציה היא פעולת הקוונטיזציה היא

הכפלה בטבלת הקוונטיזציה הכפלה בטבלת הקוונטיזציה ועיגול התוצאה.ועיגול התוצאה.

להלן השוואה בין שלושה להלן השוואה בין שלושהאיכויות שונות: איכויות שונות:

Medium)8k(Value/)0.5*table(

Low)5.45k(value/table

High)11.5k(Value/)0.25*table( Bmp)54k(

18

Page 19: Jpeg encoder

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

Page 20: Jpeg encoder

Block diagram – data Block diagram – data flowflow

FIFO WriterFIFO Writer מקבל את שלושת ערוצי מקבל את שלושת ערוצי

המידע ומבצע ריבוב המידע ומבצע ריבוב triple tripleשלהם וכתיבה ל שלהם וכתיבה ל

fifofifo..Super FIFOSuper FIFO

מכיל שלושה סקטורים – מכיל שלושה סקטורים – של זיכרון הממומשים על של זיכרון הממומשים על

אחד. אחד.RAMRAMגבי גבי כאשר מגיע בלוק שלם כאשר מגיע בלוק שלם

הבלוקים יוצאים במוצא הבלוקים יוצאים במוצא אחד אחרי השני אחד אחרי השני בהתאם לבקשת בהתאם לבקשת

קריאה.קריאה. סימון תחילה וסוף בלוק סימון תחילה וסוף בלוק

מתבצעים ע"י שני מתבצעים ע"י שני ביטים ראשונים שהם ביטים ראשונים שהם

חלק מרגיסטרי המידע.חלק מרגיסטרי המידע. ניתן לראות שכמות ניתן לראות שכמות

המידע שונה בכל אחד המידע שונה בכל אחד מהמסלוליםמהמסלולים

20

Page 21: Jpeg encoder

Block diagram – data Block diagram – data flowflow

קידוד הופמן של המידע ע"י טבלאות השמורות ב קידוד הופמן של המידע ע"י טבלאות השמורות בROMROM והוצאה של המידע המקודד עם והוצאה של המידע המקודד עם ביטים לציון אורך המידע הרלוונטי.ביטים לציון אורך המידע הרלוונטי.

Serial to paralelSerial to paralel אוסף בצורה טורית את הביטים באורכים השונים ומוציא מידע – אוסף בצורה טורית את הביטים באורכים השונים ומוציא מידע – flashflash לכתיבה ל לכתיבה ל 32bit32bitבאורך אחיד של באורך אחיד של

21

Page 22: Jpeg encoder

Block diagram – data Block diagram – data flowflow

Flash writerFlash writer יצור וכתיבה של שם הקובץ ו – יצור וכתיבה של שם הקובץ ו – headerheader ל ל jpeg filejpeg file.. כתיבת המידע המגיע מה כתיבת המידע המגיע מהserial to paralelserial to paralel.למקום המתאים בקובץ. למקום המתאים בקובץ

22

Page 23: Jpeg encoder

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

Page 24: Jpeg encoder

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

Page 25: Jpeg encoder

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

Page 26: Jpeg encoder

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

Page 27: Jpeg encoder

ROM & RAM summaryROM & RAM summary

RAM Blocks = 126KbyteRAM Blocks = 126Kbyte! ! All otherAll other ROM = 3.8kbROM = 3.8kbRAM = 0.6kbRAM = 0.6kb

27

Page 28: Jpeg encoder

Modules Modules implementationimplementation

28

Page 29: Jpeg encoder

Advanced Advanced FeatureFeature

Date StamperDate Stamperהדבקת תאריך לתמונה בזמן מעבר המידע: אפשרות להדביק כל

font השמור ב ROM מיועד. ניתן לבצע מתיחה אורכית ורוחבית ולקבוע את מיקום הדבקת התאריך ע"י שינויי פרמטרים מובנים.

BONUS

BONUS

29

Page 30: Jpeg encoder

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

Page 31: Jpeg encoder

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

Page 32: Jpeg encoder

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

Page 33: Jpeg encoder

BONUS:BONUS: date_stamper date_stamper contcont..

:כמה מימדים נוספים:כמה מימדים נוספים

CUBE_HEIGHT

CUBE_WIDTH

CUBE_HEIGHT

CUBE_WIDTH

CUBE_HEIGHT

CUBE_WIDTH

33

Page 34: Jpeg encoder

BONUS:BONUS: date_stamper date_stamper contcont..

.work_flag = 1המודול פעיל רק באזור בו – מחוץ לאזור זה, הפיקסלים מועברים ישירות.

work_flag = 0שאר התמונה –

work_flag = 1אזור הדבקת התאריך –

34

Page 35: Jpeg encoder

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

Page 36: Jpeg encoder

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

Page 37: Jpeg encoder

BONUS:BONUS: date_stamper date_stamper contcont..

DebuggingDebugging הגדרנו מערך דו מימדי המדמה הגדרנו מערך דו מימדי המדמה debuggingdebuggingהמודל פותח באופן עצמאי, ולכן לשם – המודל פותח באופן עצמאי, ולכן לשם –

תמונה.תמונה.

' מסמל שלא התבצעה הדבקה בפיקסל הנוכחי.' מסמל שלא התבצעה הדבקה בפיקסל הנוכחי.00''

' מסמל שבוצעה הדבקה.' מסמל שבוצעה הדבקה.11''

עבור הדוגמא לעיל:עבור הדוגמא לעיל:

37דוגמאות נוספות:דוגמאות נוספות:

Page 38: Jpeg encoder

BONUS:BONUS: date_stamper date_stamper contcont..

38

Page 39: Jpeg encoder

BONUS:BONUS: date_stamper date_stamper contcont.. ובתמונה האמיתית:ובתמונה האמיתית:

39

Page 40: Jpeg encoder

Accessories Accessories modulesmodules

Int to floatInt to float

JustifyJustify

multipliermultiplier

40

Page 41: Jpeg encoder

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

Page 42: Jpeg encoder

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

Page 43: Jpeg encoder

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

Page 44: Jpeg encoder

חלק ראשון –קליטת המידע ויצירת בלוקים

44

Page 45: Jpeg encoder

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

Page 46: Jpeg encoder

46

Page 47: Jpeg encoder

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

Page 48: Jpeg encoder

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

Page 49: Jpeg encoder

RGBtoYCbCr contRGBtoYCbCr cont..

start

calculations

dout_valid, when Y,Cb and Crcalculated and ready.

49

Page 50: Jpeg encoder

RGBtoYCbCr contRGBtoYCbCr cont..

שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה שימוש ב שימוש בmultipliermultiplier.יחיד. יחיד מטריצת הקבועים מוחזקת כמערך דו מימדי של מטריצת הקבועים מוחזקת כמערך דו מימדי שלwireswires-11 ו- ו-00. )מקוצרים ל-. )מקוצרים ל

בהתאמה(.בהתאמה(. שני רגיסטרים שני רגיסטריםi,ji,j.רצים על הכפלת המטריצה. רצים על הכפלת המטריצה המוקסים בכניסה ובמוצא מנתבים את המידע בהתאם ל המוקסים בכניסה ובמוצא מנתבים את המידע בהתאם לi,ji,j.. רגיסטר זמני שומר את הערך הנצבר של כפל השורה בוקטור העמודה ובסוף השורה רגיסטר זמני שומר את הערך הנצבר של כפל השורה בוקטור העמודה ובסוף השורה

מועבר למוצא המתאים.מועבר למוצא המתאים.

אלטרנטיבות שנבחנואלטרנטיבות שנבחנו -שמירת ערכי המטריצה ב- שמירת ערכי המטריצה בROMROM .מחוץ למודול. מחוץ למודול

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

הקל על ביצוע פעולת הכפל.הקל על ביצוע פעולת הכפל.

50

Page 51: Jpeg encoder

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

Page 52: Jpeg encoder

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

Page 53: Jpeg encoder

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

Page 54: Jpeg encoder

WrPixelsClient contWrPixelsClient cont

שיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה -הכתיבה אל ה- הכתיבה אל הram_blocksram_blocks מתבצעת בכל פעם שיש מתבצעת בכל פעם שיש validvalid -מ- מ RGBtoYCbCrRGBtoYCbCr.. – וכך הכתיבה מתבצעת "שורה אחר שורה". , וכך הכתיבה מתבצעת "שורה אחר שורה".11הכתובת לכתיבה עולה ב – הכתובת לכתיבה עולה ב , המודול מקבל בכניסה את אורך התמונה וכך ניתן לדעת מתי התמלאה "רצועה המודול מקבל בכניסה את אורך התמונה וכך ניתן לדעת מתי התמלאה "רצועה

שלמה".שלמה". עבור כל "רצועה" שהתמלאה נשלח הפולס עבור כל "רצועה" שהתמלאה נשלח הפולס""strip readystrip ready”” והכתובת ממנה התחילה והכתובת ממנה התחילה

על מנת שידע מתי ומהיכן להתחיל לקרוא. על מנת שידע מתי ומהיכן להתחיל לקרוא.DCTclientDCTclientה"רצועה" להתמלא, אל ה- ה"רצועה" להתמלא, אל ה- -המודול תמיד יקבל עדיפות מה- המודול תמיד יקבל עדיפות מהarb_strictarb_strict.על מנת לשמור על זרימת מידע תקינה. על מנת לשמור על זרימת מידע תקינה

אלטרנטיבות שנבחנואלטרנטיבות שנבחנו 88ספירת ספירת hdhd."במקום לקבל את רוחב התמונה, על מנת לזהות מילוי "רצועה". ,במקום לקבל את רוחב התמונה, על מנת לזהות מילוי "רצועה,

החיסרונות:החיסרונות: -חוסר סינכרון עקב ה- חוסר סינכרון עקב הpipelinepipeline-שנוצר בין ה- שנוצר בין ה imagerimager.לבין המודול. לבין המודול -ה- הhdhd.עולה בתחילת שורה ולא בסוף שורה וזה מסרבל את הלוגיקה. עולה בתחילת שורה ולא בסוף שורה וזה מסרבל את הלוגיקה

-שמירת הפיקסלים בסדר של "בלוק אחר בלוק" בתוך ה- שמירת הפיקסלים בסדר של "בלוק אחר בלוק" בתוך הRAMRAM ולא "שורה אחר ולא "שורה אחר שורה".שורה".

למעשה זהו אינו עניין עקרוני, ובסופו של דבר החלטנו שהמודול למעשה זהו אינו עניין עקרוני, ובסופו של דבר החלטנו שהמודולDCTclientDCTclient יהיה זה יהיה זה שיקרא "בלוק אחר בלוק".שיקרא "בלוק אחר בלוק". 54

Page 55: Jpeg encoder

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

Page 56: Jpeg encoder

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

Page 57: Jpeg encoder

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

Page 58: Jpeg encoder

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

Page 59: Jpeg encoder

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

Page 60: Jpeg encoder

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

Page 61: Jpeg encoder

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

Page 62: Jpeg encoder

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

..DCTDCTלצורך ביצוע ה- לצורך ביצוע ה- ביט. ביט.7272 פיקסלים, ובסה"כ פיקסלים, ובסה"כ 33 ביט כפול ביט כפול 2424רוחב כל תא הינו רוחב כל תא הינו רצועות" מלאות. "רצועות" מלאות.22מרחב הכתובות תוכנן כך שהזיכרון יוכל לאחסן בו זמנית עד מרחב הכתובות תוכנן כך שהזיכרון יוכל לאחסן בו זמנית עד"

פיקסלים, החישוב הינו: פיקסלים, החישוב הינו:10241024ובהנחה שרוחב התמונה המירבי הינו ובהנחה שרוחב התמונה המירבי הינו

1024 * 8 * 2 = 16K1024 * 8 * 2 = 16K =>=> 14 bit14 bit

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

פיקסליםבשורה

שורותברצועה

רצועות

62

Page 63: Jpeg encoder

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

Page 64: Jpeg encoder

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

Page 65: Jpeg encoder

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

Page 66: Jpeg encoder

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

Page 67: Jpeg encoder

חלק שני –עיבוד המידעחלק שני –עיבוד המידע

67

Page 68: Jpeg encoder

DCT AlgorithmDCT Algorithm

68

Page 69: Jpeg encoder

DCT AlgorithmDCT Algorithm

CC= =

DCT)Block( = C * Block * CDCT)Block( = C * Block * C’’

69

Page 70: Jpeg encoder

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

Page 71: Jpeg encoder

+ 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

Page 72: Jpeg encoder

תחילת הבלוק הנכנס:תחילת הבלוק הנכנס:

עולה spen_inה

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

נשים לב שהאיבר הראשון מקבל מחזור נוסף לצורך איתחול

SignalsSignals

::הוצאת איברים החוצההוצאת איברים החוצה

, עולה כל שמונה מחזורים יוצא איבר אחד החוצה )אחרי בעצם מכפלה של שורה כפול עמודה(.spen_outשמהרגע שה 72

Page 73: Jpeg encoder

עבודה מקבילית:עבודה מקבילית:

. לכולם סיגנלי b2v_DCT_Y , b2v_DCT_Cb , b2v_DCT_Cr עובדים במקביל : DCTשלושה ( ואותה מטריצת מקדמים. clk,rst,spen_in,d_in_validמערכת זהים )

73

Page 74: Jpeg encoder

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

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

:אלטרנטיבות שנבחנו. נפסל משיקולי חיסכון במקום, למרות ROMזיגזג – נבחנה האופציה להחליף את המודל ב•

שלטעמם של אחרים זה יותר אלגנטי. אינפוטים. נבחרה האופציה 64איתחול ערכים – נבחנה האופציה לאתחל את המטריצה •

למערך ולידציה, משיקולי שעון.

74

Page 75: Jpeg encoder

QuantizationQuantization

75

Page 76: Jpeg encoder

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

Page 77: Jpeg encoder

Data_in [23:0] Data_out

[10:0]

ROM Adress [5:0]ROMQuantization

Table

multiplying

Quantization

FloatToint

1/Quantization value [23:0]

77

Page 78: Jpeg encoder

ROMQuantization

Table

multiplying

Quantization

FloatToint

24’hfc00_08 = 252

24’h4000_fd = 1/16

6’h03 = 3

11’h010 = 16

78

Page 79: Jpeg encoder

Example of signalsExample of signals

Output with zeros because the quantization

Delaying of one cycle

79

Page 80: Jpeg encoder

QuantizationQuantizationשיקולי תכנון ועקרון פעולהשיקולי תכנון ועקרון פעולה יצירת מודול נפרד של יצירת מודול נפרד שלfloat_to_intfloat_to_int על מנת להתמקד בכל מקרי הקצה על מנת להתמקד בכל מקרי הקצה

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

((pipelinepipelineגבוה )גבוה )

אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-במקום המרה ל-במקום המרה לintint-המרה ישירה ל- המרה ישירה ל categorycategory -ו- ו offsetoffset כי זהו הפלט כי זהו הפלט

החשוב.החשוב.-יתרונות: האקספוננט של ה-יתרונות: האקספוננט של הfloatfloat-זהה ל- זהה ל categorycategory-ומקום ה-, ומקום ה ,offsetoffset ידוע ידוע

)צמוד לנקודה( .)צמוד לנקודה( . חסרונות: במודול הבא קיים גם מקדם חסרונות: במודול הבא קיים גם מקדםDCDC הדורש חיסור שאי אפשר לקיימו הדורש חיסור שאי אפשר לקיימו

..offsetoffset ו- ו-categorycategoryלאחר שהמספר מתחלק ל-לאחר שהמספר מתחלק ל-.חסרונות: בניתי קודם את המודול הבא, והשינוי היה דורש יותר עבודה.חסרונות: בניתי קודם את המודול הבא, והשינוי היה דורש יותר עבודה

80

Page 81: Jpeg encoder

RLC_DPCMRLC_DPCMמטרהמטרה

לכווץ את המידע הקיים.לכווץ את המידע הקיים.

הדרךהדרך

.I.I ערכי אפס אינם יוצאים כפלט אלא ערכי אפס אינם יוצאים כפלט אלאמתווספים לערכים שאינם אפס.מתווספים לערכים שאינם אפס.

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

81

Page 82: Jpeg encoder

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

Page 83: Jpeg encoder

הצגת הערכים מחדשהצגת הערכים מחדש

קטגוריהקטגוריה

83

Page 84: Jpeg encoder

הצגת הערכים מחדשהצגת הערכים מחדש

-ה-ה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

Page 85: Jpeg encoder

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

בבינאריבבינארירר

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

Page 86: Jpeg encoder

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

Page 87: Jpeg encoder

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

Page 88: Jpeg encoder

דוגמאות של דילול המידעדוגמאות של דילול המידע

A lot of Valid data became to not valid data thanks to the quantization that zero the data .

אפסים

מספר האפסים

88

Page 89: Jpeg encoder

דוגמה לדילול אפסיםדוגמה לדילול אפסים( בלבד ביציאה.0,0 וערך )DC ערכי אפס בכניסה יוצאים כערך 63

ערכים שאינם אפס המעורבים עם אפסים ובהמשך 5 ערכים מתוכם רק 63( בלבד0,0 ערכים וערך )5רק אפסים. יוצאים כ-

89

Page 90: Jpeg encoder

דוגמה לדילול אפסים באוסף של דוגמה לדילול אפסים באוסף של בלוקיםבלוקים

כניסהיציאה

90

Page 91: Jpeg encoder

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

Page 92: Jpeg encoder

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

Page 93: Jpeg encoder

דוגמה לשלושה בלוקים המעובדים דוגמה לשלושה בלוקים המעובדים במקבילבמקביל

in

out

Cb

Cr

Y

93

Page 94: Jpeg encoder

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

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

מודולים של מודולים של 33מחזורי שעון בדיוק כי קיימים מחזורי שעון בדיוק כי קיימים RLC_DPCMRLC_DPCM במקביל אך המודול הבא במקביל אך המודול הבא

אחריהם קורא כל פעם רק מאחד מהשלושה.אחריהם קורא כל פעם רק מאחד מהשלושה.

הכניסה והיציאה הכניסה והיציאה תזמוןתזמון

94

Page 95: Jpeg encoder

דוגמה לתזמון האותות בסוף דוגמה לתזמון האותות בסוף בלוקבלוק

בכניסה המידע cycleבתוקף ל-

אחד, אך ביציאה cycles 3ל-

Spen_in יורד ולאחר מחזורים יורד 3

spen_out

end of block מופיע לשלושה מחזורי

שעון

95

Page 96: Jpeg encoder

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

אפסים מופיע ערך אפסים מופיע ערך 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

Page 97: Jpeg encoder

DCDCהערך הערך

-הערך הראשון של הבלוק הוא ערך ה-הערך הראשון של הבלוק הוא ערך הDCDC..-ערך ה-ערך הDCDC הוא הממוצע שסביבו נעים הערכים הוא הממוצע שסביבו נעים הערכים

הבאים של הבלוק.הבאים של הבלוק.-קידוד ה-קידוד הDCDC נבנה על-פי ההנחה שאין הפרש נבנה על-פי ההנחה שאין הפרש

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

–– Out = DIFF = DCOut = DIFF = DCi iבין הערכים הנ"ל. בין הערכים הנ"ל. DCDCi-1i-1

-ערך ה-ערך הDCDC.נרשם בכל מקרה גם אם הוא אפס. נרשם בכל מקרה גם אם הוא אפס 97

Page 98: Jpeg encoder

מחדש מחדשDCDCהצגת ערך ה-הצגת ערך ה-

יש לשים לב יש לשים לבלמקרה קצה בו למקרה קצה בו

ההפרש בין ההפרש בין הערכים גדול מ-|הערכים גדול מ-|

|, לכן לערכי |, לכן לערכי 10241024 יש קטגוריה יש קטגוריה DCDCה-ה-

..1111נוספת, נוספת, -ערך ה-ערך הoffsetoffset

נבנה בצורה זהה נבנה בצורה זהה לשאר הערכים.לשאר הערכים.

98

Page 99: Jpeg encoder

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

Page 100: Jpeg encoder

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

הערך במוצא יהיה מקודד כרגיל ויחד איתו יעלו הערך במוצא יהיה מקודד כרגיל ויחד איתו יעלו ””d_out_validd_out_valid““לשלושה מחזורי שעון הדגלים לשלושה מחזורי שעון הדגלים

““eobeob””.. יירד מחזור שעון אחד אחריהם. יירד מחזור שעון אחד אחריהם.””spen_outspen_out““הדגל הדגל

.הערך האחרון הנכנס הוא אפס.הערך האחרון הנכנס הוא אפס (, (, 0,00,0הערך במוצא יהיה )הערך במוצא יהיה )

category = 0 & num_of_zeros =0category = 0 & num_of_zeros =0כלומר כלומר כדי להודיע על סיום הבלוק.כדי להודיע על סיום הבלוק.

סוף הבלוקסוף הבלוק

100

Page 101: Jpeg encoder

סוף הבלוק - דוגמאסוף הבלוק - דוגמאאפשרות א' המידע האחרון שונה מאפס

אפשרות ב' המידע האחרון הוא אפס

( 0,0המידע במוצא )101

Page 102: Jpeg encoder

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

Page 103: Jpeg encoder

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

)במספר חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון )במספר חיובי הביט הראשון שאינו אפס ובביט השלילי הביט הראשון שאינו אחד(שאינו אחד(

-מציאת ה-מציאת הoffsetoffset.ע"י הורדת הביט הנ"ל. ע"י הורדת הביט הנ"ל אלא אם המידע הוא( אלא אם המידע הוא שמירת מספר האפסים בכל קליטת ערך אפס( שמירת מספר האפסים בכל קליטת ערך אפסDCDC)) קריאת אות המוצא נעשית פעם בשלושה קריאת אות המוצא נעשית פעם בשלושהcyclescycles בלבד, לכן המידע במוצא בלבד, לכן המידע במוצא

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

,d_out_valid, d_out_valid)) השונים) השונים)flagsflags ה- ה-cyclescycles,, 33עוד מידע למבוא תוך עוד מידע למבוא תוך spen_out, eobspen_out, eob והמידע עצמו נשמרים לשלושה והמידע עצמו נשמרים לשלושה cyclescycles.בדיוק. בדיוק

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

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

שעון אחד בלבד.שעון אחד בלבד.

103

Page 104: Jpeg encoder

Huffman Huffman – – 33חלק חלק codecode

Triple Triple FIFOFIFO

FIFO writerFIFO writer

Huffman Huffman codecode

Serial to Serial to paralelparalel

Flash Flash writerwriter

104

Page 105: Jpeg encoder

Triple FIFOTriple FIFO FIFOFIFO נכתב לזיכרון נכתב לזיכרון Y, Cr, CbY, Cr, Cb המידע המגיע במקביל מ המידע המגיע במקביל מ •

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

המגיעים עד להוצאתם לקידוד הופמן.המגיעים עד להוצאתם לקידוד הופמן. הוא לאפשר אחסון זמני של המידע הוא לאפשר אחסון זמני של המידע FIFOFIFO תפקיד נוסף של ה תפקיד נוסף של ה •

..flashflashבמידה ונדרשת עצירה ע"י ה במידה ונדרשת עצירה ע"י ה

105

Page 106: Jpeg encoder

FIFO_WRITERFIFO_WRITER

-מטרה- מודול זה יקרא את המידע היוצא מה-מטרה- מודול זה יקרא את המידע היוצא מה RLCRLC -המקבילי ויעבירו לאחסון זמני ב- המקבילי ויעבירו לאחסון זמני ב

SUPER_FIFOSUPER_FIFO . .

106

Page 107: Jpeg encoder

תיאור עבודת המודולתיאור עבודת המודול

למודול זה. למודול זה. inputsinputs מתחברים כ- מתחברים כ- RLCRLCשלושת המודולים של ה-שלושת המודולים של ה- של שלושתם, כך שהוא של שלושתם, כך שהוא data_vlaiddata_vlaidמודול זה סורק את ה-מודול זה סורק את ה-

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

. . Y/Cb/CrY/Cb/Crשייך ל-שייך ל-

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

בלוק והשני מייצג סוף בלוק.בלוק והשני מייצג סוף בלוק.

107

Page 108: Jpeg encoder

תחילת-בלוקתחילת-בלוק

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

Page 109: Jpeg encoder

אמצע-בלוקאמצע-בלוק

ניתן לראות פה הדלקה של ניתן לראות פה הדלקה שלvalid_bitsvalid_bits -המייצגים מידע תקין ב- המייצגים מידע תקין ב Cb,CrCb,Cr . .

כעבור כעבורCYCCYC כאשר ה כאשר ה wr_sectorwr_sector מצביע על מצביע על CbCb נדלק נדלק wrwr כאשר כאשר תקין.תקין. CrCr הוא מוחזק גם למחזור הבא כיוון שגם ה-הוא מוחזק גם למחזור הבא כיוון שגם ה-

בנוסף בנוסףstart blockstart block .כבוי כיוון שאנו באמצע בלוק. כבוי כיוון שאנו באמצע בלוק

109

Page 110: Jpeg encoder

סוף-בלוקסוף-בלוק

בסוף הבלוק ניתן לראות הדלקה של בסוף הבלוק ניתן לראות הדלקה שלeobeob -והדלקה של ה- והדלקה של ה bitbit המסמן שזהו המסמן שזהו במידע האחרון בבלוק.במידע האחרון בבלוק.

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

110

Page 111: Jpeg encoder

SUPER FIFOSUPER FIFO

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

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

עצמאי FIFO כל סקטור מתפקד מעין כאשר לכל אחד מוגדר כתובת התחלה

וכתובת סיום. תאים מעבר 10לכל סקטור יש כ-

למינימום ההכרחי, דבר המאפשר סייקלים 80 באורך של HALTלהיערך ל-

. flashהמגיע מה -

111

Page 112: Jpeg encoder

FIFOFIFOגודל ה-גודל ה--הכתיבה והקריאה מהסקטור של ה-הכתיבה והקריאה מהסקטור של הYY מתבצעת במקביל לכן הוא לא מתבצעת במקביל לכן הוא לא

מתמלא לכן נסתפק בשני כתובות.מתמלא לכן נסתפק בשני כתובות. הקריאה מהסקטור של הקריאה מהסקטור שלCBCB,,CRCR מתחיל כאשר כל הבלוק נמצא כבר ב מתחיל כאשר כל הבלוק נמצא כבר ב

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

לכל לכל 1010 כתובות נוספות, כתובות נוספות, 3030 כתובות דרושות, הוספנו כ- כתובות דרושות, הוספנו כ-130130סה"כ סה"כ SECSEC . .. כל כתובת . כל כתובת HALTHALT נותן נותן FLASHFLASHעל מנת להתמודד עם מצב שבו העל מנת להתמודד עם מצב שבו ה. . 8080 סייקלים-סה"כ סייקלים-סה"כ 88אקסטרה נותנת מרווח אגירה של אקסטרה נותנת מרווח אגירה של

112

Page 113: Jpeg encoder

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

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

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

113

Page 114: Jpeg encoder

FIFO signals WRFIFO signals WR

המידע בכניסה נכתב בעליה של

WR

המידע צריך להיכתב 1לסקטור

המידע נכתב 8לכתובת

ניתן לראות מחזור אחריי את הקידום 9בכתובת ל-

114

Page 115: Jpeg encoder

–עקרון פעולה –עקרון פעולהFIFOFIFOקריאה מ-קריאה מ- המידע נקרא מה המידע נקרא מהFIFOFIFO :בצורה סקטוריאלית: בצורה סקטוריאלית

Y,CB,CRY,CB,CR.וחוזר חלילה. וחוזר חלילה -ה-הFIFOFIFO הוא מודול אדיש, כלומר השליטה הוא מודול אדיש, כלומר השליטה

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

והמודול שמתחבר והמודול שמתחבר 00 יורדת ל- יורדת ל-EMPTYEMPTYרגל רגל למידע היוצא יכול לקבל מידע.למידע היוצא יכול לקבל מידע.

גילוי נאות:הקריאה של מידע החוצה מתבצע גילוי נאות:הקריאה של מידע החוצה מתבצעבירידת שעון. בירידת שעון.

115

Page 116: Jpeg encoder

FIFO signals RDFIFO signals RD

רגל EMPTY למעלה- אין מידע

הסקטור הנוכחי ממנו

מבצעת קריאה-

שליטה מבחוץ

ניתן לראות אחריי שני

מחזורים את יוצא מה- המידעRAM ורגל

EMPTYלמטה

מתבצעת כתיבה

לסקטור ממנו קוראים

116

Page 117: Jpeg encoder

FIFO signals RD-swap FIFO signals RD-swap sectorssectors

המידע 1בסקטור

מסתיים ויש מעבר

2לסקטור הבא בתור.

3 ל-2המעבר בין סקטור הרבה יותר מהיר

מהמעבר הקודם כיוון שהבלוק כבר מוכן כולו

ולכן אין 2בסקטור השהיות בין קריאה

לקריאה. המידע זורם ברצף.

3המעבר בין סקטור גם כן מהיר 1ל-

מאותה סיבה. לאחר 1ההחלפה לסקטור

ניתן לראות ש EMPTY למעלה כיוון

שהטיפול ב- סקטורים היה מהיר יותר 2,3

מקצב הגעה של בלוק חדש.117

Page 118: Jpeg encoder

אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-33שימוש ב-שימוש ב FIFOFIFO נפרדים. אחד לכל נפרדים. אחד לכל

סקטורים.סקטורים.

יתרונות: קל יותר למימושיתרונות: קל יותר למימוש

חסרונות: בזבוז מקום.חסרונות: בזבוז מקום. ניהול הסקטורים לקריאה יתנהל על ידי ה ניהול הסקטורים לקריאה יתנהל על ידי ה

FIFOFIFO::

יתרונות:קל יותר למימוש יתרונות:קל יותר למימוש

במהותו הוא מודול אדיש עם במהותו הוא מודול אדיש עם FIFOFIFOחסרונות: חסרונות: מסגרת מאוד ברורהמסגרת מאוד ברורה

118

Page 119: Jpeg encoder

Huffman codingHuffman coding

119

Page 120: Jpeg encoder

HUFFMAN_CODEHUFFMAN_CODE מטרה- מודול זה ייקח את המידע השמור מטרה- מודול זה ייקח את המידע השמור

של ה- של ה- SECTORSSECTORSבשלושת ה-בשלושת ה-SUPER_FIFOSUPER_FIFO 44 וימיר אותם באמצעות וימיר אותם באמצעות

טבלאות קידוד שונות. המידע היוצא ממודול זה טבלאות קידוד שונות. המידע היוצא ממודול זה מועבר למודול הבא בשרשרת מועבר למודול הבא בשרשרת SERIAL_TO_PARALLELSERIAL_TO_PARALLEL..

120

Page 121: Jpeg encoder

תיאור עבודת המודולתיאור עבודת המודול . המודול מתחיל את פעולתו כאשר נכנס סיגנל המציין . המודול מתחיל את פעולתו כאשר נכנס סיגנל המציין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

Page 122: Jpeg encoder

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

Page 123: Jpeg encoder

תאור הסיגנליםתאור הסיגנלים נגמר המידע ברום

, מידע 1מגיע המידע ה-DC.

המידע מקודד באמצעות ROMטבלה שלוש ב-

המידע הבא 2מקודד מטבלה

ROMב-

תוצאות קידוד DCה-

. AC תוצאות קידוד ה-בשני השורות מתחת

ניתן לראות את ההפרדה לקידוד

ואורכו.

VALID_OUTבשני

הסיגנלים הללו יש את

OFFSETה-ואת

אורכו-נלקח כפונקציה של

123הקטגוריה

Page 124: Jpeg encoder

אלטרנטיבות שנבחנואלטרנטיבות שנבחנו-רומים נפרדים. אחד לכל טבלה. רומים נפרדים. אחד לכל טבלה.44שימוש ב-שימוש ב

יתרונות: אין.יתרונות: אין.

חסרונות: בזבוז מקום.חסרונות: בזבוז מקום. ניהול הסקטורים לקריאה יתנהל על ידי ה ניהול הסקטורים לקריאה יתנהל על ידי ה

FIFOFIFO::

יתרונות:קל יותר למימוש יתרונות:קל יותר למימוש

FIFOFIFOחסרונות: מודול זה מתפקד כקליינט של ה חסרונות: מודול זה מתפקד כקליינט של ה

ומימושו בתצורה זו יותר הגיוני.ומימושו בתצורה זו יותר הגיוני.

124

Page 125: Jpeg encoder

Bits collectionBits collection

125

Page 126: Jpeg encoder

SERIAL2PARALLELSERIAL2PARALLEL מטרה: מודול זה ייקח את המידע היוצא ממודול מטרה: מודול זה ייקח את המידע היוצא ממודול

ביט ביט 22 - מידע המגיע בגודל הנע מ- - מידע המגיע בגודל הנע מ- HUFFMAN_CODEHUFFMAN_CODEה-ה- ביט. ביט. 2626ועד ועד

ביט ביט 1616כאשר יש כאשר יש מידע זה מולבש על רגיסטר הזזה.המידע יוצא מידע זה מולבש על רגיסטר הזזה.המידע יוצא שעברו סינון מהבס המכסימלי דרכו הגיעו. שעברו סינון מהבס המכסימלי דרכו הגיעו.

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

מאוד לסגירתה הסופית של התמונה. מאוד לסגירתה הסופית של התמונה.

126

Page 127: Jpeg encoder

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

Page 128: Jpeg encoder

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

Page 129: Jpeg encoder

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

Page 130: Jpeg encoder

פוינטר המציין היכן ניתן להניח מידע

נכנס מידע למודול קידוד הופמן ואורכו

OFFSET ואורכו

OFFSET .וקידוד לאחר עריכה

OFFSETאורך וקידוד

רגיסטר זה מתמלא במידע שנגזר מהבסים

בהתאם לגודלם המדויק

תיאור של מידע נכנס- ותהליך עיבודו

130

Page 131: Jpeg encoder

פוינטר המציין היכן ניתן להניח מידע

נכנס מידע למודול קידוד הופמן ואורכו

OFFSET ואורכו

פרמטר המחזיק את המיקום ממנו ניתן להעביר מידע החוצה

תיאור של מידע נכנס- ותהליך עיבודו

וקידוד לאחר עריכה. OFFSET וקידודOFFSETאורך

מידע החוצה מוכן

מידע שאינו נכתב החוצה והופך להיות מידע הנכתב החוצה לאחר הוצאת המידע MSBהמידע ב-

הנוכחי

המידע החדש שנכנס צריך להיכתב לאחר שארית המידע שנותרה לאחר הכתיבה

החוצה

131

Page 132: Jpeg encoder

:תרחיש קיצוני: תרחיש קיצוני

זהו קידוד מאוד נדיר.זהו קידוד מאוד נדיר.

אפסים, קטגוריה אפסים, קטגוריה 00במידה ומגיע עבור בלוק כלשהו רצף של המידע הנ"ל – במידה ומגיע עבור בלוק כלשהו רצף של המידע הנ"ל – 1010

כאשר הוא מסוגל לנקות כאשר הוא מסוגל לנקות 2626. נכנס למודול זה מידע באורך של . נכנס למודול זה מידע באורך של 1616ואורך קידוד ואורך קידוד כל כל1616

סיקל. במצב זה היה עלול להיווצר מצב של אגירה. סיקל. במצב זה היה עלול להיווצר מצב של אגירה.

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

למודול מוגדר קו אדום שברגע שיש מידע ששוכב מימין אליו הוא מרים למודול מוגדר קו אדום שברגע שיש מידע ששוכב מימין אליו הוא מרים HALTHALT

למידע הנכנס, מרוקן את המידע שנאגר עליו.למידע הנכנס, מרוקן את המידע שנאגר עליו.

ומאפשר הזרמה מחודשת של המידע.ומאפשר הזרמה מחודשת של המידע.

132

Page 133: Jpeg encoder

ספירת הבלוקיםספירת הבלוקים

סיום תמונהסיום תמונה

ספירת בלוקים שהסתיימו

מידע אחרון של התמונה הנוכחית

Data valid בייט יצא 1 נמתח עוד סייקל על מנת ששארית המידע שנותרה- בגודל 133החוצה

Page 134: Jpeg encoder

Writing the jpeg Writing the jpeg filefile

134

Page 135: Jpeg encoder

FLASH_WRITERFLASH_WRITER:מטרות:מטרות

..FLASHFLASH ל- ל-JPGJPG. מודול זה יכתוב את התמונה בפורמט . מודול זה יכתוב את התמונה בפורמט 11

.מודול זה יכניס לקובץ את טבלת הקוונטיזציה באמצעותה בוצע הקידוד..מודול זה יכניס לקובץ את טבלת הקוונטיזציה באמצעותה בוצע הקידוד.22

.מודול זה ייקרא את הפרמטרים המאפיינים את התמונה הנתונה.מודול זה ייקרא את הפרמטרים המאפיינים את התמונה הנתונה33

ויישלו אותם בפורמט. ויישלו אותם בפורמט.

SERTIAL TO PARALLELSERTIAL TO PARALLEL.מודול זה ייקח את המידע שהוצמד ב-.מודול זה ייקח את המידע שהוצמד ב-44

""0000" המחייב תוספת "" המחייב תוספת "FFFFוישפוך אותו לקובץ תוך כדי בדיקת בייט "וישפוך אותו לקובץ תוך כדי בדיקת בייט "

אחריו. אחריו.

135

Page 136: Jpeg encoder

תיאור עבודת המודולתיאור עבודת המודול . מודול זה בתחילת עבודתו, עובד מול השעון של . מודול זה בתחילת עבודתו, עובד מול השעון של IMAGERIMAGER של ה- של ה- SHOOTSHOOTהמודול מאזין לרגל המודול מאזין לרגל

ה –ה –

IMAGERIMAGER השעון האיטי של המערכת. קורא את שם הקובץ המיועד, ואת גודל התמונה אותה , השעון האיטי של המערכת. קורא את שם הקובץ המיועד, ואת גודל התמונה אותה ,המערכתהמערכת

הולכת לקודד.הולכת לקודד.

INFOINFO עם השעון המהיר של המערכת. כתיבת ה- עם השעון המהיר של המערכת. כתיבת ה- INFOINFOלאחר מכן מתחילה כתיבה של ה-לאחר מכן מתחילה כתיבה של ה-מצריכה מצריכה

. .JPGJPGהכרות עמוקה עם מבנה ה-הכרות עמוקה עם מבנה ה-

לאחר הגעת המידע האחרון מתבצעת נעילה של הקובץ. לאחר הגעת המידע האחרון מתבצעת נעילה של הקובץ.

עקרונות חשובים במימוש:עקרונות חשובים במימוש:-שימוש ב-שימוש בROMROM -יחיד המכיל את כל ה- יחיד המכיל את כל ה INFOINFO בכל הקומבינציות שייתכנו, בהתאם לטבלת בכל הקומבינציות שייתכנו, בהתאם לטבלת

הקוונטיזציה הרלוונטית.הקוונטיזציה הרלוונטית.": ברגע שמגיע בייט שעבר קידוד :"ברגע שמגיע בייט שעבר קידודFFFF" אחריו." אחריו.0000" מודול זה ידאג להכניס "" מודול זה ידאג להכניס " מודול זה ייתן מודול זה ייתןHALTHALT -ל- ל FLASHFLASH .כל זמן שאין לו מידע מוכן לכתיבה לקובץ. כל זמן שאין לו מידע מוכן לכתיבה לקובץ

136

Page 137: Jpeg encoder

מבט כולל – שלבי עבודהמבט כולל – שלבי עבודה

INFOכתיבת FLASH_HALT כתיבת הבלוקים המקודדים

FFD9סגירת קובץ -

מידע אחרון –ניתן לסגור תמונה

137

Page 138: Jpeg encoder

תחילת עבודה- האזנה תחילת עבודה- האזנה IMAGERIMAGERל-ל-

מימדי התמונה

IMAGERשעון שם הקובץ

FLASHשעון 138

Page 139: Jpeg encoder

FLASHFLASHיצירת קובץ ב-יצירת קובץ ב-

Halt -ל FLASHיורד למטה FLASHשם התמונה נכתב ל-

139

Page 140: Jpeg encoder

INFOINFOכתיבת כתיבת

שם התמונה סיים את דרכו ל -FLASH . המידע ROMמתבצעות קריאות ל-

יוצא בגודל בייט כל פעם

והמידע הראשון נכתב לקובץ.0 יורדת ל-HALT בייטים הרגל של 4כאשר יש

VALIDמיקום הבייטים שהם בבס

140

Page 141: Jpeg encoder

SERIAL TO PARALLELSERIAL TO PARALLELמידע מקודד מגיע מ-מידע מקודד מגיע מ-

SERIAL TOמידע נכנס מה- PARALLEL

VALID BIT -IN

VALID BIT -

OUT

D_OUTלפלאש

שני בייטים מה LSB נקראים

מהבאס ונכתבים

בפלאש

פה לעומת זאת נכתבים שלושה

בייטים כיוון FFשהגיע מידע

.למודול מוגדר

00להכניס אחריהם 141

Page 142: Jpeg encoder

SERIAL TO PARALLELSERIAL TO PARALLELמידע אחרון מגיע מ-מידע אחרון מגיע מ-

EOF מגיע לפלאש ואיתו

INFO של סגירת JPGקובץ

“FFD9- ”

המידע המקודד האחרון באורך

בייט אחד

142

Page 143: Jpeg encoder

FLASHFLASH מה- מה- HALTHALTטיפול ב-טיפול ב-

ברגע שמגיע ברגע שמגיעHALTHALT -מה- מה FLASHFLASH כל כל ממשיכה ממשיכה SUPER FIFOSUPER FIFOהמערכת עד ל- המערכת עד ל-

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

בשקפים הבאים ניתן להתרשם מהמערכת בשקפים הבאים ניתן להתרשם מהמערכתHALTHALTבשגרה ומהמערכת במצב של בשגרה ומהמערכת במצב של

143

Page 144: Jpeg encoder

HALTהמערכת ללא

HALTהמערכת עם

FIFO כרגיל

שאר המערכת בהשהיה

144

Page 145: Jpeg encoder

HALTהמערכת ללא

INFO בשלב כתיבת ה- HALTהמערכת עם

145

Page 146: Jpeg encoder

HALTHALT בזמן בזמן FIFOFIFOאגירה ב-אגירה ב-

BUFFERSניתן להתבונן בשלוש הללו המציינים את כמות המידע בכל

זמן בכל סקטור

HALT FLASHמה-

1עולה ל-

מתחילה להתבצ

ע אגירהHALT

FLASHמה-0יורד ל-

מידע נשאב

1מסקטור ו

BUFFER 0יורד ל-146

Page 147: Jpeg encoder

DebuggingDebugging

147

Page 148: Jpeg encoder

Debugging: us vs. Debugging: us vs. cristi.ccristi.c

לצורך דיבוג השחלנו בקוד של קריסטי בשפת לצורך דיבוג השחלנו בקוד של קריסטי בשפתסי הדפסות לתוך קובץ טקסט במקומות סי הדפסות לתוך קובץ טקסט במקומות

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

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

ביט, מודול אחר מודול...ביט, מודול אחר מודול...

148

Page 149: Jpeg encoder

Debugging: us vs. Debugging: us vs. cristi.ccristi.c

הרחבת מתודות הכתיבה לתוך קובץ .JPEGה-

.JPEGהביטים שנכתבים לקובץ ה- הביטים שנכתבים לקובץ טקסט.

.RGBהדפסת

149

Page 150: Jpeg encoder

Debugging: us vs. Debugging: us vs. cristi.ccristi.c

.DCTהדפסת הכניסה ל-

הדפסת מוצא הקוונטיזציהמזוגזג.

הדפסת.zeroes, category, offset

150

Page 151: Jpeg encoder

Debugging: us vs. Debugging: us vs. cristi.ccristi.cקובץ הפלטים של קריסטי

נראה באופן הבא:

הדרים:

סוף הדרים:תחילת הקידוד:הבלוק הראשון:

RGB, RGB.…:

151

Page 152: Jpeg encoder

Debugging: us vs. Debugging: us vs. cristi.ccristi.c אנחנוההשוואה: קריסטי

DCT_in

zigzagafterquantization

RLE & DPCM

152

Page 153: Jpeg encoder

SniffingSniffing מודול המתחבר במקביל לכל אחד מודול המתחבר במקביל לכל אחד

מקווי המידע בין המודולים מקווי המידע בין המודולים במערכת ומבצע כתיבה של כל במערכת ומבצע כתיבה של כל

בלוק לקובץ נפרד.בלוק לקובץ נפרד.

153

Page 154: Jpeg encoder

UtilsUtilsלהלן כמה כלי עזר שבנינו:

RLE & DPCM לפלוטים של parsingמבצע .num of zeroes, category and offsetלקבלת

.Excelמומש ב-

.hex2bin ו- bin2hexממיר .Visual Basicמומש ב-

154

Page 155: Jpeg encoder

Utils contUtils cont..מזגזג וקטור עומד.

64מציג וקטור עומד של .8X8בצורת מטריצה של

"מיישר" וקטור עומד מזוגזג.

עם נקודה עשרונית.YCbCr ל- RGBמבצע את הפעולה המתמטית להמרת

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

vecדוגמא: zigzag)vec(

v2matrix)zigzag)vec((

155

Page 156: Jpeg encoder

דגשים ועמידה ביעדיםדגשים ועמידה ביעדים

לפני כחודשיים(. )לפני כחודשיים(.19.4.0919.4.09הגשת הפרויקט כולל מצגת בתאריך היעד המקורי הגשת הפרויקט כולל מצגת בתאריך היעד המקורי( 1024תמיכה בגודל תמונה של עד תמיכה בגודל תמונה של עדx10241024x1024 מימוש מימושhalthalt חוזר מה חוזר מה flashflash מחזורי שעון. מחזורי שעון.8080 ל ל תמיכה בשלושה תמיכה בשלושהQuality FactorQuality Factor...תמיכה בהמרה של צילום תמונות ברצף.תמיכה בהמרה של צילום תמונות ברצף הדפסת תאריך על התמונה –כלל תמיכה בהדפסת אותיות בפורמט הדפסת תאריך על התמונה –כלל תמיכה בהדפסת אותיות בפורמטASCIIASCII , ,

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

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

התמונה ללא שגיאות.התמונה ללא שגיאות..הפתעה בהמשך.הפתעה בהמשך

156

Page 157: Jpeg encoder

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

תודה ענקית למקס ניגרי על ההרצאות תודה ענקית למקס ניגרי על ההרצאותהמרתקות, על הידע והמקצועיות הרבה המרתקות, על הידע והמקצועיות הרבה

שרכשנו בזכותו.שרכשנו בזכותו.

157

אלון כהן, רועי ביטון, יבגני )יוני( חסין משה שקלר, אריאלה הובר, שולמית

עג'מי

Page 158: Jpeg encoder

ENDEND

158