Return to Support Page
 homesearchagentssupportask xilinxmap

Answers Database


SYNPLIFY: How to use OSC5, OSC52, and CK_DIV cells for the XC5200 in HDL?


Record #3584

Problem Title:
SYNPLIFY: How to use OSC5, OSC52, and CK_DIV cells for the XC5200 in
HDL?



Problem Description:
Keywords: osc5, osc52, ck_div, synplify

Urgency: Standard

General Description: How to use OSC5, OSC52, and CLK_DIV components
for the XC5200 in HDL?

The OSC5, OSC52, and CK_DIV cells require the DIVIDE1_BY or the
DIVIDE2_BY attribute to specify appropriate clock division ratios.
You must use the DIVIDE1_BY attribute with the OSC1 output and the
DIVIDE2_BY attribute with the OSC2 output.  The OSC1 output facilitates
division ratios of 4, 16, 64, or 256.  The OSC2 output facilitates
division ratios of 2, 8, 32, 128, 1024, 4096, 16384, or 65536.	The
CK_DIV is not available if the OSC5 element is used, and vice-versa.


Solution 1:

module osc5_ex (A, Q);
input  [1:0] A;
output [1:0] Q;

reg [1:0] Q;
wire clk1_in, clk1_out;
wire clk2_in, clk2_out;

BUFG U0 (.I (clk1_in), .O (clk1_out));
BUFG U1 (.I (clk2_in), .O (clk2_out));
OSC5 U2 (.OSC1 (clk1_in), .OSC2 (clk2_in));

always @(posedge clk1_out)
begin
   Q[0] <= A[0];
end

always @(posedge clk2_out)
begin
   Q[1] <= A[1];
end

endmodule

module OSC5 (OSC1, OSC2) /* synthesis black_box
   xc_props="DIVIDE1_BY=4,DIVIDE2_BY=2" */;
output OSC1;
output OSC2;

endmodule

module BUFG (O, I) /* synthesis black_box */;
output	 O;
input	 I;

endmodule



Solution 2:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity osc5_ex is
    port (
	  A : in STD_LOGIC_VECTOR (1 downto 0);
	  Q : out STD_LOGIC_VECTOR (1 downto 0)
	);
end osc5_ex;

architecture xilinx of osc5_ex is

    attribute black_box : boolean;
    attribute xc_props: string;

    component OSC5
	port (
	      OSC1, OSC2 : out STD_LOGIC);
    end component;
    attribute xc_props of OSC5 : component is "DIVIDE1_BY=4,DIVIDE2_BY=2";
    attribute black_box of OSC5 : component is true;

    component BUFG
	port(
	     O : out STD_LOGIC;
	     I : in  STD_LOGIC);
    end component;
    attribute black_box of BUFG : component is true;

signal clk1_in, clk1_out : STD_LOGIC;
signal clk2_in, clk2_out : STD_LOGIC;

begin

U0: BUFG port map (I => clk1_in, O => clk1_out);
U1: BUFG port map (I => clk2_in, O => clk2_out);
U2: OSC5 port map (OSC1 => clk1_in, OSC2 => clk2_in);

process (clk1_out)
begin
   if (clk1_out'event and clk1_out = '1') then
       Q(0) <= A(0);
   end if;
end process;

process (clk2_out)
begin
   if (clk2_out'event and clk2_out = '1') then
       Q(1) <= A(1);
   end if;
end process;

end xilinx;



End of Record #3584

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Xilinx Expert Journals!

© 1998 Xilinx, Inc. All rights reserved
Trademarks and Patents