在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1915|回复: 7

[求助] always块对同一个reg进行赋值无法综合

[复制链接]
发表于 2020-12-11 21:24:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
module counter2(clk, rst, data_in, data_size, p2s_en, query_flag);
  input clk;
  input [63:0] data_in;
  output [7:0] data_size;
  output query_flag;
  //reg [7:0] count;//2016.02.29
  reg [7:0] data_size;
  reg query_flag;


    begin
     

  //-----------------------------------------------------------------------------
  always @(posedge clk or negedge rst)
      if (!rst)
      else if (data)
    end
  
    begin
        begin
          p2s_en <= 1'b0;
          m <= 0;
        end
      else if (flag)//2016.03.01

          //if (flag && data[127])//2016.03.01
              data_size <= 64-m;
              if (data[63]==1 && data[62]==0 && data[61]==0 && data[60]==0)
                query_flag <= 1'b1;
                query_flag <= 1'b0;
          else
              data<= data<< 1;
            end
          //if (data[127]), then program will be a dead cycle. for example data[7:0]=8'b01001101.
          //2015.04.02
          /*
            p2s_en <= 1'b1;
            p2s_en <= 1'b0;
        end
            
  /* //ERROR: memory allocation failure
    begin
        begin
          p2s_en <= 1'b0;
          m <= 0;
      else
          while (!data[127])
              data <= data << 1;
            end
          p2s_en <= 1'b1;
            query_flag <= 1'b1;
            query_flag <= 1'b0;
    end
endmodule

        
  
代码如上,quartus2报错,data_in有改变时,赋值给data,然后对data进行长度计算。请问如何修改代码才能变成可综合的
 楼主| 发表于 2020-12-11 21:29:33 | 显示全部楼层
`timescale 1ns/1ns
module counter2(clk, rst, data_in, data_size, p2s_en, query_flag);
  
  input clk;
  input rst;
  input [63:0] data_in;
  
  output [7:0] data_size;
  output p2s_en;
  output query_flag;
  

  reg [63:0] data;
  reg [7:0] data_size;
  reg p2s_en;
  reg query_flag;
  reg flag;

  integer m;

always @(data_in)
    begin
      data = data_in;
     
    end

  
  //-----------------------------------------------------------------------------

  always @(posedge clk or negedge rst)
    begin
      if (!rst)
        flag <= 1'b0;
      else if (data)
        flag <= 1'b1;
    end
  //-----------------------------------------------------------------------------
  
  always @(posedge clk or negedge rst)
    begin
      if (!rst)
        begin
          data_size <= 8'b0;
          p2s_en <= 1'b0;
          query_flag <= 1'b0;
          m <= 0;
       
        end

      else if (flag)
        begin

          if (data[63])

            begin
              data_size <= 64-m;
              p2s_en <= 1'b1;
              if (data[63]==1 && data[62]==0 && data[61]==0 && data[60]==0)
            
                query_flag <= 1'b1;
              else
                query_flag <= 1'b0;
            end
          else
            begin
              data<= data<< 1;
              m <= m+1;
            end

        end
    end
            
  

endmodule
         


        
  
 楼主| 发表于 2020-12-11 21:30:55 | 显示全部楼层
最上面的代码有问题,重新发了
发表于 2020-12-11 23:05:37 | 显示全部楼层
不好意思,你这个verilog写得完全看不下去,有很大问题。建议从头学一下
发表于 2020-12-14 14:13:01 | 显示全部楼层
一个典型的错误叫多源赋值,就是对同一个信号在几个地方赋值。
发表于 2020-12-14 14:59:34 | 显示全部楼层
熟称 multi-driven
发表于 2020-12-14 15:22:38 | 显示全部楼层
if(data)这个是什么意思?data是个矢量吧
 楼主| 发表于 2020-12-17 15:30:13 | 显示全部楼层
已解决,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 00:01 , Processed in 0.033272 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表