verilog报错:Illegal concatenation of an unsized constant. and 输入输出位宽不匹配

错误一:Illegal concatenation of an unsized constant.

 concatenation with unsized literal; will interpret as 32 bits:

data_out_int =  {{(CUT_INT_BITS){`DIN_SIGNED}},data_in_int} ;

修改为

data_out_int =  {{(CUT_INT_BITS){1‘b1}},data_in_int} ;就正确了,就是要保障拼接时需要复制多少位时,需要确保{(CUT_INT_BITS){`DIN_SIGNED}}这个里面的两个量都是正确的值。

还有就是有的时候信号的位宽会根据输入进行调整:(也就是输入输出位宽不匹配时,位宽由参数导入)

parameter DATA_IN_WIDTH = 8;
parameter DATA_OUT_WIDTH = 9;

wire [DATA_IN_WIDTH -1:0]  	data_in;
wire [DATA_OUT_WIDTH -1:0]  	data_out ;



//因为参数的变化,可能会出现位宽不相符的情况
assign  data_out = data_in;

//对于这种情况,有两个办法
//第一,是定义一个中间参数

parameter DATA_IN_WIDTH = 8;
parameter DATA_OUT_WIDTH = 9;

localparam DATA_OUT_WIDTH_REAL = (DATA_OUT_WIDTH > DATA_IN_WIDTH ) ? DATA_OUT_WIDTH : DATA_IN_WIDTH ;

wire [DATA_IN_WIDTH -1:0]  	data_in;
wire [DATA_OUT_WIDTH -1:0]  data_out ;

wire [DATA_OUT_WIDTH_REAL -1:0]  data_out_reg ;

assign data_out_reg = (DOUT_INT_BITS > DATA_W_IN_INT_BITS ) ? {{(CUT_INT_BITS){DIN_SIGNED}},data_in} : data_in;

assign  data_out = data_out_reg[DATA_OUT_WIDTH -1:0] ;


//第二,采用generate产生代码块(注意,信号定义在generate之内时,只作用于这个代码块内部)

parameter DATA_IN_WIDTH = 8;
parameter DATA_OUT_WIDTH = 9;



wire [DATA_IN_WIDTH -1:0]  	data_in;
wire [DATA_OUT_WIDTH -1:0]  data_out ;



generate
    if (DOUT_INT_BITS > DATA_W_IN_INT_BITS)  
		assign data_out = {{(CUT_INT_BITS){DIN_SIGNED}},data_in};
	else  
		assign data_out = data_in;
	end

还有一种问题就是,定义的信号位宽报错

parameter DATA_IN_WIDTH = 8;

wire [DATA_IN_WIDTH -1:0]  	data_in;


//有可能DATA_IN_WIDTH是等于0的,这样就会发生data_in的序列有负数,从而产生问题
//所以可以定义一个中间变量

parameter DATA_IN_WIDTH = 8;


localparam DATA_IN_WIDTH_REAL  = (DATA_IN_WIDTH == 0) ?  0 :  DATA_IN_WIDTH -1;

wire [DATA_IN_WIDTH_REAL  -1:0]  	data_in;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值