1. 50%占空比的三分频
module div3(clk, reset, clk_div3);
input clk;
input reset;
output clk_div3;
reg clk1;
reg[1:0] state;
clk or negedge reset)begin
if(!reset)
state<= 2’b00;
else
begin
case(state)
2’b00: state<= 2’b01;
2’b01: state<= 2’b11;
2’b10: state<= 2’b00;
2’b11: state<= 2’b00;
endcase
end
end
clk or negedge reset)begin
if(!reset)
clk1<= 0;
else
clk1<= state[0];
end
assign clk_div3 = clk1 & state[0]; endmodule=========================================================
进一步推广,如果要得到50%占空比的奇数倍(2N+1)分频,可以使用两个count, count_0使用上升沿计数,产生的clk_0占空比为N/(2N+1),count_1使用下降沿计数, 产生的clk_1占空比为N/(2N+1),然后将clk_0和clk_1进行或运算,即得到50%占空比的时钟信号。
2. 根据时序图写verilog代码,已知时钟信号clk和输入信号a,要获得如图所示的b,应该怎么编写verilog代码?
解答:将a用寄存器打一拍,然后和原来的a异或一下就出来了b这个信号了
=========================================================
将这个波形进一步推广,一个电平有效的异步信号,如果要同步到某一个时钟域,且要在电平切换时形成脉冲式的信号,可以用上面这种方式。