从系统时钟得到不同的时钟信号 - 频分和&标志

时间:2018-02-21 09:32:49

标签: verilog

我一直在给出一个从20MHz系统时钟得到10MHz,5MHz和1MHz的规范。我也应该为所有三个派生时钟设计posedge和negedge标志。

我使用了一个4位计数器,从0到15计数,计数器[0]给我10MHz时钟信号,计数器[1]给我5MHz信号。我使用了另一个5位计数器,计数从0到9。我将1MHz信号寄存器切换为每个计数0-9,这给了我1MHz的时钟信号。

现在我正努力设计所有三个时钟的posedge和negedge标志。我使用了posedge = a ^!b的组合逻辑;但我可以获得10MHz和5MHz的标志,但无法从这种方法中提取我的1MHz标志。

我被建议使用我的两个计数器(4位和5位)来轻松设计所有这三个计数器的标志。请在此建议

我使用5位计数器的1MHz片段

if(counter_1MHz == 5'd9)                                                    
begin
   counter_1MHz <= 5'd0;
   clk_1MHz_reg  <= ~clk_1MHz_reg;                                        
end 
else   
begin
   counter_1MHz <= counter_1MHz + 5'd1;
   clk_1MHz_reg  <= clk_1MHz_reg;             
end  
assign clk_1MHz = clk_1MHz_reg;

1 个答案:

答案 0 :(得分:0)

posedge = a&amp;!b其中b是从a:

延迟的一个周期
always @(posedge clock)
   b <= a;

assign rising_edge = a & !b; // a is high but was low 

请注意,来自20MHz时钟的10 MHz时钟产生的噪声再次是10MHz时钟。 negedge是逆时钟。因此,对这些信号的要求似乎没有经过深思熟虑。

以您的代码为基础:

reg  clk_1MHz_delay;
wire clk_1MHz_rising;
   always@(posedge clk_20MHz)
     clk_1MHz_delay <= clk_1MHz;
   assign clk_1MHz_rising = clk_1MHz & !clk_1MHz_delay;