ecse 431 - vga controller on fpga board - report
TRANSCRIPT
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
1/18
1
ECSE 431 - Final Project ReportVincent 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.
I I . DESIGN I MPLEMENTATION
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 fills 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 framesper second.
A. New Register File
The register file version that was used for the NIOS project
had to be modified 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
file 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 significant
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
field or the end of a video field. The start of the video field
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 field was signaled by
GACTIVE going low, representing the end of valid video for
a field.
For the purpose of the present project, the end of field
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
file 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 bymore than one process. The fields of several registers were
mapped as conduit end for the Qsys system. These fields
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 file was able to detect the
rising or falling edges of GACTIVE was by receiving the
current status of GACTIVE from the grab interface.
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
2/18
2
B. New QSYS system
Other components were changed and/or added to the
previously built QSYS system. Apart from the modified
register file, 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 bywriting into the control registers located in the register file.
The fields 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 first field of the first frame. Therefore:
GCTRLs fields must be set as such:
GMODE signals the type of the field 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 field 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
fields 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 fields. 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 n u m b er == 1 ) {/ / h a n d l e i n t e r r u p t s e n t
/ / wh en t h e g r a b f i n i s h e d
/ / w r i t i n g t h e f i r s t f i e l d
/ / i n t o me mo ry
f i el d n u mb e r = 2 ;
} e l s e {/ / h a n d l e i n t e r r u p t s e n t
/ / wh en t h e g r a b f i n i s h e d
/ / w r i t i n g t h e s e c o n d f i e l d
/ / i n t o me mo ry
f i el d n u mb e r = 1 ;
}
The above implementation was needed in order to dis-
tinguish which fields interrupt is being serviced. The
field number variable is a global variable that changes its
value in both branches of the if-statement, according to which
field is being serviced.
Furthermore, the switch to a new frame had to be incor-
porated if the second field sent the interrupt. This was done
as such:
f r a m e n u m b e r + + ;
i f ( f r am e n u mb e r == 3 ) {f ra me n um be r = 1 ;
/ / ma ke c h a n g e s t o o v e r w r i t e
/ / f i r s t f r a m e i n me mo ry
} e l s e {/ / ma ke c h a n g e s t o w r i t e t h e
/ / s e c o n d c o n s e c u t i v e f r a m e
/ / i n t o me mo ry
}
Based on which field sent the interrupt, the registers (and
their fields) 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 field of each frame
Get set to previous start of frame GFSTART +
length (in bytes) of the frame that just finished
being written into memory. GMODE field 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 fields and even fields was done correctly.
For the purpose of the simulation we used the providedvideo 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
file: The communication between the grab and the register
file 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 file by the C application in Eclipse;
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
3/18
3
very soon after that, the data is communicated to the grab
component through the register files 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 fields
The following simulation snippet shows how new values
are set in the interrupt service routine for the grab interface
when switching between fields. (i.e. GMODE changes from
2 to 3, meaning change from grabbing next odd field to
grabbing the next even field):
Fig. 3. Field Switch
In the next test, we show how the grab receives the correct
information about the next field at the end of each field (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 first line to be written into address 0x00,
the second one into address 256100x100 (the address is0 + 256, meaning the starting address of the first line inthe second field has an offset of 256 one line from the
previous fields starting address. This is done in order to de-
interlace the frame). Therefore, when done with the first field
of the first frame, we expect to have4GFSTART= 25610 =00100.
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 field). This leads to:
new GFSTART= old GFSTART+ GLPITCH4.
So, the expected value of GFSTART at the end of the
first frame is 0 + 512 4 = 204810 = 0 0800. This isthe 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 fields (= 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 wasincorporated.
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 finite
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 locatedin 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 flip flops 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 figure 6.
The finite state machine of the DMA controller is shown
on figure 7. The conditions in the state machine are tested
at every clock cycle of the 100 MHz PLL.
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
4/18
4
Fig. 7. FSM diagram of the VGA controller
In simulation, the FSM was shown to function correctly,
as seen on figure 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 first checks if the line
has been fully transferred from the memory. Otherwize itasserts 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 finished. 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. Verification
To verify the proper operation of the DMA engine, we
tested that it first 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 modification 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 flagged at the beginning of
every frame. This flag would then be sensed by the DMAcontroller, which uses the flag 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 modifications except that
the 16 bit chunks of data were arriving with the Y component
first instead of the Cb/Cr component.
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
5/18
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 first 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 modified (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 files 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 andy gradient of the luminance for each pixel, and summingthe 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 officially 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-
nificantly.
IV. POSSIBLE I MPROVEMENTS
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. Inaddition, in order to exploit the efficiencies of using a
monochrome format, the architecture of our VGA controller
has to be modified 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 videodecoder 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 aframe 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 refine our skills in
FPGA design using CAD tools.
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
6/18
6
VI . APPENDIX
A. Global Block diagram of the entire design
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
7/18
7
B. Frame shown with frame counter
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
8/18
8
C. ModelSim simulation of register file, grab interface and memory
D. ModelSim simulation the memory storing a burst of data
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
9/18
9
E. Synthesis report summary
F. Critical paths for the 27 MHz clock
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
10/18
10
G. Critical paths for the 100 MHz clock
H. Reported maximum frequencies
I. Processing Code
1) Snippet of the convolution code: .
v o i d e d g e d e t e c ti o n ( )
{f o r( i n t y = 0 ; y < h ; y + +) {
f o r( i n t x = 0 ; x < w ; x + +){
a l t u 1 6 e d g e x = 0 , e d g e y = 0 , g ra dx = 0 , g ra dy = 0 , y = 0 ;
a lt u 8 r e s u l t = 0 ;
f o r( i n t a = 0 ; a < H e i g h t ; a + + ){
f o r( i n t b = 0 ; b < W i d th ; b + + ){i n t
c = ( x Wi dth / 2 + b + wd ) % wd ;i n t d = ( y H ei gh t / 2 + a + h t ) % h t ;
e d g e x = ( s r c f r a m e + 1 440 i ma ge Y + 2 c ) ; / / c a l c u l a t i n g p i x e l a d dr e ss
e d g e y = ( s r c f r a m e + 1 440 i ma ge Y + 2 d ) ;
/ / cb += im ag e [ im ag eX ] [ i mageY ] . cb f i l t e r [ a] [ b ] ;
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
11/18
11
/ / c r += im ag e [ im ag eX ] [ i mageY ] . c r f i l t e r [ a] [ b ] ;
e d g e x + = e d g e x f i l t e r 1 [ a ] [ b ] ;g r a dy += g r a dy f i l t e r 2 [ a ][ b ] ;y = g ra d x + g ra d y ;
}
}
r e s u l t = min ( max ( f a c t o r y + b ia s , 0 ) , 2 55 ) ;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 , 25 5) ;
o f f s e t += 2 ;
}IOWR 32DIRECT( REGFILE BASE , DMAFSTART, 69 12 00 ) ;
}r e t u r n n u l l ;
}
2) Snippet of the write() function: .
i f ( f i e l d n u m b er == 1 ) {
/ / s e t t h e p r o p e r v a l u e s f o r pr og ram m ing NIO S f o r t h e s e c o n d f i e l d w i t h i n
f r a m e
i f ( f r am e n u mb e r == 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 am e n u mb e r == 2 ) {g f s t a r t t = ( l i n e n m b r + 1 ) g l p i t c h v a l / 2 ;
}f i el d n u mb e r = 0 ;
IOWR 32DIRECT( REGFILE BASE , GFSTART, g f s t a r t t ) ;
/ / GINT : c l e a r t h e 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, ( en co lo r | g n e f | en GSSHT) ) ;
} e l s e {/ / s e t t h e p r o p e r v a l u e s f o r pr og ram m ing t h e NIO S f o r t h e s t a r t o f a n o t h e r
f r a m e !
/ / pro gram t h e DMA t o r e a d f r o m t h e s t a b l e im ag e t h a t h a s j u s t f i n i s h e d
b e in g w r i t t e n i n t o memory
/ i f t h e i n cr e me n te d f ra me number s ho ws t h a t a t h i r d f ra me wo ul d h av e t o
b e w r i t t e n t o memory t h en i t means t h a t we n e e d t o go b a ck t o 0 , i . e . s t a r t w r i t i n g a t l o c a t i o n 0 i n memory a g ai n
/i f ( f r am e n u mb e r == 1 ) {
g f s t a r t t = g l p i t c h v a l / 2 l i n e n m b r ;d m a s t a r t a d d r = n u l v a l ;
f r am e c o un t b a se a d dr = 4 380 + 2 g l p i t c h v a l ;f r a me r a t e b a s e a d d r = 4380 + 10 g l p i t c h v a l ;
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
12/18
12
}i f ( f r am e n u mb e r == 2 ) {
g f s t a r t t = n u l v a l ;
d m a s t a r t a d d r = g l p i t c h v a l / 2 l i n e n m b r ;f r am e c o un t b a se a d dr = 4 380 + 2 g l p i t c h v a l + g l p i t c h v a l / 2
l i n e n m b r ;
f r a me r a t e b a s e a d d r = 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 n e n m b r ;}
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, ( en co lo r | g n o f | en GSSHT) ) ;
i n t t e mp , t e m p 2 ;
i f ( d i s p la y f r a m e c o u n te r == 1 ) {n r o f d i g i t s = g e t n u m be r o f d i g i ts ( f r am e c o un t er ) ;
f o r ( i i = n r o f d i g i t s ; i i >= 1 ; i i) {temp = f r am e c o un t b a se a d dr + 3 0 ( n r o f d i g i t s i i ) ;
f o r ( i = 0 ; i < 1 2 ; i + +) {f o r ( j = 0 ; j < 1 2 ; j + +) {
i f ( c o u n t d a t a [ ( ( f r a m e c o u n t e r % p ow er ( 1 0 ,
i i ) ) / p ow er ( 1 0 , i i 1) )144 + i 12 + j] == 1 ) {
IOWR 16DIRECT (SDRAM CONTROLLER BASE
, t em p+ 1 44 0i + 2j , 6 0 2 8 8 ) ;}
}}
}}
IOWR 32DIRECT( REGFILE BASE, DMAFSTART, d m a s t a r t a d d r ) ;
f r a m e n u m b e r + + ;
f i el d n u mb e r = 1 ;
i f ( f r am e n u mb e r == 3 ) {f ra me n um be r = 1 ;
}
f r a m e c o u n t e r + +;
}
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
13/18
13
J. Constraint file: DE2 BaseProject.out.sdc
# # G e n e r a t e d SDC f i l e D E 2 B a s e P r o j ec t . o u t . s d c
# # C o p y ri g h t ( C) 1991 2013 A l t e r a C o r p o r a t i on# # Your u se o f A l t e r a C o rp o ra t io n s d e s ig n t o ol s , l o g i c f u n c t i o n s
# # an d o t h er s o f t wa r e an d t o o l s , an d i t s AMPP p a r t n e r l o g i c
# # f u n c ti o n s , an d a ny o u t p u t f i l e s f ro m a ny o f t h e f o r e g o i n g# # ( i n c l u d i n g d e v i ce p ro gr am mi ng o r s i m u l a t i o n f i l e s ) , an d any
# # a s s o c i a t e d d o cu me n ta t io n o r i n fo 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 h e t er ms an d c o n d i t i o n s o f t h e A l t e r a Pr og ra m L i c e ns e
# # S u b s c r i p t i o n A gr ee me nt , A l t e r a MegaCore F u n c ti o n L i c e ns e
# # Ag r e e me n t , o r o t h e r a p p l i c a b l e l i c e n s e a gr ee me nt , i n c lu d i ng ,
# # w it h o ut l i m i t a t i o n , t h a t y o u r u s e i s f o r t h e s o l e p ur po se o f
# # p ro gr am mi ng l o g i c d e v i c e s m a n uf a c tu r ed by A l t e r a an d s o l d by
# # A l t er a o r 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 . P l e a s e r e f e r t o t h e
# # a p p l i c a b l e a gr ee me nt f o r f u r t h e r d e t a i l s .
# # VENDOR Al te ra
# # PROGRAM Qu ar tu s I I # # VERSION V e r s i o n 1 3 . 0 . 0 B u i l d 1 56 0 4 / 2 4 / 2 01 3 S J F u l l V e r s i on
# # DATE Tue Dec 03 1 6 : 0 3 : 52 2 01 3
# #
# # DEVICE EP2C35F672C6
# #
# # Time I n f o r m a t i o n
#
s e t t i me f o rm a t u n i t n s d e c im a l p l a c e s 3
# # C r e a t e C l oc k
#
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 } p e r i o d 1 00 . 00 0 waveform { 0 . 00 0 5 0 . 0 00 }[ 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 { C l oc k 2 7 } p e r i o d 3 7 .0 3 7 waveform { 0 . 0 0 0 1 8 .5 1 8 } [ g e t p o r t s
{CLOCK 27} ]c r e a t e c l o c k name {CLOCK 50} p e r i o d 2 0 .0 0 0 waveform { 0 . 0 0 0 1 0 .0 0 0 } [ g e t p o r t s{CLOCK 50} ]
# # C r e a t e G e n er a te d C lo ck
#
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
14/18
14
c r e a te g e n e ra t e d c l o c k name { c l k 1 0 0 } s o ur c e [ g e t p o r t s {CLOCK 50} ] m u lt i pl y b y 2m a s t e r c l o c k {CLOCK 50} [ g e t n e t s {m y p l l i n s t| a l t p ll c o m p on e n t| c l k 0} ]
c r e a te g e n e ra t e d c l o c k name { c l k1 0 0 d e l } s o u r c e [ g e t p o r t s {CLOCK 50} ] m u lt i pl y b y 2 o f f s e t 3.000 m a s t e r c l o c k {CLOCK 50} [ g e t p i n s { m y p l l i n s t|a l t p ll c o m p on e n t| p l l | c l k [ 1 ] } ]
#
# S e t C lo c k L a t en c y
#
# # S et C lo ck U n c e r t a i n t y
#
#
# S e t I n p ut D el ay#
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 0 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 0 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 1 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 1 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 2 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 2 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 3 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 3 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 4 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 4 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 5 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 5 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 6 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 6 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 7 ] } ]
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
15/18
15
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 7 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {DRAM DQ[ 8 ] } ]
s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 8 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ g e t p o r t s {
DRAM DQ[ 9 ] } ]s e t i n p u t d e l a y a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {DRAM DQ[ 9 ] } ]
s e t i n p u t d e l a y a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ 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 a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ 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 a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ 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 a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ 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 a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ 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 a d d d e la y max c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 5 . 4 0 0 [ 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 a d d d e la y mi n c l oc k [ g e t c l o c k s { c l k 1 0 0} ] 1 . 0 0 0 [ g e t p o r t s {
DRAM DQ[ 1 5 ] } ]
# # S e t O u t pu t D el ay
#
# # S e t C lo c k G ro up s
#
s e t c l oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 } ]
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
16/18
16
s e t c l oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 oc k g r o u p s a s y n c h r o n o u s g ro up [ 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 } ]
# # Se t F a l se P at h
#
s e t f a l s e p a t h fro m [ g e t c l o c k s { C l oc k 2 7} ] t o [ g e t c l o c k s { c l k 1 0 0} ]s e t f a l s e p a t h fro m [ g e t c l o c k s { c l k 1 0 0} ] t o [ g e t c l o c k s { C l oc k 2 7} ]s e t f a l s e p a t h t o [ g e t k e e p er s { a l t e r a s t d s y n c h r o n i z e r : | d i n s 1} ]s e t f a l s e p a t h fro m [ g e t r e g i s t e r s { m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r
[ 1 ] m yq sy s : m y q s y s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 2 ] m yq s ys : m y q s y s i n s t | r e g f i l e: r e g f i l e | g f s t a r t r [ 3 ] m yq s ys : m y q s y s i n s 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 :m y q sy s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 5 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |g f s t a r t r [ 6 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [ 7 ] m yq s ys : m y q s y s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 8 ] m yq sy s : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [ 9]m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [ 1 0 ] m y qs y s : m y q s y s i n s t | r e g f i l e :r e g f i l e | g f s t a r t r [ 1 1 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [1 2] myqsys :m y q sy s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 1 3 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |g f s t a r t r [ 1 4 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [1 5] myqsys :m y q sy s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 1 6 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
17/18
17
g f s t a r t r [ 1 7 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [1 8] myqsys :m y q sy s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 1 9 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |g f s t a r t r [ 2 0 ] m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e | g f s t a r t r [2 1] myqsys :m y q sy s i n s t| r e g f i l e : r e g f i l e | g f s t a r t r [ 22 ] } ]
s e t f a l s e p a t h fro m [ g e t r e g i s t e r s { m yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |g fm t rm yq s ys : m y q s y s i n s t | r e g f i l e : r e g f i l e |g mo de r [ 0 ] m yq sy s : m y q s y s i n s t| r e g f i l e :r e g f i l e | gm o de r [ 1 ] } ]
s e t f a l s e p a t h fro m [ g e t r e g i s t e r s { m yq s ys : m y q s y s i n s 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 m yq s ys : m y q s y s i n s 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 m y q sy s : m y q s y s i n s 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 n o c a s e c o m p a t ib i l i t y m o d e { | 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 f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y qs y s c p u n i os 2 o c i b r e ak :t h e m y q s ys c p u n i o s 2 o c i b r ea k | b r e ak r e a dr e g } ] t o [ g e t k e e p er s { m y q s y s c p u : |m y qs y s c p u n i os 2 o c i : t h e m y q sy s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|m y qs y s c p u j ta g d e bu g m o du l e t c k : t h e m y qs y s c p u j t ag d e bu g m o du l e t c k | s r } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :
t he m yq s ys c pu n io s 2 o ci| m y q sy s c p u n i o s2 o c i d e b ug :t h e m y q s ys c p u n i o s 2 o c i d e bu g| r e s e t l a t c h} ] t o [ g e t k e e p er s { m y q s y s c p u : |m y qs y s c p u n i os 2 o c i : t h e m y q sy s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|m y qs y s c p u j ta g d e bu g m o du l e t c k : t h e m y qs y s c p u j t ag d e bu g m o du l e t c k | s r [ 3 3 ] } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y q sy s c p u n i o s2 o c i d e b ug :t h e m y q s ys c p u n i o s 2 o c i d e bu g| m o n it o r r e a d y} ] t o [ g e t k e e p er s { m y q s y s c p u : |m y qs y s c p u n i os 2 o c i : t h e m y q sy s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|m y qs y s c p u j ta g d e bu g m o du l e t c k : t h e m y qs y s c p u j t ag d e bu g m o du l e t c k | s r [ 0 ] } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y q sy s c p u n i o s2 o c i d e b ug :
t h e m y q s ys c p u n i o s 2 o c i d e bu g| m o n i t or e r r o r} ] t o [ g e t k e e p er s { m y q s y s c p u : |m y qs y s c p u n i os 2 o c i : t h e m y q sy s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|m y qs y s c p u j ta g d e bu g m o du l e t c k : t h e m y qs y s c p u j t ag d e bu g m o du l e t c k | s r [ 3 4 ] } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y qs y s c p u n i os 2 o c im e m : t h e m y q sy s c p u n i o s2 o c i me m| MonDReg } ] t o [ g e t k e e p er s { m y q s y s c p u : | m y q sy s c p u n i o s 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y q sy s c p u j t ag d e b ug m o d ul e w r a pp e r :t h e m y qs y s c p u j t ag d e bu g m o du l e w r a p pe r| m y qs y s c p u j t ag d e bu g m od u le t c k :t h e m y q s ys c p u j t a g d e bu g m o du l e t c k | s r } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i :t he m yq s ys c pu n io s 2 o ci| m y q sy s c p u j t ag d e b ug m o d ul e w r a pp e r :t h e m y qs y s c p u j t ag d e bu g m o du l e w r a p pe r| m y qs y s c p u j t ag d e bu g m od u le t c k :t h e m y q s ys c p u j t a g d e bu g m o du l e t c k | s r } ] t o [ g e t k e e p er s { m y q s y s c p u : |m y qs y s c p u n i os 2 o c i : t h e m y q sy s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|m y qs y s c p u j t ag d e bu g m o du l e s y sc l k : t h e m y qs y s c p u j t ag d e b ug m o du l e s y s cl k | j d o } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { s l d h u b : | i r f r e g } ] t o [ g e t k e e p er s {m y q s y s c p u : | m y qs y s c p u n i os 2 o c i : t h e m y qs y s c p u n i o s2 o c i|m y q sy s c p u j t a g d e b ug m o du l e w r a pp e r : t h e m y q sy s c p u j t a g d e b u g m o d ul e w r a p pe r|
-
7/22/2019 ECSE 431 - VGA controller on FPGA Board - Report
18/18
18
m y qs y s c p u j t ag d e bu g m o du l e s y sc l k : t h e m y qs y s c p u j t ag d e b ug m o du l e s y s cl k | i r } ]
s e t f a l s e p a t h f ro m [ g e t k e e p e r s { s l d h u b : | sl d s h a d o w j s m : s h ad o w j sm| s t a t e [ 1 ] } ] t o [ g e t k e e p er s { m y q s y s c p u : | m y qs y s c p u n i os 2 o c i : t h e m y qs y s c p u n i os 2 o c i|m y qs y s c p u n i os 2 o c i d e bu g : t h e m y qs y s c p u n i os 2 o c i d e bu g| m o n it o r g o} ]
#
# S et M u l ti c y c le P at h
#
# # S et Maximum Delay
#
#
# S e t M ini mum De l a y#
# # S e t I n p u t T r a n s i t i o n
#
;