打印

请教兄弟们一个verilog的程序问题

[复制链接]
1781|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skiry|  楼主 | 2012-3-27 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用cpld做一个简单时序转换的程序,但是改了很多次ISE还是不能综合,
请兄弟们看看哪里有问题??似乎非阻塞赋值有问题.
综合时报错例如Line 54: Syntax error near "<=".很多很多
我觉得语法上可能有错误
请大家指正

module RESOLVER_DATA_CHANGE(CLK20M,CLK_IN,DATA_IN,CLK_OUT,DATA_OUT,CS);
  
  input CLK20M;    //外挂有源晶振20M
  input CLK_IN;    //外部同步时钟输入
    input DATA_IN;  //外部信号输入
    output DATA_OUT;   //数据输出
    output CLK_OUT;    //同步时钟信号输出
    output CS;         //片选信号输出
    reg DATA_OUT;      //寄存器声明
  reg CLK_OUT;
  reg CS;
  reg [3:0] CNT;       //4位计数器声明
  reg [6:0] CNT20M;   //7位计数
   
initial        
  begin
  CNT<=2'b00000;
   
DATA_OUT<=1;
CLK_OUT<=0;  //旋变的时钟输入空闲时候为低电平
CS<=0;        //初始值cs使能,上电时可读
   
end
  
  
  always @ ( posedge CLK20M )     
  
  if(CNT20M==40)
          CNT20M<=CNT20M+1;
            CS<=0;
          DATA_OUT<=1;
         else if(CNT20M==13)
          CNT20M<=CNT20M+1;   
          DATA_OUT<=DATA_IN;  
         else if(CNT20M==10)
          CNT20M<=CNT20M+1;
          CLK_OUT<=0;
         else if(CNT20M==30)
          CNT20M<=CNT20M+1;
          DATA_OUT<=0;

          else
          CNT20M<=CNT20M+1;                 
     
  
  always @ ( negedge CLK_IN )  
               begin
                if (CNT==13)
           begin CNT<=0;
                     CS<=1;
                end
                else if (CNT==0)
               begin
     CNT<=CNT+1;
                CLK_OUT<=1;
                CNT20M<=0;
                DATA_OUT<=0;  
                end
                else
               begin
     CNT<=CNT+1;
                CLK_OUT<=1;
                CNT20M<=0;
               end
  end
  
endmodule

相关帖子

沙发
skiry|  楼主 | 2012-3-27 16:23 | 只看该作者
希望有高手能看到

使用特权

评论回复
板凳
viatuzi| | 2012-3-27 20:17 | 只看该作者
原则上讲,initial 是不可综合的,如果要给信号赋初值,可以用reset。

使用特权

评论回复
地板
GoldSunMonkey| | 2012-3-27 23:30 | 只看该作者
代码风格太差了。

使用特权

评论回复
5
GoldSunMonkey| | 2012-3-27 23:54 | 只看该作者
module RESOLVER_DATA_CHANGE(CLK20M,CLK_IN,DATA_IN,CLK_OUT,DATA_OUT,CS);
  
  input CLK20M;    //外挂有源晶振20M
  input CLK_IN;    //外部同步时钟输入
    input DATA_IN;  //外部信号输入
    output DATA_OUT;   //数据输出
    output CLK_OUT;    //同步时钟信号输出
    output CS;         //片选信号输出
    reg DATA_OUT;      //寄存器声明
  reg CLK_OUT;
  reg CS;
  reg [3:0] CNT;       //4位计数器声明
  reg [6:0] CNT20M;   //7位计数
   
initial        
  begin
  CNT<=2'b00000;
   
DATA_OUT<=1;
CLK_OUT<=0;  //旋变的时钟输入空闲时候为低电平
CS<=0;        //初始值cs使能,上电时可读
   
end
  
  
  always @ ( posedge CLK20M )     
    begin
        if(CNT20M==40)
                    begin
          CNT20M<=CNT20M+1;
            CS<=0;
          DATA_OUT<=1;
                         end
         else if(CNT20M==13)
                         begin
          CNT20M<=CNT20M+1;   
          DATA_OUT<=DATA_IN;
          end                         
         else if(CNT20M==10)
                         begin
          CNT20M<=CNT20M+1;
          CLK_OUT<=0;
                         end
         else if(CNT20M==30)
                         begin
          CNT20M<=CNT20M+1;
          DATA_OUT<=0;
          end
         else
          CNT20M<=CNT20M+1;  
                                  
    end
  
  always @ ( negedge CLK_IN )  
       begin
           if (CNT==13)
           begin
                          CNT<=0;
           CS<=1;
           end
           else if (CNT==0)
            begin
                CNT<=CNT+1;
                CLK_OUT<=1;
                CNT20M<=0;
                DATA_OUT<=0;  
             end
           else
               begin
                CNT<=CNT+1;
                CLK_OUT<=1;
                CNT20M<=0;
               end
     end
  
endmodule

使用特权

评论回复
6
GoldSunMonkey| | 2012-3-27 23:54 | 只看该作者
这个就可以了。

不过你的代码风格太差。自己多学习吧。
不是一句话就能说明白的事情。

使用特权

评论回复
7
skiry|  楼主 | 2012-3-28 08:20 | 只看该作者
谢谢楼上的各位,我初学,继续努力

使用特权

评论回复
8
skiry|  楼主 | 2012-3-28 08:27 | 只看该作者
6# GoldSunMonkey

感谢您的指正,代码确实没条例而且太粗心,begin end没有在意,begin end就相当于大括号吧,

使用特权

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

本版积分规则

11

主题

53

帖子

0

粉丝