搜索
bottom↓
回复: 5

【求助!】变量在编译的时候,老是被软件提示位宽不对!怎么解决啊!

[复制链接]

出0入0汤圆

发表于 2010-10-13 16:22:59 | 显示全部楼层 |阅读模式
都快被Quartus综合软件整疯了~~~~这句话:

     assign SysRA = (RA_buf == 3'b011)? 1 : 0;

老是被提示 truncated value with size <32> to match size of target (<1>)(削减31位长度来满足目标的一位长度~!!)

所以后面的逻辑(如下)也就全部不对了
assign Ren = (SysRA & !bin) | (SysFA &  bin) | (SysRB &  ain) | (SysFB & !ain) ;
assign Fen = (SysRA &  bin) | (SysFA & !bin) | (SysRB & !ain) | (SysFB &  ain) ;


问题是我根本没有在哪里定义过32位位宽的,用到的变量都是3位的,或者1位的!!(如下所示)
        reg [2:0] RA_buf;
        reg [2:0] RB_buf;
        reg [2:0] FA_buf;
        reg [2:0] FB_buf;
       
        wire SysRA,SysFA,SysRB,SysFB;



为啥老是被提示有错呢?~~大虾支个招啊,求给我点燃一盏明灯吧~~~~

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-10-13 16:24:10 | 显示全部楼层
完整的程序像这样的,同步ain bin 的信号,产生一个脉冲,以改变计数器的值,最后用数码管显示


//由AB相产生脉冲并计数,显示
module decodeprj(ain,bin,rst,clk,dataout,en);

input ain,bin,rst,clk;
output[7:0] dataout;
output[7:0] en;//COM使能输出

reg[7:0] dataout;//各段数据输出
reg[7:0] en;

reg[31:0] cnt_scan;//扫描频率计数器
reg[3:0] dataout_buf;

// reg[32] bcdout;//16位计数器转化成的BCD码,4位一值

        reg [2:0] RA_buf;
        reg [2:0] RB_buf;
        reg [2:0] FA_buf;
        reg [2:0] FB_buf;
       
        wire SysRA,SysFA,SysRB,SysFB;
        trireg  Ren,Fen;
       
reg[31:0] cnumberplus;
reg[31:0] cnumberminus;
reg[31:0] cnumber;//脉冲计数个数 16位空间 65536个数 um—mm级别


always@(negedge rst or posedge clk)  
begin  
  if(!rst)
    begin
      RA_buf <= 0;
    end
   
        else RA_buf <= {RA_buf[1:0],ain};
end

assign SysRA = (RA_buf == 3'b011)? 1 : 0; //同步A的上升沿


always@(negedge rst or posedge clk)  
begin  
  if(!rst)
    begin
      FA_buf <= 7;
    end
   
        else FA_buf <= {FA_buf[1:0],ain};
end

assign SysFA = (FA_buf == 3'b100)? 1 : 0; //同步A的下降沿

always@(negedge rst or posedge clk)  
begin  
  if(!rst)
    begin
      RB_buf <= 0;
    end
   
        else RB_buf <= {RB_buf[1:0],ain};
end

assign SysRB = (RB_buf == 3'b011)? 1 : 0; //同步B的上升沿

always@(negedge rst or posedge clk)  
begin  
  if(!rst)
    begin
      FB_buf <= 7;
    end
   
        else FB_buf <= {FB_buf[1:0],ain};
end

assign SysFB = (FB_buf == 3'b100)? 1 : 0; //同步B的下降沿

assign Ren = (SysRA & !bin) | (SysFA &  bin) | (SysRB &  ain) | (SysFB & !ain) ;
assign Fen = (SysRA &  bin) | (SysFA & !bin) | (SysRB & !ain) | (SysFB &  ain) ;




//use ain bin to TEST!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
always@(negedge rst or posedge Ren)  
begin  
  if(!rst)
    begin
      cnumberplus <= 65536;
    end
  else
     cnumberplus <= cnumberplus+1;  
end  


always@(negedge rst or posedge Fen)  
begin  
  if(!rst)
    begin
      cnumberminus <= 0;
    end
  else
     cnumberminus <= cnumberminus+1;  
end  

always@(cnumberminus or cnumberplus)
        cnumber = cnumberplus - cnumberminus;

always@(posedge clk)
        begin
                cnt_scan<=cnt_scan+1;
        end

always @(cnt_scan)
begin
   case(cnt_scan[15:13])
       3'b000 :
          en = 8'b1111_1110;
       3'b001 :
          en = 8'b1111_1101;
       3'b010 :
          en = 8'b1111_1011;
       3'b011 :
          en = 8'b1111_0111;
       3'b100 :
          en = 8'b1110_1111;
       3'b101 :
          en = 8'b1101_1111;
       3'b110 :
          en = 8'b1011_1111;
       3'b111 :
          en = 8'b0111_1111;
       default :
          en = 8'b1111_1111;
    endcase
end

always@(en or cnumber) //对应COM信号给出各段数据
begin
        case(en)
                8'b1111_1110:
                        dataout_buf<=cnumber[3:0];
                8'b1111_1101:
                        dataout_buf<=cnumber[7:4];
                8'b1111_1011:
                        dataout_buf<=cnumber[11:8];
                8'b1111_0111:
                        dataout_buf<=cnumber[15:12];       
                8'b1110_1111:
                        dataout_buf<=cnumber[19:16];
                8'b1101_1111:
                        dataout_buf<=cnumber[23:20];
                8'b1011_1111:
                        dataout_buf<=cnumber[27:24];
                8'b0111_1111:
                        dataout_buf<=cnumber[31:28];
                default:
                        dataout_buf<=8;
         endcase
end

always@(dataout_buf)
begin
        case(dataout_buf)
                4'b0000:
                        dataout=8'b0000_0011;
                4'b0001:
                        dataout=8'b1001_1111;
                4'b0010:
                        dataout=8'b0010_0101;
                4'b0011:
                        dataout=8'b0000_1101;
                4'b0100:
                        dataout=8'b1001_1001;
                4'b0101:
                        dataout=8'b0100_1001;
                4'b0110:
                        dataout=8'b0100_0001;
                4'b0111:
                        dataout=8'b0001_1111;
                4'b1000:
                        dataout=8'b0000_0001;
                4'b1001:
                        dataout=8'b0001_1001;
                4'b1010:
                        dataout=8'b0001_0001;
                4'b1011:
                        dataout=8'b1100_0001;
                4'b1100:
                        dataout=8'b0110_0011;
                4'b1101:
                        dataout=8'b1000_0101;
                4'b1110:
                        dataout=8'b0110_0001;
                4'b1111:
                        dataout=8'b0111_0001;
                default:
                        dataout=8'b1111_1111;
         endcase
end

endmodule

出0入0汤圆

 楼主| 发表于 2010-10-13 16:49:24 | 显示全部楼层
汗!我大汗!求人不如求己


     assign SysRA = (RA_buf == 3'b011)? 1 : 0;  

改成:
     assign SysRA = (RA_buf == 3'b011)? 1'b1 : 1'b0;  



问题就解决了!具体为什么,不用我解释了吧~~唉,真是强悍的开发环境啊~~

出0入0汤圆

发表于 2010-10-13 17:22:10 | 显示全部楼层
这个不是错误啊,一个警告而已。。。不用去理他就可以了
相对于其他综合器而言,quartus的语法检查已经是很宽松的了。

出0入0汤圆

发表于 2010-10-13 18:51:31 | 显示全部楼层
回复【2楼】Ian11122840 船儿
-----------------------------------------------------------------------

呵呵,你不指定位宽,编译器会默认是32位的

出0入0汤圆

发表于 2010-10-16 11:27:20 | 显示全部楼层
回复【2楼】Ian11122840 船儿
-----------------------------------------------------------------------
汗!我大汗!求人不如求己

同感
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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