Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1008234
  • 博文数量: 159
  • 博客积分: 4079
  • 博客等级: 上校
  • 技术积分: 2373
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-24 13:35
个人简介

诚实守信!

文章分类

全部博文(159)

文章存档

2015年(2)

2014年(18)

2013年(9)

2012年(57)

2011年(31)

2009年(42)

分类:

2009-09-08 14:42:55

module cout_asyn(
 clk,      //时钟输入,48MHz
 reset,                                      //复位输入,低电平有效
 Q     //输出,0:点亮,1:熄灭
 );
input   clk;    //输入说明
input   reset;   //输入说明
output [3:0] Q;    //输出说明
reg   [3:0] Q;    //寄存器说明
wire    clk_out;   //低频时钟,周期1S
/*第一个寄存器描述,对clk_out 计数*/
always @(posedge clk_out or negedge reset)
begin
 if(!reset)
  Q[0] <= 1'b0;   //复位0值  
 else
  Q[0] <= ~Q[0];   //反向
end
/*第二个寄存器描述,用Q[0]负边缘触发*/
always @(negedge Q[0] or negedge reset)
begin
 if(!reset)
  Q[1] <= 1'b0;   //复位0值 
 else
  Q[1] <= ~Q[1];   //反向
end
/*第三个寄存器描述,用Q[1]负边缘触发*/
always @(negedge Q[1] or negedge reset)
begin
 if(!reset)
  Q[2] <= 1'b0;   //复位0值 
 else
  Q[2] <= ~Q[2];   //反向
end
/*第四个寄存器描述,用Q[2]负边缘触发*/
always @(negedge Q[2] or negedge reset)
begin
 if(!reset)
  Q[3] <= 1'b0;   //复位0值 
 else
  Q[3] <= ~Q[3];   //反向
end
/*分频模块例化关系*/
clk_div clk_div_0(   //分配得到2S的时钟,便于观察
    .clk(clk),     //时钟输入,48M
 .reset(reset),   //异步复位输入,高电平复位
 .clk_out(clk_out)   //分频时钟输出
    );
endmodule
 
module clk_div
 (
 clk,        //时钟输入,48M
 reset,       //异步复位输入,高电平复位
 clk_out      //分频时钟输出
 );
parameter   cnt_top=26'd48000000; //分频系数
input   clk;      //端口定义
input   reset;
output   clk_out;
reg     clk_out;      //寄存器定义
reg   [25:0] clk_cnt;
always @(posedge clk or negedge reset) 
begin
 if(!reset)       //复位
 begin
  clk_out <= 1'b0;
  clk_cnt <= 0;
 end
 else
 begin
  if(clk_cnt==cnt_top-1)
  begin
   clk_out <= ~clk_out;   //分频输出
   clk_cnt <= 0;
  end
  else
   clk_cnt <= clk_cnt+1'b1; //计数器加1
 end
end
endmodule
阅读(617) | 评论(0) | 转发(0) |
0

上一篇:全加器

下一篇:分频器

给主人留下些什么吧!~~