分频器、计数器、信号边沿检查

计算器:

时间计算器:以系统时钟为标准,在时钟上升沿(下降沿)进行加“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;

猜你喜欢

转载自blog.csdn.net/xs20180801/article/details/84699720