wuyouwuyou

频率控制器的FPGA设计

0
阅读(2223)

这个频率控制器子模块的设计直接采用VHDL语言编写。外部输入时钟为10MHz,,输出2组频率,分别代表行和列的,每组4个,即要设计这样一个分频器,在MCU控制信号的控制下选择各自4种分频模式的一种,提供两组输出,一个为行频正弦波发生模块提供时钟信号,另一个为列频提供时钟信号。按此思想,可以得出频率控制器子模块的输入信号为:外部时钟clk,MCU送出的行控制信号kong_h,MCU送出的列控制信号kong_l。输出信号为:分频后的行频clk_h,分频后的列频clk_l。下面就以列频率的分频部分的主程序介绍频率控制器子模块设计的程序思路。程序如下:

process(clk)

Begin

if(kong_l="00" )then

  counterr<="0110000";

  elsif(kong_l="01" )then

  counterr<="0110101";

      elsif(kong_l="10" )then

  counterr<="0111010";

  elsif(kong_l="11" )then

  counterr<="1000001";

    end if;

 

if(clk 'event and clk='1')then

  if(counter=counterr)then

  counter<=(others=>'0');

  clk_temp<=not clk_temp;

  else

  counter<=counter+1;

  end if;

end if;

end process;

第一个if语句里,是根据MCU送出的列控制信号kong_l来选择分频系数,如if(kong_l="00" )then counterr<="0110000" 就是当kong_l为“00”时将48赋与counterr即分频系数。在第二个if语句里是根据第一个if语句选取的分频系数进行分频,若选取的是48则程序以48为模计数,即将clk信号进行48分频。在clk上升沿来临时,若counter的值为48,则counter重新置为0并将clk_temp取反,否则,就对counter计数值加1。最后当然要将将clk_temp赋与clk_l。经过这样就实现了48分频。行分频也是同样的道理,这里就不一一解释了。最后生成频率控制器子模块的模块框图如下: