OpenCores
URL https://opencores.org/ocsvn/pci/pci/trunk

Subversion Repositories pci

[/] [pci/] [tags/] [asyst_3/] [rtl/] [verilog/] [pci_pcir_fifo_control.v] - Diff between revs 77 and 88

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 77 Rev 88
Line 40... Line 40...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.1  2003/01/27 16:49:31  mihad
 
// Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
 
//
// Revision 1.7  2002/11/27 20:36:10  mihad
// Revision 1.7  2002/11/27 20:36:10  mihad
// Changed the code a bit to make it more readable.
// Changed the code a bit to make it more readable.
// Functionality not changed in any way.
// Functionality not changed in any way.
// More robust synchronization in fifos is still pending.
// More robust synchronization in fifos is still pending.
//
//
Line 271... Line 274...
Gray coded read address pointer is synchronized to write clock domain and compared to Gray coded next write address.
Gray coded read address pointer is synchronized to write clock domain and compared to Gray coded next write address.
If they are equal, fifo is full.
If they are equal, fifo is full.
--------------------------------------------------------------------------------------------------------------------------------*/
--------------------------------------------------------------------------------------------------------------------------------*/
wire [(ADDR_LENGTH - 1):0] wclk_sync_rgrey_addr ;
wire [(ADDR_LENGTH - 1):0] wclk_sync_rgrey_addr ;
reg  [(ADDR_LENGTH - 1):0] wclk_rgrey_addr ;
reg  [(ADDR_LENGTH - 1):0] wclk_rgrey_addr ;
synchronizer_flop #(ADDR_LENGTH) i_synchronizer_reg_rgrey_addr
synchronizer_flop #(ADDR_LENGTH, 0) i_synchronizer_reg_rgrey_addr
(
(
    .data_in        (rgrey_addr),
    .data_in        (rgrey_addr),
    .clk_out        (wclock_in),
    .clk_out        (wclock_in),
    .sync_data_out  (wclk_sync_rgrey_addr),
    .sync_data_out  (wclk_sync_rgrey_addr),
    .async_reset    (1'b0)
    .async_reset    (clear)
) ;
) ;
 
 
always@(posedge wclock_in)
always@(posedge wclock_in or posedge clear)
begin
begin
 
    if (clear)
 
        wclk_rgrey_addr <= #`FF_DELAY 0 ;
 
    else
    wclk_rgrey_addr <= #`FF_DELAY wclk_sync_rgrey_addr ;
    wclk_rgrey_addr <= #`FF_DELAY wclk_sync_rgrey_addr ;
end
end
 
 
assign full = (wgrey_next == wclk_rgrey_addr) ;
assign full = (wgrey_next == wclk_rgrey_addr) ;
 
 
Line 294... Line 300...
If they are equal, fifo is empty. Synchronized write pointer is also compared to Gray coded next read address. If these two are
If they are equal, fifo is empty. Synchronized write pointer is also compared to Gray coded next read address. If these two are
equal, fifo is almost empty.
equal, fifo is almost empty.
--------------------------------------------------------------------------------------------------------------------------------*/
--------------------------------------------------------------------------------------------------------------------------------*/
wire [(ADDR_LENGTH - 1):0] rclk_sync_wgrey_addr ;
wire [(ADDR_LENGTH - 1):0] rclk_sync_wgrey_addr ;
reg  [(ADDR_LENGTH - 1):0] rclk_wgrey_addr ;
reg  [(ADDR_LENGTH - 1):0] rclk_wgrey_addr ;
synchronizer_flop #(ADDR_LENGTH) i_synchronizer_reg_wgrey_addr
synchronizer_flop #(ADDR_LENGTH, 0) i_synchronizer_reg_wgrey_addr
(
(
    .data_in        (wgrey_addr),
    .data_in        (wgrey_addr),
    .clk_out        (rclock_in),
    .clk_out        (rclock_in),
    .sync_data_out  (rclk_sync_wgrey_addr),
    .sync_data_out  (rclk_sync_wgrey_addr),
    .async_reset    (1'b0)
    .async_reset    (clear)
) ;
) ;
 
 
always@(posedge rclock_in)
always@(posedge rclock_in or posedge clear)
begin
begin
 
    if (clear)
 
        rclk_wgrey_addr <= #`FF_DELAY 0 ;
 
    else
    rclk_wgrey_addr <= #`FF_DELAY rclk_sync_wgrey_addr ;
    rclk_wgrey_addr <= #`FF_DELAY rclk_sync_wgrey_addr ;
end
end
 
 
assign almost_empty = (rgrey_next == rclk_wgrey_addr) ;
assign almost_empty = (rgrey_next == rclk_wgrey_addr) ;
assign empty        = (rgrey_addr == rclk_wgrey_addr) ;
assign empty        = (rgrey_addr == rclk_wgrey_addr) ;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.