在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: guanfree

最近小作:Verilog版的dpll

[复制链接]
 楼主| 发表于 2003-11-20 17:08:32 | 显示全部楼层

最近小作:Verilog版的dpll

加减脉冲计数器源代码如下:
module IDCnt(clk,rst,INC,DEC,serout);
    input clk,rst,INC,DEC;
output serout;
/////2分频计数器,其输出是相差为pi,占空比为50%的方波
    reg div2;
wire cdiv2;
always@(posedge rst or negedge clk)
begin
   if(rst)  div2<=0;
   else     div2<=~div2;
end
assign cdiv2=~div2;

////INC与DEC的边沿检测
    reg [1:0] INC_det,DEC_det;
wire INC_edge,DEC_edge;
    wire  ser1,ser2;
assign ser1=div2&clk;
assign ser2=cdiv2&clk;
always@(posedge rst or negedge ser1)
begin
  if(rst)   INC_det[1]<=0;
  else      INC_det[1]<=INC;
end
always@(posedge rst or negedge ser1)
begin
  if(rst)   INC_det[0]<=0;
  else      INC_det[0]<=INC_det[1];
end
assign INC_edge=~INC_det[1]&INC_det[0];

always@(posedge rst or posedge ser2)
begin
  if(rst)   DEC_det[1]<=0;
  else      DEC_det[1]<=DEC;
end
always@(posedge rst or posedge ser2)
begin
  if(rst)   DEC_det[0]<=0;
  else      DEC_det[0]<=DEC_det[1];
end
assign DEC_edge=~DEC_det[1]&DEC_det[0];
//////输出的数据来源与状态
    reg INC_flag;
reg DEC_flag;
always@(posedge rst or negedge INC)
begin
if(rst)  INC_flag<=1'b0;
else     INC_flag<=~INC_flag;
end
always@(posedge rst or negedge DEC)
begin
if(rst)  DEC_flag<=1'b0;
else     DEC_flag<=~DEC_flag;
end
wire iddet;
//assign iddet=INC_edge|DEC_edge;
reg ioed;
always@(posedge rst or posedge INC_edge or posedge DEC_edge)
begin
if(rst)             ioed<=1'b0;
else if(INC_edge)   ioed<=1'b1;
else                ioed<=1'b0;
end
    wire detenable;
wire select;
assign select=(ioed&INC_flag&~DEC_flag)|(~ioed&~INC_flag&~DEC_flag)|(~ioed&INC_flag&DEC_flag)|(ioed&~INC_flag&DEC_flag);
assign detenable=select?cdiv2:div2;
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////
reg idedge1,idedge2;
always@(posedge rst or negedge clk)
begin
if(rst) idedge1<=1'b0;
else if(detenable)  idedge1<=INC_edge;
end
always@(posedge rst or negedge clk)
begin
if(rst) idedge2<=1'b0;
else if(detenable)  idedge2<=DEC_edge;
end

reg state;
always@(posedge rst or posedge idedge1 or posedge idedge2)
begin
  if(rst)                                     state<=1'b0;
  else if(idedge1)                            state<=~state;
  else                                        state<=~state;                  
      
end
////输出选择
   assign serout=state?ser1:ser2;
endmodule
回复 支持 反对

使用道具 举报

发表于 2003-11-21 16:10:17 | 显示全部楼层

最近小作:Verilog版的dpll

guanfree辛苦了
//bow
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-21 18:33:31 | 显示全部楼层

最近小作:Verilog版的dpll

谢谢。如果有什么意见或建议,还情alphame兄不啬赐教。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-1 18:25:40 | 显示全部楼层

最近小作:Verilog版的dpll

关于dpll的一个文档我准备上传到bravelu的ftp上,非常基础,适合于感兴趣的初学者。(如果能上传的话)
回复 支持 反对

使用道具 举报

发表于 2003-12-12 15:06:55 | 显示全部楼层

最近小作:Verilog版的dpll

ding
回复 支持 反对

使用道具 举报

发表于 2003-12-16 20:41:39 | 显示全部楼层

最近小作:Verilog版的dpll

最近也看了点DPLL,简单说几句。
全数字锁相环不能仅靠输入时钟倍频,它需要一个高频本地时钟。而模拟锁相环可以。
对于数字锁相环的加/减法脉冲控制器,大家可以参考74LS297的资料,上面的逻辑图很详细。
回复 支持 反对

使用道具 举报

发表于 2003-12-18 15:57:40 | 显示全部楼层

最近小作:Verilog版的dpll

74LS297是不是会产生latch,这个在fpga里要尽量避免的。
回复 支持 反对

使用道具 举报

发表于 2004-3-6 16:16:44 | 显示全部楼层

最近小作:Verilog版的dpll

我将你的程序改为vhdl的方式,为什么就是提出的时钟不好。
回复 支持 反对

使用道具 举报

发表于 2004-5-18 23:17:23 | 显示全部楼层

最近小作:Verilog版的dpll

太好了!!!!!!!!
大家以后一起努力,使它更完善。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-24 10:27:02 | 显示全部楼层

最近小作:Verilog版的dpll

to nick:那是什么地方出的问题呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-14 07:11 , Processed in 0.016837 second(s), 3 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表