计算器:
时间计算器:以系统时钟为标准,在时钟上升沿(下降沿)进行加“1”操作,多用与分频计数和延时计数
标志计算器:以通信时钟为标准,在时钟上升沿(下降沿)当标志为真时进行加“1”操作,多用于通信计数
分频器:
以系统时钟为标准,通过分频来得到所需要的时钟。
偶数分频:使用一个计算器,以系统时钟为标准,在时钟上升沿(下降沿)进行加“1”操作,计数器最大值为该偶数值的一半减一。输出的分频时钟的值当计算器达到最大值时进行翻转。
例:8分频器
parameter M_FREQUENCY_COUNTER = 8/2-1;
reg [2:0] frequency_counter;
always@(posedge clk)
if(reset)
frequency_counter <= 0;
else if(frequency_counter==M_FREQUENCY_COUNTER)
frequency_counter <= 0;
else
frequency_counter <= frequency_counter+1'b1;
always@(posedge clk)
if(reset)
clk_8 <= 0;
else if(frequency_counter==M_FREQUENCY_COUNTER)
clk_8 <= ~clk_8;
else
clk_8 <= clk_8;
奇数分频:使用两个计算器,以系统时钟为标准,分别在时钟上升沿、下降沿进行加“1”操作,计算器最大值为该奇数值减一。产生两个标志信号P、N。P标志信号在上升沿计算器为最大值和最大值的一半减一时进行翻转,N标志信号在下降沿计算器为最大值和最大值的一半减一时进行翻转。输出的分频时钟为P、N信号相与。
要求:复位信号为一个或者多个完整的系统时钟周期(或同步复位)。
代码已上传到我的资源-1、奇数分频器
例:7分频
15分频
边沿检测:
对该信号进行打拍(延时),当延时后的信号与原信号相异或,结果为真则是信号的边沿。
always@(posedge clk)
signal_delay <= signal;
assign signal_p = !signal_delay & signal;
assign signal_n = signal_delay & !signal;