簡體   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