我一直在给出一个从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;
答案 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;