Sunteți pe pagina 1din 18

1

ECSE 431 - Final Project Report


Vincent Arabian (260429181), Felix Le Dem (260363961),
Payom Meshgin (260431193) and Anita Szilagyi (260366272)
I. INTRODUCTION
The goal of this project was to design a system on the
Altera DE2 board that takes in a digital video signal encoded
in ITU656 format, processes it and outputs the signal to a
VGA-compatible display.
II. DESIGN IMPLEMENTATION
As seen on Figure 1, the system consists of an FPGA
connected to a set of components present on the Altera DE2
board: The ADV7181 analog video decoder (ITU decoder),
the ADV7123 video digital-to-analog converter (DAC) and
8 megabytes of SDRAM memory.
The general operation of the systems is as follows:
The ITU decoder continuously sends out a serial stream
of digital video data encoded in ITU656 format (YCbCr
4:2:2, 720*480 resolution, interlaced video).
A Grab interface extracts the ram video image and sends
it out to the NIOS driver, which processes the data
(adding the frame counter, convolution, etc.
The processed video is sent via the Avalon bus to the
memory controller of the SDRAM, which stores the
data such that the data associated to an entire frame of
video is located in a contiguous address range, hence
deinterlacing the video.
Meanwhile, the VGA controller makes a request for a
line of video data (equivalent to one horizontal line in
a frame). The DMA engine accepts the request, and in
turn requests the line from memory via the Avalon bus
The line is eventually sent from memory to the DMA
controller, which in turn pipelines the line to the DMA
engine
The DMA engine stores the line inside the line buffer,
which lls up with video data.
The VGA controller grabs onto each line and decodes
it in RGB format.
The output is sent to a VGA-enabled monitor, which
displays each frame at an effective rate of 30 frames
per second.
A. New Register File
The register le version that was used for the NIOS project
had to be modied to incorporate the new interrupt source
(i.e. rising or falling edge of GACTIVE) and to change the
registers that were used (i.e. switch from registers such as
Fig. 1. Block diagram of overall design
TCMP0, TCMP1, etc to registers GCTRL, GFSTART and so
on). It is worth mentioning that the architecture of the register
le component was split into multiple functional processes,
each with its own role (i.e. write process, read process,
write interrupt and set interrupt). This is a signicant
improvement from the previous version as it makes it a lot
easier to debug and expand the component.
The new source for interrupts was the start of a video
eld or the end of a video eld. The start of the video eld
was signaled by the signal GACTIVE (belonging to the Grab
Interface) going high. This also represented the start of valid
video coming out of the grab interface and going towards the
SDRAM. At the same time, the end of eld was signaled by
GACTIVE going low, representing the end of valid video for
a eld.
For the purpose of the present project, the end of eld
source was used to service the interrupts. In order to catch the
transition of GACTIVE from high to low or from low to high,
an edge detection circuit was implemented in the register
le component. It consisted of two extra processes: one for
detecting the transition and another one for actually setting
the appropriate bit in the GINT register. This was done due
to the fact that a signal cannot be successfully driven by
more than one process. The elds of several registers were
mapped as conduit end for the Qsys system. These elds
communicated directly with the other Qsys components that
they served. This was done in order to bypass the Avalon bus
and to speed up the communication between components. As
an example, the way the register le was able to detect the
rising or falling edges of GACTIVE was by receiving the
current status of GACTIVE from the grab interface.
2
B. New QSYS system
Other components were changed and/or added to the
previously built QSYS system. Apart from the modied
register le, two new components were added, namely the
grab interface and the memory controller.
C. Flow of data / Acquisition Overview
The video data sent from the external device through
the FPGA is captured by the grab interface. The grab then
decodes the signals it receives into raw video data, which
then it writes into the SDRAM. To accomplish that, it places
the data on the Avalon bus, since both the grab interface and
the memory controller are part of the QSYS system. Once in
the memory, the data is ready to be picked up by the DMA
engine and sent further through the line buffer and VGA
controller to the screen.
D. NIOS driver
1) Initialization: The NIOS controls the way in which
the grab component writes to the memory. It does so by
writing into the control registers located in the register le.
The elds of these registers are directly connected to the grab
interface through its conduit end interface. These control
registers need to be initialized properly for the grab to be
able to capture the rst eld of the rst frame. Therefore:
GCTRLs elds must be set as such:
GMODE signals the type of the eld being
grabbed;
GFMT signals if the capture is in color or BW
GSSHT arms the grab;
GFSTART gives the SDRAM address where the grab
should start writing a eld
GLPITCH represents the distance between 2 consecu-
tive lines in memory, i.e. how much the value of the
address jumps; it is normally 2 * line length, since
elds are arriving interlaced
GINT controls the handling of interrupts: either at the
start of frame or end of frame.
2) Interrupt Service Routine: The interrupt service routine
handles the way the grab interface is programmed between
two elds. It also has to take into account the end of
frame event. In our implementation, a check is done at the
beginning of the ISR:
i f ( f i e l d numbe r == 1) {
/ / handl e i n t e r r u p t s e n t
/ / when t he grab f i n i s h e d
/ / wr i t i n g t he f i r s t f i e l d
/ / i n t o memory
f i e l d numbe r = 2;
} e l s e {
/ / handl e i n t e r r u p t s e n t
/ / when t he grab f i n i s h e d
/ / wr i t i n g t he s econd f i e l d
/ / i n t o memory
f i e l d numbe r = 1;
}
The above implementation was needed in order to dis-
tinguish which elds interrupt is being serviced. The
eld number variable is a global variable that changes its
value in both branches of the if-statement, according to which
eld is being serviced.
Furthermore, the switch to a new frame had to be incor-
porated if the second eld sent the interrupt. This was done
as such:
f r ame number ++;
i f ( f r ame number == 3) {
f r ame number = 1;
/ / make changes t o o v e r wr i t e
/ / f i r s t f rame i n memory
} e l s e {
/ / make changes t o wr i t e t he
/ / s econd c o n s e c u t i v e f rame
/ / i n t o memory
}
Based on which eld sent the interrupt, the registers (and
their elds) had to change accordingly:
GFSTART had to either
Revert to 0 after the second frame
Get set to start of frame GFSTART + length of one
line for the second eld of each frame
Get set to previous start of frame GFSTART +
length (in bytes) of the frame that just nished
being written into memory.
GMODE eld of GCTRL had to be change its value to
odd if previously even or to even if previously odd.
E. Validation
Before merging the acquisition with the DMA and VGA
controller, a thorough simulation was done. We had to make
sure that the grab wrote correctly to the SDRAM i.e. that the
frames were de-interlaced properly and that the cycling of
frames in memory was done correctly. At the same time, the
interrupt service routine had to be tested to see if the switch
between odd elds and even elds was done correctly.
For the purpose of the simulation we used the provided
video decoder. This produced 8 lines per frame, each of
length 256 bytes.
The full simulation can be seen in the appendix.
1) Communication between grab interface and register
le: The communication between the grab and the register
le can be seen in the waveform below. The boxes are color
coded to show how the data is transmitted. First the data is
written into the register le by the C application in Eclipse;
3
very soon after that, the data is communicated to the grab
component through the register les conduit end interface.
In the case of this test, the expected results match the
actual results.
Fig. 2. Simulation of the grab interface swtching between elds
The following simulation snippet shows how new values
are set in the interrupt service routine for the grab interface
when switching between elds. (i.e. GMODE changes from
2 to 3, meaning change from grabbing next odd eld to
grabbing the next even eld):
Fig. 3. Field Switch
In the next test, we show how the grab receives the correct
information about the next eld at the end of each eld (i.e.
when the eof interrupt is serviced). The 256 bytes per line
in our test data leads to a GLPITCH value of 512 (since the
grab needs to skip one line when writing into memory for
the purpose of de-interlacing the frame).
We expect the rst line to be written into address 0x00,
the second one into address 25610 0x100 (the address is
0 + 256, meaning the starting address of the rst line in
the second eld has an offset of 256 one line from the
previous elds starting address. This is done in order to de-
interlace the frame). Therefore, when done with the rst eld
of the rst frame, we expect to have 4GFSTART = 25610 =
0 0100.
When done with a frame, the value of GFSTART needs to
be updated in an appropriate manner. Therefore, we expect
to see:
new GFSTART = old GFSTART + (GLPITCH/2) 8.
GLPITCH is divided by 2 in order to obtain the actual
length of a line in bytes and then multiplied by 8 because
there are 8 lines per frame (4 in each eld). This leads to:
new GFSTART = old GFSTART +GLPITCH 4.
So, the expected value of GFSTART at the end of the
rst frame is 0 + 512 4 = 204810 = 0 0800. This is
the address in SDRAM where the grab will start writing the
second frame.
In the waveform below, it is shown that the actual results
match the expected results, concluding that the switching of
GFSTART is done correctly for the purpose of de-interlacing.
As a side-note, it can also be seen that GFSTART switches
back to being 0 after 4 elds (= 2 frames). This happens due
to the choice of having 2 frames at a time in memory: one
being written and one already written and ready for the DMA
to read. The test was done before any kind of processing was
incorporated.
Fig. 4. Change of GFSTART after an interrupt
Finally, it can be seen here that as data is being placed
on the writedata bus of the grab interface, the same data is
retrieved and placed into memory in the SDRAM:
Fig. 5. Writing into SDRAM
F. DMA engine
The newest element in the design was a DMA (direct
memory access) engine. The engine, implemented as a nite
state machine, receives a request for a frame by the VGA
controller in addition to line requests. Once granted, the
request translates into a new request on the Avalon bus for
bursts of data representing a line of a frame of video located
in SDRAM. If the data is valid, the DMA engine places
the contents of the line into the line buffer in address order,
preparing the buffer for a read from the VGA controller.
Fig. 6. Example of clock-domain crossing (for the linereq signal)
The major issue regarding the DMA engine lies in its use
of inputs in a different clock domain (the 27 MHz clock). In
order to avoid propagating metastabilities in the logic circuit,
a series of 3 pipelined ip ops were added at the inputs of
the DMA that were connected to the VGA controller (the
start of frame and linereq signals), hence changing the clock
domain of the new signals to the 100 MHz domain. The result
of this pipeline was simulated and shown on gure 6.
The nite state machine of the DMA controller is shown
on gure 7. The conditions in the state machine are tested
at every clock cycle of the 100 MHz PLL.
4
Fig. 7. FSM diagram of the VGA controller
In simulation, the FSM was shown to function correctly,
as seen on gure 8
Fig. 8. Simulation of the FSM cycling through its states
1) Idle: When the frame start signal is asserted high, the
burst base address is set to the register value of DMAFS-
TART. When theres a new line request, the state changes to
the request state, where the controller starts requesting bursts
of data.
2) Request: The DMA controller rst checks if the line
has been fully transferred from the memory. Otherwize it
asserts the read en signal to high, sets the address to the
value of the burst base address plus a burst offset, and then
goes to the wait state. It also sets the burst count to the
desired size of the burst. If the controller has reached the
end of a line when entering the request state, the next state
will be the idle state.
3) Wait: The controller will stay in this state as long as
the wait request signal is held high by the Avalon interface.
Once the wait request signal is lowered, the burst request has
been acknowledged and can now lower the read en signal
and move to the receive state.
4) Receive: It stays in this state as long as the burst of data
isnt nished. It counts the number of clock cycles where the
data valid signal is held high in order to determine when the
burst is complete. Once the burst is done, it changes state to
the request state.
G. Verication
To verify the proper operation of the DMA engine, we
tested that it rst is able to receive all the data available on
the Avalon bus when it makes a line request.
Figure 9 shows an example of data being stored in to the
line buffer from the DMA component. Note that the entirely
of the incoming data is fully stored into the line buffer.
Figure 10 shows an entire 128 by 8 pixel frame passing
through the DMA controller.
Fig. 9. Simulation of the FSM cycling through its states
Fig. 10. Simulation of a full frame through the DMA controller
H. VGA Controller
The major modication made to the VGA controller was
to set the VGA controller as the master component in the de-
sign, meaning that it was ultimately responsible for the entire
operation of the circuit. In order to implement this change,
a new signal, start of frame was agged at the beginning of
every frame. This ag would then be sensed by the DMA
controller, which uses the ag to synchronize to each frame
read from memory. This change results in the VGA controller
controlling when blanking occurs, rather than it taking the
blanking signal from the source video as was the case in
previous version of the DMA. Fortunately, the colour space
converter, did not require any major modications except that
the 16 bit chunks of data were arriving with the Y component
rst instead of the Cb/Cr component.
5
III. PROCESSING
In the main C functions while(1) loop, two if statements
were implemented to detect the presence of the 3rd and 4th
switch. The 3rd switch would start the frame count, and the
4th switch would start the convolution (edge detection).
A. Frame Count
To be able to display a font, the rst step to take was
to create a bit array of 1s and 0s to represent each digit 0
through 9. Each character was to be displayed on a 12 by
12 pixel 1-bit bitmap, and thus the array was 1440 bits long.
The position of a zero in the array indicated that the original
pixel in the frame was not to be modied (a blank pixel). The
position of a one indicates the presence of a characters pixel.
To map this array, each character was represented using ones
and zeros.
For example, for the digit zero, we have the scheme:
000000000000
011111111110
011111111110
011000000110
011000000110
011000000110
011000000110
011000000110
011000000110
011111111110
011111111110
000000000000
If statements were used with GACTIVE to detect the
passing of each frame. At this point, the code would calculate
the frame rate using the register les counter. The frame rate,
a two digit number, could then be passed to the getDigits
function, enabling to retrieve the digits and then display them
in the function write() using the above mentioned array.
The write() function would rewrite to the top left of a
frame before displaying it. This required 3 for loops, one for
each line, row, and character of the array. An excerpt of the
write() function is provided in the appendix.
As seen in the sample picture in the appendix, the frame
counter has been successfully implemented, displayed in the
upper left corner of the VGA monitor.
B. Convolution
Edge detection can be performed by obtaining the x and
y gradient of the luminance for each pixel, and summing
the values together. The resulting pixel would have high
luminance if there is an edge, and low luminance otherwise.
The function used for edge detection is shown in the
appendix. Unfortunately, running the convolution engine
resulted in frozen frames. Furthermore, the edge detection
was not performed entirely. It was most likely getting stopped
by an interrupt, but due to time constraints, we were unable
to ofcially identify the source of the problem.
In order to improve the functionality of the edge detection,
we would need to write to the SDRAM in a faster way,
preferably with some burst instead of writing each byte
individually. This would have improved all processing sig-
nicantly.
IV. POSSIBLE IMPROVEMENTS
A. Improvements on the design
There are some additional features that could be imple-
mented to improve our design. Features such as horizontal
and vertical zoom, line reversal, and frame reversal are
additions that can be made for future iterations of the VGA
and DMA designs. On the NIOS driver side, features such as
frame rate display and convolution can also be implemented.
B. Architecture improvements
Architectural improvements can be made such that the
DMA and the DMA controller become a single entity. In
addition, in order to exploit the efciencies of using a
monochrome format, the architecture of our VGA controller
has to be modied such that it only reads one byte per pixel
when displaying a frame.
C. Scalability
Since we have an effective frame rate of 30 frames per
second, we have room to increase the output resolution of our
design at the output without missing any frames. Effectively,
we could double our frame resolution from 720x480 to
1440x960 by storing every pixel twice and repeating every
line twice. Considering the possibility of having a video
decoder running at double the operating frequency, we could
potentially have an output of approximately 1024x680 at an
effective rate of 30 frames per second.
V. CONCLUSION
We designed a system able to take an analog video signal
as an input and then output it to VGA format using a NIOS
driver, a Qsys system, a DMA and a display controller.
After weeks of hard work, we were able to have the Grab
interface write into SDRAM and successfully have the DMA
read from it such that our display controller can display its
contents on the screen. We were also able to implement a
frame counter to showoff the processing capabilities of our
developed system.
We would like to thank Eric Boisvert and Franois Leduc-
Primeau for taking time out of their busy schedule to assist
us as we completed our project. Overall, this course was
a very enriching experience, and helped rene our skills in
FPGA design using CAD tools.
6
VI. APPENDIX
A. Global Block diagram of the entire design
7
B. Frame shown with frame counter
8
C. ModelSim simulation of register le, grab interface and memory
D. ModelSim simulation the memory storing a burst of data
9
E. Synthesis report summary
F. Critical paths for the 27 MHz clock
10
G. Critical paths for the 100 MHz clock
H. Reported maximum frequencies
I. Processing Code
1) Snippet of the convolution code: .
voi d e d g e d e t e c t i o n ( )
{
f or ( i nt y = 0; y < h ; y++) {
f or ( i nt x = 0; x < w; x++)
{
a l t u 1 6 edge x = 0 , edge y = 0 , gr adx = 0 , gr ady = 0 , y = 0;
a l t u 8 r e s u l t = 0;
f or ( i nt a = 0; a < Hei ght ; a ++)
{
f or ( i nt b = 0; b < Wi dth ; b++)
{
i nt c = ( x Wi dth / 2 + b + wd) % wd ;
i nt d = ( y Hei ght / 2 + a + ht ) % ht ;
edge x = ( s r c f r a me + 1440 imageY + 2
c ) ; / / c a l c u l a t i n g p i x e l addr e s s
edge y = ( s r c f r a me + 1440 imageY + 2
d ) ;
/ / cb += i mage [ imageX ] [ i mageY ] . cb f i l t e r [ a
] [ b ] ;
11
/ / cr += i mage [ imageX ] [ i mageY ] . cr f i l t e r [ a
] [ b ] ;
edge x += edge x f i l t e r 1 [ a ] [ b ] ;
gr ady += gr ady f i l t e r 2 [ a ] [ b ] ;
y = gr adx +gr ady ;
}
}
r e s u l t = min ( max ( f a c t o r y + bi as , 0) , 255) ;
IOWR 8DIRECT(SDRAM CONTROLLER BASE, o f f s e t , r e s u l t ) ;
IOWR 8DIRECT(SDRAM CONTROLLER BASE, o f f s e t +1 , 255) ;
o f f s e t += 2;
}
IOWR 32DIRECT( REGFILE BASE, DMAFSTART, 691200) ;
}
ret urn n u l l ;
}
2) Snippet of the write() function: .
i f ( f i e l d numbe r == 1) {
/ / s e t t he pr oper v al ue s f o r programmi ng NIOS f o r t he s econd f i e l d wi t h i n
f rame
i f ( f r ame number == 1) {
g f s t a r t t = g l p i t c h v a l / 2 ;
} e l s e i f ( f r ame number == 2) {
g f s t a r t t = ( l i ne nmbr + 1) g l p i t c h v a l / 2 ;
}
f i e l d numbe r = 0;
IOWR 32DIRECT( REGFILE BASE, GFSTART, g f s t a r t t ) ;
/ / GINT: c l e a r t he i n t e r r u p t
IOWR 32DIRECT( REGFILE BASE, GINT, c l r e o f i n t | e o f i n t e n ) ;
IOWR 32DIRECT( REGFILE BASE, GCTRL, ( e n c ol or | gnef | en GSSHT) ) ;
} e l s e {
/ / s e t t he pr oper v al ue s f o r programmi ng t he NIOS f o r t he s t a r t of anot he r
f rame !
/ / program t he DMA t o read f rom t he s t a b l e i mage t h a t has j u s t f i n i s h e d
bei ng wr i t t e n i n t o memory
/ i f t he i nc r e me nt e d f rame number shows t h a t a t h i r d f rame woul d have t o
be wr i t t e n t o memory
t he n i t means t h a t we need t o go back t o 0 , i . e . s t a r t wr i t i n g at
l o c a t i o n 0 i n memory agai n
/
i f ( f r ame number == 1) {
g f s t a r t t = g l p i t c h v a l / 2 l i ne nmbr ;
dma s t a r t a ddr = nul va l ;
f r a me c ount ba s e a ddr = 4380 + 2 g l p i t c h v a l ;
f r a me r a t e ba s e a ddr = 4380 + 10 g l p i t c h v a l ;
12
}
i f ( f r ame number == 2) {
g f s t a r t t = n u l v a l ;
dma s t a r t a ddr = g l p i t c h v a l / 2 l i ne nmbr ;
f r a me c ount ba s e a ddr = 4380 + 2 g l p i t c h v a l + g l p i t c h v a l / 2
l i ne nmbr ;
f r a me r a t e ba s e a ddr = 4380 + 10 g l p i t c h v a l + g l p i t c h v a l / 2
l i ne nmbr ;
}
IOWR 32DIRECT( REGFILE BASE, GINT, c l r e o f i n t | e o f i n t e n ) ;
IOWR 32DIRECT( REGFILE BASE, GFSTART, g f s t a r t t ) ;
IOWR 32DIRECT( REGFILE BASE, GCTRL, ( e n c ol or | gnof | en GSSHT) ) ;
i nt temp , temp2 ;
i f ( d i s p l a y f r a me c o u n t e r == 1) {
n r o f d i g i t s = g e t n u mb e r o f d i gi t s ( f r a me c ount e r ) ;
f or ( i i = n r o f d i g i t s ; i i >= 1 ; i i ) {
temp = f r a me c ount ba s e a ddr + 30 ( n r o f d i g i t s i i ) ;
f or ( i = 0; i < 12; i ++) {
f or ( j = 0; j < 12; j ++) {
i f ( c ount da t a [ ( ( f r a me c ount e r % power ( 10 ,
i i ) ) / power ( 10 , i i 1) ) 144 + i 12 + j
] == 1) {
IOWR 16DIRECT(SDRAM CONTROLLER BASE
, temp+ 1440 i + 2 j , 60288) ;
}
}
}
}
}
IOWR 32DIRECT( REGFILE BASE, DMAFSTART, dma s t a r t a ddr ) ;
f r ame number ++;
f i e l d numbe r = 1;
i f ( f r ame number == 3) {
f r ame number = 1;
}
f r a me c ount e r ++;
}
13
J. Constraint le: DE2 BaseProject.out.sdc
## Gener at ed SDC f i l e DE2 Bas ePr oj ect . out . s dc
## Copyr i ght ( C) 19912013 Al t e r a Cor por a t i on
## Your use of Al t e r a Cor por a t i on s de s i gn t oo l s , l o g i c f u n c t i o n s
## and o t h e r s o f t wa r e and t o o l s , and i t s AMPP p a r t n e r l o g i c
## f u n c t i o n s , and any out put f i l e s from any of t he f o r e g o i n g
## ( i n c l u d i n g de vi c e programmi ng or s i mu l a t i o n f i l e s ) , and any
## a s s o c i a t e d document at i on or i n f o r ma t i o n a r e e x p r e s s l y s u b j e c t
## t o t he t er ms and c o n d i t i o n s of t he Al t e r a Program Li c e ns e
## Su b s c r i p t i o n Agreement , Al t e r a MegaCore Func t i on Li c e ns e
## Agreement , or o t h e r a p p l i c a b l e l i c e n s e agr eement , i nc l udi ng ,
## wi t hout l i mi t a t i o n , t h a t your use i s f or t he s o l e pur pos e of
## programmi ng l o g i c d e v i c e s manuf act ur ed by Al t e r a and s ol d by
## Al t e r a or i t s a u t h o r i z e d d i s t r i b u t o r s . Pl e a s e r e f e r t o t he
## a p p l i c a b l e agr eement f or f u r t h e r d e t a i l s .
## VENDOR Al t e r a
## PROGRAM Quar t us I I
## VERSION Ver s i on 1 3 . 0 . 0 Bui l d 156 04/ 24/ 2013 SJ Fu l l Ver s i on
## DATE Tue Dec 03 16: 03: 52 2013
##
## DEVICE EP2C35F672C6
##
#
# Time I n f o r ma t i o n
#
s e t t i me f o r ma t u n i t ns de c i ma l pl a c e s 3
#
# Cr e a t e Cl ock
#
c r e a t e c l o c k name { a l t e r a r e s e r v e d t c k } pe r i od 100. 000 waveform { 0. 000 50. 000 }
[ g e t p o r t s { a l t e r a r e s e r v e d t c k }]
c r e a t e c l o c k name { Cl ock 27 } pe r i od 37. 037 waveform { 0. 000 18. 518 } [ g e t p o r t s
{CLOCK 27}]
c r e a t e c l o c k name {CLOCK 50} pe r i od 20. 000 waveform { 0. 000 10. 000 } [ g e t p o r t s
{CLOCK 50}]
#
# Cr e a t e Gener at ed Cl ock
#
14
c r e a t e g e n e r a t e d c l o c k name { cl k100 } s our c e [ g e t p o r t s {CLOCK 50}] mul t i pl y by 2
ma s t e r c l oc k {CLOCK 50} [ g e t n e t s { my p l l i n s t | a l t p l l c o mp o n e n t | cl k0 }]
c r e a t e g e n e r a t e d c l o c k name { c l k100 de l } s our c e [ g e t p o r t s {CLOCK 50}]
mul t i pl y by 2 o f f s e t 3.000 ma s t e r c l oc k {CLOCK 50} [ g e t p i n s { my p l l i n s t |
a l t p l l c o mp o n e n t | p l l | c l k [ 1 ] }]
#
# Set Cl ock Lat ency
#
#
# Set Cl ock Un c e r t a i n t y
#
#
# Set I nput Del ay
#
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 0 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 0 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 2 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 2 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 3 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 3 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 4 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 4 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 5 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 5 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 6 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 6 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 7 ] } ]
15
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 7 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 8 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 8 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 9 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 9 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 0 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 0 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 1 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 1 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 2 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 2 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 3 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 3 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 4 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 4 ] } ]
s e t i n p u t d e l a y add del ay max c l oc k [ g e t c l o c k s { cl k100 }] 5. 400 [ g e t p o r t s {
DRAM DQ[ 1 5 ] } ]
s e t i n p u t d e l a y add del ay min c l oc k [ g e t c l o c k s { cl k100 }] 1. 000 [ g e t p o r t s {
DRAM DQ[ 1 5 ] } ]
#
# Set Out put Del ay
#
#
# Set Cl ock Groups
#
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
16
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
s e t c l o c k g r o u p s as ynchr onous gr oup [ g e t c l o c k s { a l t e r a r e s e r v e d t c k }]
#
# Set Fa l s e Pat h
#
s e t f a l s e p a t h from [ g e t c l o c k s { Cl ock 27 }] t o [ g e t c l o c k s { cl k100 }]
s e t f a l s e p a t h from [ g e t c l o c k s { cl k100 }] t o [ g e t c l o c k s { Cl ock 27 }]
s e t f a l s e p a t h t o [ g e t k e e p e r s { a l t e r a s t d s y n c h r o n i z e r : | di n s 1 }]
s e t f a l s e p a t h from [ g e t r e g i s t e r s {myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r
[ 1 ] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 2 ] myqsys : myqs ys i ns t | r e g f i l e
: r e g f i l e | g f s t a r t r [ 3 ] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 4 ] myqsys :
myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 5 ] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e |
g f s t a r t r [ 6 ] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 7 ] myqsys : myqs ys i ns t
| r e g f i l e : r e g f i l e | g f s t a r t r [ 8 ] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 9 ]
myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 10] myqsys : myqs ys i ns t | r e g f i l e :
r e g f i l e | g f s t a r t r [ 11] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 12] myqsys :
myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 13] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e |
g f s t a r t r [ 14] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 15] myqsys :
myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 16] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e |
17
g f s t a r t r [ 17] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 18] myqsys :
myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 19] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e |
g f s t a r t r [ 20] myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 21] myqsys :
myqs ys i ns t | r e g f i l e : r e g f i l e | g f s t a r t r [ 2 2 ] } ]
s e t f a l s e p a t h from [ g e t r e g i s t e r s {myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | gf mt r
myqsys : myqs ys i ns t | r e g f i l e : r e g f i l e | gmode r [ 0 ] myqsys : myqs ys i ns t | r e g f i l e :
r e g f i l e | gmode r [ 1 ] } ]
s e t f a l s e p a t h from [ g e t r e g i s t e r s {myqsys : myqs ys i ns t | g r a b i f : g r a b i f |
g r a b r c o n t r o l : g r a b r c o n t r o l 1 | s t a t e . DONE myqsys : myqs ys i ns t | g r a b i f : g r a b i f |
g r a b r c o n t r o l : g r a b r c o n t r o l 1 | s t a t e . WAITING myqsys : myqs ys i ns t | g r a b i f : g r a b i f |
g s s h t f l a g }]
s e t f a l s e p a t h t o [ g e t p i n s nocas e c ompa t i bi l i t y mode {| a l t r s t s y n c u q 1 |
a l t e r a r e s e t s y n c h r o n i z e r i n t c h a i n | a c l r }]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu ni os 2 oci br eak :
t he myqs ys c pu ni os 2 oc i br e a k | br e a k r e a dr e g }] t o [ g e t k e e p e r s { myqsys cpu : |
myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
myqs ys cpu j t ag debug modul e t ck : t he myqs ys cpu j t ag debug modul e t ck | s r }]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu ni os 2 oci debug :
t he myqs ys cpu ni os 2 oci debug | r e s e t l a t c h }] t o [ g e t k e e p e r s { myqsys cpu : |
myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
myqs ys cpu j t ag debug modul e t ck : t he myqs ys cpu j t ag debug modul e t ck | s r [ 3 3 ] } ]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu ni os 2 oci debug :
t he myqs ys cpu ni os 2 oci debug | moni t or r e a dy }] t o [ g e t k e e p e r s { myqsys cpu : |
myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
myqs ys cpu j t ag debug modul e t ck : t he myqs ys cpu j t ag debug modul e t ck | s r [ 0 ] } ]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu ni os 2 oci debug :
t he myqs ys cpu ni os 2 oci debug | mo n i t o r e r r o r }] t o [ g e t k e e p e r s { myqsys cpu : |
myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
myqs ys cpu j t ag debug modul e t ck : t he myqs ys cpu j t ag debug modul e t ck | s r [ 3 4 ] } ]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqsys cpu ni os2 oci mem : t he myqsys cpu ni os2 oci mem |
MonDReg}] t o [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu j t ag debug modul e wr apper :
t he myqs ys cpu j t ag debug modul e wr apper | myqs ys cpu j t ag debug modul e t ck :
t he myqs ys cpu j t ag debug modul e t ck | s r }]
s e t f a l s e p a t h from [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci :
t he myqs ys cpu ni os 2 oci | myqs ys cpu j t ag debug modul e wr apper :
t he myqs ys cpu j t ag debug modul e wr apper | myqs ys cpu j t ag debug modul e t ck :
t he myqs ys cpu j t ag debug modul e t ck | s r }] t o [ g e t k e e p e r s { myqsys cpu : |
myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
myqs ys cpu j t ag debug modul e s ys cl k : t he myqs ys cpu j t ag debug modul e s ys cl k | j do
}]
s e t f a l s e p a t h from [ g e t k e e p e r s { s l d hub : | i r f r e g }] t o [ g e t k e e p e r s {
myqsys cpu : | myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu j t ag debug modul e wr apper : t he myqs ys cpu j t ag debug modul e wr apper |
18
myqs ys cpu j t ag debug modul e s ys cl k : t he myqs ys cpu j t ag debug modul e s ys cl k | i r
}]
s e t f a l s e p a t h from [ g e t k e e p e r s { s l d hub : | sl d shadow j sm : shadow j sm | s t a t e [ 1 ] } ]
t o [ g e t k e e p e r s { myqsys cpu : | myqs ys cpu ni os 2 oci : t he myqs ys cpu ni os 2 oci |
myqs ys cpu ni os 2 oci debug : t he myqs ys cpu ni os 2 oci debug | moni t or go }]
#
# Set Mu l t i c y c l e Pat h
#
#
# Set Maximum Del ay
#
#
# Set Minimum Del ay
#
#
# Set I nput Tr a n s i t i o n
#
;

S-ar putea să vă placă și