我的输入包含参数化的单位数。我需要的输出是删除每个单元的第一位。
例如,如果输入的单位大小为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
我如何解决这个错误以及为什么我会得到它?
答案 0 :(得分:2)
您的代码运行良好。可能是模拟器 问题。
但我想关注代码中的逻辑实现。逻辑似乎是错误的。
第一个错误似乎出现在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
,则LHS评估为data_out[2:0] = data_in[4:1]
。在i=1
,data_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 here模拟了您的代码。例如,您将拥有以下data_out和data_in值。请注意每个单元的切片MSB。
data_int = 1100101010010101
data_out = 100010001101