1.分频(假设输入clk为 50mhz,分频为1khz)

module frequency_divider (
    input clk,           // 系统时钟 (50 MHz)
    input rst,           // 复位信号(高电平有效)
    output wire clk_out   // 输出的1 kHz时钟
);

// 参数定义
parameter CLK_FREQ = 50_000_000; // 50MHz
parameter SCAN_FREQ = 1000;    // 1kHz
parameter COUNTER_MAX = CLK_FREQ / SCAN_FREQ - 1;

// 分频计数器
reg [15:0] counter;
assign clk_out = (counter == COUNTER_MAX);

always @(posedge clk or posedge rst) begin
    if (rst)
        counter <= 16'd0;
    else if (counter == COUNTER_MAX)
        counter <= 16'd0;
    else
        counter <= counter + 1'b1;
end


endmodule

2.八位比较器

module eight_bit_counter (
    input clk,          // 系统时钟
    input rst_n,        // 异步复位信号 (低电平有效)
    input en,           // 计数使能信号*(高电平有效)
    output reg [7:0] count // 计数值
);

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        count <= 8'b00000000; // 异步复位时清零计数器
    end else if (en) begin
        if (count == 8'd255) begin
            count <= 8'b00000000; // 达到最大值时回滚到0
        end else begin
            count <= count + 1; // 否则计数加1
        end
    end
end

endmodule

3.八位计数器

module eight_bit_counter (
    input clk,          // 系统时钟
    input rst_n,        // 异步复位信号 (低电平有效)
    input en,           // 计数使能信号
    output reg [7:0] count // 计数值
);

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        count <= 8'b00000000; // 异步复位时清零计数器
    end else if (en) begin
        if (count == 8'd255) begin
            count <= 8'b00000000; // 达到最大值时回滚到0
        end else begin
            count <= count + 1; // 否则计数加1
        end
    end
end

endmodule


4.DQ锁存器

更多推荐