这个问题其实很奇怪,这个你是用Altera的思维来思考这个问题。其实这根本就不应该是一个问题。
我们抛开什么Altera、Xilinx还有神马的公司,你觉得源同步的设计时钟和数据应该怎么同步?
他们不应该是输出的时候就是同步的吗?还需要我们来搞东搞西的。
其实解决方式很简单,你输出数据的时候,应该要经过一个FF,无论ASIC或者FPGA都应该这样。
你为了同步,时钟经过一个同样的FF就可以了
对于Xilinx的器件,这个是这样实现的:
(* IOB = "FORCE" *)
always @(posedge clk)
dataout<=data;
ODDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
.INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1
.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
) ODDR_d (
.Q(clkout), // 1-bit DDR output
.C(clk), // 1-bit clock input
.CE(1), // 1-bit clock enable input
.D1(0), // 1-bit data input (positive edge)
.D2(1), // 1-bit data input (negative edge)
.R(0), // 1-bit reset
.S(0) // 1-bit set
);
dataout和clkout接到端口上
|