2015-03-15 2 views
0

Я хочу сохранить данные в 2-мерном массиве в синтаксисе verilog. Я написал код. пожалуйста, любой может проверить код и может дать мне более хорошее представление о том, как использовать 2 одномерный массивКак использовать 2 Размерный массив в Verilog

reg [9:0] simple_State [0:10][0:10] 

reg [9:0] count, 
reg [9:0] index_R; // row 
reg [9:0] index_C; // 
initial 
begin 
index_C=0; 
index_R=0 ; 
end 

always @ (posedge clock) 

simple_State[index_R][index_C] <= count ; 
count <= count+1 ; 
index_C <= index_C+1 ; 
if (count== 10 * index_C) 
    index_R<= index_R+1 ; 
end 

ответ

0

Ваш код вызывает index_C и index_R к переполнению, и нуждается в операции умножения, которое может быть дорогим, если это Desription является который должен быть синтезирован. simple_State имеет 11 строк и 11 столбцов, поэтому достаточно 4 бит для индекса строки и индекса столбца. Просто сделайте так, как вы делали бы на любом другом языке: увеличивать столбец и когда он достигает максимального значения столбца, сбрасывается на 0 и увеличивает значение строки. Когда это достигает своего максимального значения, сбросьте его на 0.

reg [9:0] simple_State [0:10][0:10] 
reg [9:0] count, 
reg [3:0] index_R; // row 
reg [3:0] index_C; // column 
initial begin 
    index_C = 0; 
    index_R = 0 ; 
end 

always @ (posedge clock) begin 
    simple_State[index_R][index_C] <= count ; 
    count <= count + 1; 
    if (index_C == 10) begin 
    index_C <= 0; 
    if (index_R == 10) 
     index_R <= 0; 
    else 
     index_R <= index_R + 1; 
    end 
    else 
    index_C <= index_C + 1 ; 
end 
0

Попытайтесь избежать первоначального блока, если используете последовательную логику.

reg [9:0] simple_State [0:10][0:10] 
reg [9:0] count, 
reg [3:0] index_R; // row 
reg [3:0] index_C; // 
always @ (posedge clock or negedge rst) begin 
    if(!rst) begin 
    index_C=0; 
    index_R=0 ; 
    end 
end 
else 
    begin 
    simple_State[index_R][index_C] <= count ; 
    count <= count+1 ; 
    index_C <= index_C+1 ; 
    if (count== 10 * index_C) 
    index_R<= index_R+1 ; 
    end 
end 
Смежные вопросы