pwm_verilog(quartus)

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锁存器

更多推荐



所有评论(0)