打印

大侠救命, 仿真结果和预期完全不一样。

[复制链接]
1295|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwboy05|  楼主 | 2012-6-17 19:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是想用CPLD来实现控制步进电机转1圈(400个脉冲),速度从慢到快,然后匀速,然后在逐渐变慢,最后停止;START是控制信号,上升沿触发;OUT是输出;

module iDrv(reset,clk,START,OUT);
parameter DLYREG0  = 8'd250;
parameter DLYREG1  = 8'd230;
parameter DLYREG2  = 8'd210;
parameter DLYREG3  = 8'd190;
parameter DLYREG4  = 8'd170;
parameter DLYREG5  = 8'd150;
parameter DLYREG6  = 8'd130;
parameter DLYREG7  = 8'd110;
parameter DLYREG8  = 8'd90;
parameter DLYREG9  = 8'd70;
parameter DLYREG10 = 8'd50;
parameter DLYOFF   = 8'd50;

input reset;
input clk;
input START;
output OUT;
reg OUT;
reg START0;
reg START1;
reg [2:0]ST;
reg [7:0]DLYON;
reg [8:0]PLSCNT;
reg [7:0]DLCNT;

always @(posedge clk or negedge reset)
begin
if (reset == 1'b0)
begin
  START0 <= 1'b1;
  START1 <= 1'b1;
  ST    <= 3'b000;
  OUT    <= 1'b1;
end
else
begin  
  case (ST)
  3'b000:
  begin
   START0 <= START;
   START1 <= START0;
   if (START0 == 1'b1 && START1 == 1'b0) //start rise
   begin
    ST     <= 3'b001;
    PLSCNT <=9'd0;
    DLYON  <= DLYREG0;
   end
  end
  3'b001:
  begin
   OUT    <= 1'b0;   //turn on
   ST     <= 3'b010;
   DLCNT  <= 8'd0;
   PLSCNT <= PLSCNT + 9'd1;
  end
  3'b010:
  begin
   DLCNT <= DLCNT + 8'd1;
   if (DLCNT == DLYON)
   begin
    OUT   <= 1'b1;  //turn off
    ST    <= 3'b011;
    DLCNT <= 8'd0;
   end
  end
  3'b011:
  begin
   DLCNT <= DLCNT + 8'd1;
   if (DLCNT == DLYOFF)
   begin
    if (PLSCNT < 9'd400)
    begin
     ST <=3'b001;
     case (PLSCNT)
     9'd395 : DLYON <= DLYREG0;
     9'd5   : DLYON <= DLYREG1;
     9'd390 : DLYON <= DLYREG1;
     9'd10  : DLYON <= DLYREG2;
     9'd385 : DLYON <= DLYREG2;
     9'd15  : DLYON <= DLYREG3;
     9'd380 : DLYON <= DLYREG3;
     9'd20  : DLYON <= DLYREG4;
     9'd375 : DLYON <= DLYREG4;
     9'd25  : DLYON <= DLYREG5;
     9'd370 : DLYON <= DLYREG5;
     9'd30  : DLYON <= DLYREG6;
     9'd365 : DLYON <= DLYREG6;
     9'd35  : DLYON <= DLYREG7;
     9'd360 : DLYON <= DLYREG7;
     9'd40  : DLYON <= DLYREG8;
     9'd355 : DLYON <= DLYREG8;
     9'd45  : DLYON <= DLYREG9;
     9'd350 : DLYON <= DLYREG9;
     9'd50  : DLYON <= DLYREG10;
     default:;
     endcase
    end
    else
    begin
     ST <=3'b000;
    end
   end
  end
  default:;
  endcase
end
end
endmodule

相关帖子

沙发
GoldSunMonkey| | 2012-6-18 11:51 | 只看该作者
问题呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

219

帖子

2

粉丝