`timescale 1ns / 1ps module BuadRate_set #( parameter CLK_Period=50000000,//the unit is Hz parameter Buad_Rate=115200 //the unit is bits/s )( input clk, //原始系统时钟 input rst_n, //复位 input enable, //模块使能信号 output Buad_clk //输出的分频 ); localparam DIV_PEREM=CLK_Period/Buad_Rate/2; //计数器最大值 reg[15:0] cnt; always @( posedge clk ) if( !rst_n ) cnt <= 16'b0000; else if( enable ) begin if( cnt != DIV_PEREM ) cnt <= cnt+1'b1; else cnt <= 16'h0000; end else cnt <= 16'h0000; reg DIV_clk; always @( posedge clk ) if( !rst_n || !enable ) //当复位或者模块不使能的时候,分频器停止。 DIV_clk <= 1'b1; else if(cnt==DIV_PEREM) //计数器满,输出时钟翻转 DIV_clk <= ~DIV_clk; assign Buad_clk = DIV_clk; endmodule
时间: 2024-04-19 11:29:10 浏览: 145
这段代码是一个用于设置波特率的模块。它根据给定的系统时钟频率和波特率生成一个分频后的时钟信号。模块接受原始系统时钟信号(clk)、复位信号(rst_n)和使能信号(enable),并输出分频后的时钟信号(Buad_clk)。
在模块中,定义了两个寄存器:cnt和DIV_clk,分别用于计数和生成分频后的时钟信号。
在时钟上升沿触发的always块中,根据复位信号和使能信号的状态对计数器cnt进行更新。当复位信号(!rst_n)为低电平时,计数器归零。当使能信号(enable)为高电平时,计数器递增1,直到达到最大值DIV_PEREM。当计数器达到最大值时,分频后的时钟信号DIV_clk翻转。
最后,使用assign语句将分频后的时钟信号DIV_clk赋值给输出端口Buad_clk。
这个模块的作用是将原始系统时钟分频得到一个波特率时钟信号,用于串行通信等应用。
阅读全文