Verilog:使用计数器实现偶数倍分频(以四分频为例)

 大致的原理

设置一个计数器i,让i的初值等于0。每当一个时钟上升沿到来时,让i=i+1,如果i>5的话,就让 i等于1,即重新开始计数。如果i<=2那么让输出为1,如果i>2的话让输出为0。这也是它为什么只能实现偶数倍分频的原因。(或者说可以实现奇数倍,我还没get到???)

ModelSim仿真代码

功能代码

module Fre_Div(clk,out);
	input wire clk;
	output reg out;
	integer i;
	initial
		i=0;
	always@(posedge clk)
		begin
			i=i+1;
			if(i>4)
				i=1;
			else;
			if(i<=2)
				out=1'b1;
			else
				out=1'b0;
		end
endmodule

测试代码

module Fre_Div_Test;
	reg clk;
	wire out;
	Fre_Div U_Fre(.clk(clk),.out(out));
	initial
		clk=1'b1;
	always #100 clk=~clk;
endmodule

仿真波形图 

 

从上面的代码中,也可以看出initial和always引导过程块时的区别。initial只被执行一次,而always只要后面()中的敏感事件列表被触发就会被执行。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值