Try   HackMD

verilog除三除頻器

先上code

module div3(
input clk,
output div3_clk
//output reg rising_clk=1'd0,falling_clk=1'd0
);

////rising edge part
reg [1:0]counter_rising=2'd0;
reg rising_clk=1'd0;

//counter

always@(posedge clk)
begin
	if (counter_rising==2'd2) counter_rising<=1'd0;
	else counter_rising<=counter_rising+1'd1;
end

//div
always@(posedge clk)
begin
	if (counter_rising==2'd2) rising_clk<=1'd1;
		else rising_clk<=1'd0;
end

////falling edge part
reg [1:0]counter_falling=2'd0;
reg falling_clk=1'd0;

//counter

always@(negedge clk)
begin
	if (counter_falling==2'd2) counter_falling<=1'd0;
	else counter_falling<=counter_falling+1'd1;
end

//div
always@(negedge clk)
begin
	if (counter_falling==2'd2) falling_clk<=1'd1;
		else falling_clk<=1'd0;
end

//combinational

assign div3_clk=(falling_clk|rising_clk);

endmodule

畫圖會更好理解 建議畫一下 一個正緣一個負緣計數器 0~2的計數器
當數到2的時候為1 其他為0 正負緣都是一樣

最後輸出再把他or起來
剛好可以湊一個0.5clk