基于verilogHDL的时钟分频与任意占空比调节
学生,小白,刚开始了解FPGA,想要深入学习verilog这一硬件描述语言。
就从我学到的东西开始谈起吧。
我们在做fpga项目绝大部分要用到分频计数器及其占空比的调节,可以说是必备的技能。
时钟分频(偶数)
我们所写的程序将下载烧录到basys2FPGA开发板上,而开发板spartan-3E的时钟频率为50MHZ(周期为20ns),而我们在做譬如流水灯等实验时,需要观察LED灯的亮灭需要将其频率调至1HZ左右,即每一秒输出时钟沿跳变一次。
module div(clk_in,clk_out,rst);
input clk_in; //输入时钟,频率为50Mhz
input rst; //复位信号,低电平有效
output reg clk_out; //输出时钟信号
reg [25:0]cn; //模25计数器
always@(posedge clk_in or negedge rst)begin
if(~rst)
begin
cn <= 0;
clk_out <= 0;
end
else if(cn == 24999999) //计数器记到24_999_999,即2500个clk_in上升沿后,输出波形翻转
begin
cn <= 0;
clk_out <= ~clk_out;
end
else
cn <= cn + 1;
end
测试激励:
module tb_div;
// Inputs
reg clk_in;
reg rst;
// Outputs
wire clk_out;