赛灵思
直播中

李林

7年用户 1186经验值
私信 关注
[问答]

如何获得Spartan 3E500生成4相时钟的信号?

嗨,
我正在尝试使用Spartan 3E500生成一个4相数字时钟(每个占空比为25%)。
DCM提供完美的相移,但无法调整占空比。
无论如何我可以获得如下的时钟信号?(只要时钟与时钟之间没有重叠,就会很好)。
谢谢!

回帖(8)

杨玲

2019-9-11 07:33:03
你没有提到你需要的频率。
如果它不是太高,你可以从4x输入时钟开始,然后使用结构生成带触发器的4个相位。
我的问题是你想用这个时钟做什么。
你打算在FPGA里面使用它吗?
如果是这样,我怀疑你正在尝试做一些异步的事情而且不太可能在FPGA中运行良好。
如果它要走出FPGA,你也可以使用DDR输出寄存器。
假设2x时钟占空比为50%,那么你只需要一个2x时钟来驱动DDR寄存器。
- Gabor
举报

吴民峰

2019-9-11 07:49:08
嗨Gabor,
感谢您的回复。
我的项目应该在8MHz到32MHz之间运行,如果它不能达到那么高,则频率较低。
我之前尝试过4x时钟和一个触发器,但它给了我可怕的时钟输出。
我的代码部分如下,我使用的是由Digilent Inc.制造的Nexys 2板。
// reg [1:0] qcounter = 0; // reg q1 = 0; // reg q2 = 0; // reg q3 = 0; // reg q4 = 0;
//总是@(posedge clk_source)//开始// case(qcounter)// 1:开始// q2 // q1 //结束// 2:开始// q3 // q2 //结束// 3:开始
// q4 // q3 //结束//默认:开始// q1 // q4 //结束//结束// qcounter //结束
谢谢!
举报

杨玲

2019-9-11 08:01:58
您发布的代码中没有任何内容表明您为什么会得到“可怕的”时钟输出。
另一方面,真正的问题是时钟的发展方向。
它是在FPGA外部还是内部使用的。
如果在外面,那么我唯一可以建议的是将所有输出触发器放在IOB中。
就像是:
reg [1:0] qcounter = 0;(* IOB =“FORCE”*)reg q1 = 0;(* IOB =“FORCE”*)reg q2 = 0;(* IOB =“FORCE”*)reg q3 =
0;(* IOB =“FORCE”*)reg q4 = 0;
等等
如果你在FPGA中使用它,那么我需要更好地了解它是如何被使用的。
通常我不会建议将这种时钟用于内部结构。
此外,如果您要求四个阶段不重叠,那么这并不容易。
由于寄存器都位于IOB中,重叠应该在100 ps或更小的数量级,但不能保证为零。
在FPGA内部,您将受到触发器和时钟缓冲器之间路由延迟的影响,因此除非您将脉冲宽度设置得更小,否则很难保持它们不重叠。
所以我想我需要更多地了解你的应用程序,以提出更好的建议。
- Gabor
举报

吴民峰

2019-9-11 08:14:18
嗨Gabor,
我正在尝试使用FPGA来模拟一个简单的微处理器的功能,这就是为什么4相时钟非常重要,以保持应用程序正常工作。
我想在这种情况下,我正在使用FPGA内部的时钟。
我一直在尝试几种不同的方法制作时钟,但它们都没有令人满意的工作方式。
有一种方法我认为应该完美地工作,如下所述:
我使用一个DCM1以所需频率生成clk_out信号,然后与另一个DCM2级联(使用DCM1中的clk_out作为CLKIN),其中我生成每个占空比为50%的4相时钟信号。
如果我将这4个阶段称为p1_clk,p2_clk,p3_clk,p4_clk,那么我执行以下操作来对时钟信号进行门控:
分配q1_clk = p4_clk&
p1_clk;赋值q2_clk = p1_clk&
p2_clk;赋值q3_clk = p2_clk&
p3_clk;赋值q4_clk = p3_clk&
p4_clk;
在这种情况下,我相信我可以获得25%的占空比,但是当我检查来自逻辑分析仪的信号输出时,一切都失真了,我不知道为什么信号表现得那样......
举报

更多回帖

发帖
×
20
完善资料,
赚取积分