微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请高手指教--怎么实现占空比1:1得三分频电路呢?

请高手指教--怎么实现占空比1:1得三分频电路呢?

时间:10-02 整理:3721RD 点击:
怎么实现占空比1:1得三分频电路呢?

请高手指教--怎么实现占空比1:1得三分频电路呢?
到www.21ic.com.cn的bbs上面收一下

这种频率不可能是触发器输出的,没实际意义。

PLL

这种问题很可笑其实
在实际的电路中其实还是尽量的简单,不要又是正沿,又是负沿的,这样对后面的DFT什么的都不方便,对时序分析也不好。

在QUARTUS 中实现
仅仅只需调用LPM模块中的PLL模块;
如果你英文基础好的话,应该很简单的;
我以前做过,模拟过,是能实现的,而且可以变相,变频。

回复 #1 gonewith00 的帖子
这种paper很多的,去snug找。

用verilog来实现
module div3(clr,clk,clkout);
input clr,clk;
output clkout;
reg clkreg1,clkreg2;
parameter n=5;
reg[n:0] counter1,counter2;

assign clkout=clkreg1||clkreg2;

always @(posedge clk)
if(clr==1) begin clkreg1=0;counter1=0;end
else begin  if(counter1==n-1) begin counter1=0;clkreg1=~clkreg1;end
            else if(counter1==(n-1)/2) begin counter1=counter1+1;clkreg1=~clkreg1;end
            else begin counter1=counter1+1;end
     end
always @(negedge clk)
if(clr==1) begin clkreg2=0;counter2=0;end
else begin  if(counter2==n-1) begin counter2=0;clkreg2=~clkreg2;end
            else if(counter2==(n-1)/2) begin counter2=counter2+1;clkreg2=~clkreg2;end
            else begin counter2=counter2+1;end
     end
endmodule

多谢,我也需要,嘿嘿

如果用hdl做的话,必定会上下沿混用,不好实现

前面给的这一段程序貌似不对哈!仿出来是六分频的!

奇数分频,一般不是用FF来实现,可以用FPGA内部的一些时钟资源来实现,如xilinx的DCM

上述程序,个人觉得是5分频,但是占空比还是不对,(没仿过哦)
counter = (n-1)/2,个人觉得应改为counter = (n/2-1),占空比应为50%
或者
输出时钟由两者输出相与也可得到50%的时钟,只是相比于输入时钟,时钟沿没有对齐(未考虑延迟情况下)

上述结果应该不对,
yrr的代码应该是正确的

Always @(posedge clk)
If (clr == 1) counter <= 0;
Else If (counter == n-1) counter <=0;
Else counter <= counter + 1;
Always @(posedge clk)
If (clr == 1) clk_reg1 <= 0;
Else if (counter == n-1) clk_reg1 <= ~clk_reg1;
Else if (counter == (n-1)/2) clk_reg1 <= ~clk_reg1;
Else clk_reg1 <= clk_reg1;
Always @(negedge clk)
If (clr == 1) clk_reg2 <= 0;
Else clk_reg2 <= clk_reg1;
Clk_out = clk_reg1 || clk_reg2;
此code如何?存在什么问题,帮忙指点

虽然以前弄过  不过不知道这个有没有实际意义?

对时钟的上升沿和下降沿分别进行计数,在中间判别高低电平的转化即可

对!这个题用来脑筋急转弯可以!
真正电路一般不会这样用!

LZ是指ASIC中有纯数字实现?
正负各1.5T,所以用一个负沿的DFF就可以解决,
但是有很多细节需要注意,
不然后端比较麻烦

个人想法,
assign clk_n = ~clk;
Always @(posdege clk_n)
If (clr == 1) clk_reg2 <= 0;
Else clk_reg2 <= clk_reg1;
这样就只用了上升沿。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top