繁体   English   中英

连续分配的左侧是非法的

[英]The left-hand-side of continuous assignment is illegal

我的输入由参数化的单位数组成。 我需要的输出是删除每个单元的第一位。 例如,如果输入每个具有3位大小的单位,并且输入值为011011 ,则输出应为1111

这是我为此使用的解决方案:

parameter data_in_size = 11;
parameter data_out_size = 10;
parameter units = 4;
parameter skip_bits = 1;

input [data_in_size * units - 1 : 0] data_in;
output [data_in_size * units - 1 : 0] data_out;

genvar i;
generate
for (i = 0; i < units; i = i + 1) begin
    assign data_out[data_out_size * i +: data_out_size] = data_in [(data_in_size * i + skip_bits) +: data_out_size];

end
endgenerate

但我收到以下错误The left-hand-side of continuous assignment is illegal

我如何解决此错误,为什么会得到它?

您的代码运行良好。 可能是模拟器 问题

但是我想重点关注代码中的逻辑实现 逻辑似乎是错误的。

第一个错误似乎是在data_out 声明切片逻辑中data_in [(data_in_size * i + skip_bits) +: data_out_size]必须替换为: data_in [(data_in_size * i + skip_bits) +: data_in_size]

假设i=0; data_out_size=3; data_in_size=4 i=0; data_out_size=3; data_in_size=4 i=0; data_out_size=3; data_in_size=4则LHS评估为data_out[2:0] = data_in[4:1] i=1data_out[5:3] = data_in[8:5] 如您所见,位切片似乎是不正确的 由于LSB被切片。

我认为您可能需要具有以下逻辑来进行位切片

assign data_out[data_out_size * i +: data_out_size] = data_in[(data_in_size * i) +: (data_in_size - skip_bits)];

这将对每个单位块的MSB位进行切片,其余位保持原样。

我在此处的EdaPlayground模拟了您的代码。 例如,您将具有以下data_out和data_in值。 请注意每个单元的切片MSB。

data_int = 1100101010010101
data_out = 100010001101

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM