Good Verilog Coding

1. 50%占空比的三分频

module div3(clk, reset, clk_div3);

input clk;

input reset;

output clk_div3;

reg clk1;

reg[1:0] state;


always@(posedge 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


always@(negedge 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这个信号了

=========================================================

将这个波形进一步推广,一个电平有效的异步信号,如果要同步到某一个时钟域,且要在电平切换时形成脉冲式的信号,可以用上面这种方式。

posted @ 2015-07-31 16:21  苍月代表我  阅读(297)  评论(0编辑  收藏  举报