📄 pci_sync_module.v
字号:
////////////////////////////////////////////////////////////////////////// //////// File name "sync_module.v" //////// //////// This file is part of the "PCI bridge" project //////// http://www.opencores.org/cores/pci/ //////// //////// Author(s): //////// - Tadej Markovic, tadej@opencores.org //////// //////// All additional information is avaliable in the README.txt //////// file. //////// //////// ////////////////////////////////////////////////////////////////////////////// //////// Copyright (C) 2000 Tadej Markovic, tadej@opencores.org //////// //////// This source file may be used and distributed without //////// restriction provided that this copyright statement is not //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer. //////// //////// This source file is free software; you can redistribute it //////// and/or modify it under the terms of the GNU Lesser General //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any //////// later version. //////// //////// This source is distributed in the hope that it will be //////// useful, but WITHOUT ANY WARRANTY; without even the implied //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //////// PURPOSE. See the GNU Lesser General Public License for more //////// details. //////// //////// You should have received a copy of the GNU Lesser General //////// Public License along with this source; if not, download it //////// from http://www.opencores.org/lgpl.shtml //////// ////////////////////////////////////////////////////////////////////////////// CVS Revision History//// $Log: pci_sync_module.v,v $// Revision 1.3 2003/08/14 13:06:03 simons// synchronizer_flop replaced with pci_synchronizer_flop, artisan ram instance updated.//// Revision 1.2 2003/03/26 13:16:18 mihad// Added the reset value parameter to the synchronizer flop module.// Added resets to all synchronizer flop instances.// Repaired initial sync value in fifos.//// Revision 1.1 2003/01/27 16:49:31 mihad// Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.//// Revision 1.1 2002/02/01 14:43:31 mihad// *** empty log message ***//////// synopsys translate_off`include "timescale.v"// synopsys translate_onmodule pci_sync_module( set_clk_in, delete_clk_in, reset_in, delete_set_out, block_set_out, delete_in);// system inputs from two clock domainsinput set_clk_in;input delete_clk_in;input reset_in;// control outputsoutput delete_set_out;output block_set_out;// control inputinput delete_in;// internal signalsreg del_bit;wire meta_del_bit;reg sync_del_bit;reg delayed_del_bit;wire meta_bckp_bit;reg sync_bckp_bit;reg delayed_bckp_bit;// DELETE_IN input FF - when set must be active, until it is sinchronously clearedalways@(posedge delete_clk_in or posedge reset_in)begin if (reset_in) del_bit <= 1'b0; else begin if (!delayed_bckp_bit && sync_bckp_bit) del_bit <= 1'b0; else if (delete_in) del_bit <= 1'b1; endendassign block_set_out = del_bit;// interemediate stage to clk synchronization flip - flops - this ones are prone to metastabilitypci_synchronizer_flop #(1, 0) delete_sync( .data_in (del_bit), .clk_out (set_clk_in), .sync_data_out (meta_del_bit), .async_reset (reset_in)) ;// Final synchronization of del_bit signal to the set clock domainalways@(posedge set_clk_in or posedge reset_in)begin if (reset_in) sync_del_bit <= 1'b0; else sync_del_bit <= meta_del_bit;end// Delayed sync_del_bit signal for one clock period pulse generationalways@(posedge set_clk_in or posedge reset_in)begin if (reset_in) delayed_del_bit <= 1'b0; else delayed_del_bit <= sync_del_bit;endassign delete_set_out = !delayed_del_bit && sync_del_bit;// interemediate stage to clk synchronization flip - flops - this ones are prone to metastabilitypci_synchronizer_flop #(1, 0) clear_delete_sync( .data_in (sync_del_bit), .clk_out (delete_clk_in), .sync_data_out (meta_bckp_bit), .async_reset (reset_in)) ;// Final synchronization of sync_del_bit signal to the delete clock domainalways@(posedge delete_clk_in or posedge reset_in)begin if (reset_in) sync_bckp_bit <= 1'b0; else sync_bckp_bit <= meta_bckp_bit;end// Delayed sync_bckp_bit signal for one clock period pulse generationalways@(posedge delete_clk_in or posedge reset_in)begin if (reset_in) delayed_bckp_bit <= 1'b0; else delayed_bckp_bit <= sync_bckp_bit;endendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -