本实验设计一个可变频率和可变占空比的方波,要求可以通过控制按键和开关来改变方波的频率和占空比,开关控制要求表7-1如所示。

表7 1 脉冲发生器开关控制要求

SW3 SW2 SW1频率
0002分频,50/2 MHz
0014分频,50/4MHz
0108分频,50/8 MHz
01116分频,50/16MHz
10032分频,50/32 MHz
10164分频,50/64MHz
SW7SW6占空比
001:2
011:4
101:8
113:8



首先介绍占空比的概念,占空比指在一串理想的脉冲序列中,正脉冲的持续时间与脉冲总周期的比值。在图72所示的波形中,占空比等于t/T。例如,脉冲宽度10μs,信号周期40μs的脉冲序列占空比为0.25。
图7-2  占空比的定义

图7-2 占空比的定义

方波一般通过对一个高频的脉冲信号进行分频来生成。分频比指方波的周期和高频信号周期之间的比例关系,通过控制分频比来实现不同频率的方波。例如,开发系统上的时钟是50MHz,如果要生成10MHz的方波,则分频比为5。根据输入时钟及要输出的方波的频率计算出分频比,通过计数器的值来控制输出方波的频率。对于一定频率的方波,通过另一个计数器来控制占空比。例如,时钟是50MHz,要求生成一频率为10MHz,占空比为1/5的方波,那么分频比为5,方波的周期为5个时钟周期,正脉冲的持续时间为1个时钟周期(图7-3)。 图7-3  频率为10MHz,占空比为1/5的方波

图7-3 频率为10MHz,占空比为1/5的方波



输入输出信号 程序有4个输入信号和1个输出信号:

input		clk,reset;	//时钟和复位信号,时钟为50MHz。
input		[4:0]I1;	//SW5、SW4、SW3、SW2和SW1输入,用于控制分频比。
input		[2:0]I2;	//SW8、SW7和SW6输入,用于控制占空比。
output		clkout;		//方波输出。

主要寄存器

Division:分频比。根据SW5到SW1来决定分频比:
always @* begin
		case(I1)
			5'b00001: division = 6'd4;     // 1/4分频
			5'b00010: division = 6'd8;     // 1/8分频
			5'b00011: division = 6'd16;    // 1/16分频
			5'b00100: division = 6'd32;    // 1/32分频
			5'b00101: division = 6'd64;    // 1/64分频
			default: division = 6'd2;      // 1/2分频		
endcase
		end	

pulse: 正脉冲的时钟周期数,根据占空比决定正脉冲时钟周期数: 正脉冲时钟周期数 = 分频比 * 占空比

always @* begin
		case( I2 )
			3'b001: pulse = division/4;    // 占空比: 1/4
			3'b010: pulse = division/8;    // 占空比:1/8
			3'b011: pulse = division*3/8;  // 占空比:3/8
			default: pulse = division/2;   // 占空比:1/2		
                endcase
end

3)方波生成

always @ (posedge clk or negedge reset)	begin
		if( !reset )	begin		// 复位
			count <= 0;
			clkout <= 0;
		end
		else begin                 // counter决定了方波的周期。
			if( count == division - 1 )
				count <= 0;
			else
				count <= count + 1;
 
				if( count == 0 )
					clkout <= 1;	// 当counter为0时,输出信号为1。
				else if ( count >= pulse )
					clkout <= 0; 	// 当counter大于正脉冲时周期数时,输出信号为0。				
		end
		end

从上述代码可以看出,正脉冲的宽度至少为一个时钟周期。如果分频比为2,占空比为1/4,则正脉冲时钟周期为2×1/4=1/2,非整数时钟周期脉冲宽度是无法实现,所以正脉冲时钟周期数为1。

用Modelsim对程序进行仿真,仿真文件为testpulse.v。图 74为仿真结果,Squwave为输出方波。I=000时,占空比为1/2;dvd=00000时,分频比为2;dvd=00001时,分频比为4。
图 7-4 方波发生器仿真结果

图 7-4 方波发生器仿真结果

把程序下载到开发系统上,用SignalTap逻辑分析仪观察输出的波形。I1和I2分别控制分频比和占空比,Clkout为方波输出。图75为当分频比为16、占空比为1/4是的方波输出结果。
图7-5  分频比为16,占空比为1/4时的方波输出

图7-5 分频比为16,占空比为1/4时的方波输出

图7-6为当分频比为16、占空比为3/8时的方波输出结果。 图7-6  分频比为16,占空比为1/4时的方波输出

图7-6 分频比为16,占空比为1/4时的方波输出



文件名功能
PulseGen.v主程序
TestPulse.vModelsim仿真程序
PulseSim.mpfModelSim仿真工程



演示设备:核心网、扩展板。
演示方法:把程序下载到开发系统上后,由扩展板的{SW3,SW2,SW1}控制分频比,{SW7,SW6}控制占空比,通过SignalTap观测输出。核心板上的reset键为复位键。