题目描述
在开发板中,有一个内置的时钟周期,为100MHZ,我们需要使用这样一个时钟信号来设计一个1HZ的流水灯(使用8个led灯),也就是一秒钟有一个灯是亮起的,依次从左到右。
另外还有一个低有效的复位使能端、一个同步保持使能(有效时流水灯亮起状况不变)
分析
首先,1HZ和100MHZ的时钟周期需要进行转换,然后利用新的时钟信号进行led灯信号变更即可。
分频部分
思路是这样的,既然是100MHZ,也就是10-8s的时钟周期,那么我们就需要进行计数,当计数到108时,才是一个新的时钟信号的一个周期;但是我们知道时钟信号是会有一个高低电平翻转的,也就是说当计数到108的一半时,需要有一个信号翻转。
代码:
`timescale 1ns / 1ps
module divider(
input rst_n_i, //一个低有效的复位使能
input clk_i,
output reg clk_o
);
reg [28:0]cnt = 'b0;
always@(posedge clk_i or negedge rst_n_i) begin
if(rst_n_i == 1'b0) //复位使能有效
cnt <= 'b0;
else if(cnt == 9999_9999) //一个周期
cnt <= 'b000