集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2234|回复: 2

跪求FPGA高手帮忙仿真

[复制链接]
minfly1234 发表于 2010-5-19 02:41:54 | 显示全部楼层 |阅读模式
在下毕设遇到瓶颈,不知道用quartus软件,所以跪求各位高手帮忙仿真,最好能附带波形图跟注解。感激不尽,谢谢!
module dpll(reset,clk,signal_in,signal_out,syn);
parameter para_K=4;
parameter para_N=16;
input reset;
input clk;
input signal_in;
output signal_out;
output syn;
reg signal_out;
reg dpout;
reg delclk;
reg addclk;
reg add_del_clkout;
reg [7:0]up_down_cnt;
reg [2:0]cnt8;
reg [8:0]cnt_N;
reg syn;
reg dpout_delay;
reg [8:0]cnt_dpout_high;
reg [8:0]cnt_dpout_low;
/******phase detector*****/
always@(signal_in or signal_out)
  begin
    dpout<=signal_in^signal_out;
  end
/******synchronization establish detector*****/
always@(posedge clk or negedge reset)
  begin
        if(!reset)    dpout_delay<='b0;
        else          dpout_delay<=dpout;
  end
always@(posedge clk or negedge reset)
  begin
      if(!reset)
          begin
            cnt_dpout_high<='b0; cnt_dpout_low<='b0;
          end
      else if(dpout)
                if(dpout_delay==0)  cnt_dpout_high<='b0;
                else
                    if(cnt_dpout_high==8'b11111111)  cnt_dpout_high<='b0;
                    else  cnt_dpout_high<=cnt_dpout_high+1;
      else if(!dpout)
                 if(dpout_delay==1)  cnt_dpout_low<='b0;
                 else
                     if(cnt_dpout_low==8'b11111111)  cnt_dpout_low<='b0;
                     else  cnt_dpout_low<=cnt_dpout_low+1;
   end
always@(posedge clk or negedge reset)
  begin
          if(!reset)  syn<='b0;
      else if((dpout&&!dpout_delay)||(!dpout&&dpout_delay))
           if(cnt_dpout_high[8:0]-cnt_dpout_low[8:0]<=4||cnt_dpout_low[8:0]-cnt_dpout_high[8:0]<=4)  syn<='b1;
           else  syn<='b0;
  end
/****up down couter with mod=K****/
always@(posedge clk or negedge reset)
begin
   if(!reset)
    begin
       delclk<='b0;
       addclk<='b0;
       up_down_cnt<='b00000000;
    end
   else
    begin
      if(!dpout)
       begin
        delclk<='b0;
        if(up_down_cnt==para_K-1)
          begin
            up_down_cnt<='b00000000;
            addclk<='b0;
          end
     else
        begin
           up_down_cnt<=up_down_cnt+1;
           addclk<='b0;
        end
      end
else
  begin
  addclk<='b0;
           if(up_down_cnt=='b0)
             begin
               up_down_cnt<=para_K-1;
               delclk<='b0;
             end
            else
             if(up_down_cnt==1)
               begin
                 delclk<='b1;
                 up_down_cnt<=up_down_cnt-1;
               end
             else
                 up_down_cnt<=up_down_cnt-1;
             end
          end
  end
/******add and delete clk*****/
always@(posedge clk or negedge reset)
begin
  if(!reset)
     begin
       cnt8<='b000;
     end
  else
     begin
      if(cnt8=='b111)
     begin
      cnt8<='b000;
   end
else
    if(addclk&&!syn)
       begin
         cnt8<=cnt8+2;
       end
    else
       if(delclk&&!syn)
          cnt8<=cnt8;
       else
          cnt8<=cnt8+1;
  end
end
always@(cnt8 or reset)
begin
if(!reset)
  add_del_clkout<='b0;
else
  add_del_clkout<=cnt8[2];
end
/******counter with mod=N******/
always@(posedge add_del_clkout or negedge reset)
begin
  if(!reset)
   begin
    cnt_N<='b0000;
    signal_out<='b0;
   end
else
   begin
     if(cnt_N==para_N-1)
       begin
         cnt_N<='b0000;
         signal_out<='b0;
   end
else
   if(cnt_N==(para_N-1)/2)
     begin
       signal_out<='b1;
       cnt_N<=cnt_N+1;
  end
else
      cnt_N<=cnt_N+1;
  end
end
endmodule
DPLL由  鉴相器、 模K加减计数器、脉冲加减电路、同步建立侦察电路、模N分频器构成.
整个系统的中心频率(即signal_in和signal_out的码速率的2倍)为clk/8/N.  模K加减计数器的K值决定DPLL的精度和同步建立时间,K越大,则同步建立时间长,同步精度高.反之则短,低.
xpz35 发表于 2010-6-21 18:04:15 | 显示全部楼层
怎么都看不到回复呢
IPO 发表于 2010-6-21 18:22:14 | 显示全部楼层
没有测试文件.
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-23 15:51 , Processed in 0.059373 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表