2D Matrix - Критическое предупреждение (127005): глубина памяти - PullRequest
0 голосов
/ 04 июня 2019

Я хочу создать двумерный массив постоянных значений в виде синтезируемого кода Verilog.

Это для модуля, который предоставляет значения синусоидального сигнала в ЦАП.

reg [7:0] sine [0:19];

initial begin
    sine[0] = 8'd0;
    sine[1] = 8'd6;
    sine[2] = 8'd24;
    sine[3] = 8'd53;
    sine[4] = 8'd88;
    sine[5] = 8'd127;
    sine[6] = 8'd167;
    sine[7] = 8'd202;
    sine[8] = 8'd231;
    sine[9] = 8'd249;
    sine[10] = 8'd255;
    sine[11] = 8'd249;
    sine[12] = 8'd231;
    sine[13] = 8'd202;
    sine[14] = 8'd167;
    sine[15] = 8'd127;
    sine[16] = 8'd88;
    sine[17] = 8'd53;
    sine[18] = 8'd24;
    sine[19] = 8'd6;
end

Когда я компилирую код, ошибок нет, но возникает это критическое предупреждение:

Critical Warning (127005): Memory depth (32) in the design file differs from memory depth (20) in the Memory Initialization File "__.hdl.mif" -- setting initial value for remaining addresses to 0

Файл инициализации памяти:

-- begin_signature
-- DAC_SINE
-- end_signature
WIDTH=8;
DEPTH=20;

ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;

CONTENT BEGIN
    19 :    00000110;
    18 :    00011000;
    17 :    00110101;
    16 :    01011000;
    15 :    01111111;
    14 :    10100111;
    13 :    11001010;
    12 :    11100111;
    11 :    11111001;
    10 :    11111111;
    9 :     11111001;
    8 :     11100111;
    7 :     11001010;
    6 :     10100111;
    5 :     01111111;
    4 :     01011000;
    3 :     00110101;
    2 :     00011000;
    1 :     00000110;
    0 :     00000000;
END;

Как я могу избежать этого критического предупреждения? Нужно ли использовать минимальную глубину памяти?

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Я заменил модуль Verilog на System Verilog, который теперь сохраняет значения как битовый параметр 2D-массива (значения не меняются). С этой модификацией критическое предупреждение не появляется во время компиляции.

parameter bit [7:0] sine [0:19] = '{8'd0, 8'd6, 8'd24, 8'd53, 8'd88, 8'd127, 8'd167, 8'd202, 8'd231, 8'd249, 8'd255, 8'd249, 8'd231, 8'd202, 8'd167, 8'd128, 8'd88, 8'd53, 8'd24, 8'd6};
0 голосов
/ 04 июня 2019

Предполагаемое запоминающее устройство обычно будет основано на некоторых квантах минимального объема памяти, который зависит от используемой архитектуры чипа. Предполагая, что выведенная память действительно была выведена на глубину 32, о чем свидетельствует само предупреждение, я бы сказал, что лучшим способом действий является изменение MIF, как показано ниже. Таким образом, память будет полностью инициализирована, и проверка предупреждения выполнена.

-- begin_signature
-- DAC_SINE
-- end_signature
WIDTH=8;
DEPTH=32;

ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;

CONTENT BEGIN
    31 :    00000000;
    30 :    00000000;
    29 :    00000000;
    28 :    00000000;
    27 :    00000000;
    26 :    00000000;
    25 :    00000000;
    24 :    00000000;
    23 :    00000000;
    22 :    00000000;
    21 :    00000000;
    20 :    00000000;
    19 :    00000110;
    18 :    00011000;
    17 :    00110101;
    16 :    01011000;
    15 :    01111111;
    14 :    10100111;
    13 :    11001010;
    12 :    11100111;
    11 :    11111001;
    10 :    11111111;
    9 :     11111001;
    8 :     11100111;
    7 :     11001010;
    6 :     10100111;
    5 :     01111111;
    4 :     01011000;
    3 :     00110101;
    2 :     00011000;
    1 :     00000110;
    0 :     00000000;
END;
...