Что касается вашей ошибки: вы должны использовать синтаксис +:
[4 * cnt +: 4]. См. здесь для получения дополнительной информации.
Даже , если , что будет семантически разрешено, ваши значения будут неверными:
[4*cnt-1:4*cnt]
даст низкий: высокий индекс, например, если cnt= 1 вы получаете [3: 4]
[4*cnt-1:4*cnt]
дает отрицательный индекс, если cnt == 0 [-1: 0], который находится за пределами диапазона [31: 0] изreg
.
Вы, вероятно, хотели использовать [4*cnt+3:4*cnt]
Но у вас есть и другие ошибки.
Во-первых, это очень опасно для использованияключевое слово для переменной.(reg)
Во-вторых, вы тактируете, используя не тактовый сигнал: wren
.Это создает другое дерево часов.Обычная процедура - использовать if
со стандартными системными часами:
always @(posedge clk or posedge rst)
begin
if (rst == 1)
begin
my_reg <= 0;
end
else
begin
if (wren == 1)
begin
my_reg [4*cnt +: 4] <= abcd;
end
end
end