module my_reg(
clk, //时钟输入,48MHz,连接到时钟输入
reset, //复位输入,低电平有效
D, //输入由开关决定,0:按下,1:未按下
Q, //输出,0:点亮,1:熄灭
clk_flag //时钟标志,;LED点亮表示内部时钟高电平,便于观察
);
input clk; //输入输出定义
input reset; //用于复位clk_div的时钟
input D;
output Q;
output clk_flag;
reg Q; //寄存器说明
wire clk_out;
assign clk_flag = ~clk_out; //由于LED 低电平点亮,所以要反相
always @(posedge clk_out) //D 触发器描述
begin
Q <= D;
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
阅读(750) | 评论(0) | 转发(0) |