打印

综合原理图,后两个always没有综合进去,高手指点

[复制链接]
1647|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yunlaishi|  楼主 | 2009-7-2 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
`timescale 1ns / 1ns

/********************************************************************************
** 模块名称:24位计数器
** 功能描述:
********************************************************************************/
module counter(
   clk,         //基准时钟
   fin,         //转速信号输入
   dataout         //发送的24bit数据 
   );
 input   clk;       //基准时钟
 input   fin;        //转速信号
 output   [23:0]dataout;
 
 reg    state;
 reg    [23:0] dataoutbuf24;   //转速信号缓存,转速信号输出
 reg    [15:0] dataoutbuf16;
 reg    [7:0]  dataoutbuf8;
 reg    latch_clr,setdata ;   //
 wire   cout16ove,ove;
 parameter       zero = 16'd0,COUNT = 1'b0,LATCH_CLR = 1'b1 ;   
                   




     
     always @(posedge clk  )
     begin
       case (state)
      COUNT: 
          begin     
           if(latch_clr)
              state <= LATCH_CLR;
             else
                 begin
                 if(!setdata)       //无锁存溢出信号,正常+1
                     begin
                  dataoutbuf16 <= dataoutbuf16 + 1;
                   if(cout16ove)
                   dataoutbuf8 <= dataoutbuf8 + 1;
                      end
               end
                 state <= COUNT;
            end
      LATCH_CLR:
           begin
            dataoutbuf24 <= {dataoutbuf16,dataoutbuf8};
          dataoutbuf16 <= 16'd0;
             dataoutbuf8 <= 8'd0;
           latch_clr <= 0;
             setdata <= 0;   //清  输出数据全1 使能位
             state <= COUNT;
             end
        default:state <= COUNT; 
      endcase       
     end
 
 assign dataout = dataoutbuf24;
 assign cout16ove = (&dataoutbuf16);
 assign  ove = (&dataoutbuf16)&(&dataoutbuf8);  
 
 
 
     always @(posedge fin)
    begin
     latch_clr <= 1'b1;
    end
     
     always @(posedge ove)
    begin
     setdata <= 1'b1;
     end
     
endmodule 

相关帖子

沙发
yunlaishi|  楼主 | 2009-7-2 09:09 | 只看该作者

对于verilog只是看了写书,第一回实践就失败

综合时,有报错,说fin,ove, 都没有用到,看原理图,里面太简单,fin根本没有引进去

使用特权

评论回复
板凳
yunlaishi|  楼主 | 2009-7-2 09:30 | 只看该作者

这是24位计数器, 不是虚序列FFT变换

fin上升沿触发clk的计数,在触发后第一个clk到来的时候,把fin锁存进来的锁存计数信号,清掉,
我知道有问题啊,希望高手能帮我分析下,谢谢了,我也看了些人家的 源代码,可是还不是 很确定原因,是不是我编的是异步状态机那

使用特权

评论回复
地板
zl8197| | 2009-7-12 20:00 | 只看该作者

看楼主用的是什么综合工具了

其实,楼主的程序单从语法讲没有问题。但和综合工具的有关,不同的综合工具理解不同。如果你用synplify,就是你现在的情况。如果用的是quartus,是能综合出寄存器用fin或ove打1的结果。synplify也可以设置,让其能理解这种写法。

使用特权

评论回复
5
sunnyzeng1| | 2009-7-25 01:00 | 只看该作者

re

最后两个REG状态根本没有翻转,所以综合工具直接就把fin、ove直接赋给原latch_clr和setdata信号了,从而将后者优化了。建议跑综合的时候看看告警,应该能知道原因。

使用特权

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

本版积分规则

48

主题

90

帖子

0

粉丝