shn 0 2 марта, 2016 Опубликовано 2 марта, 2016 (изменено) · Жалоба Quartus 8.1, ПЛИС FLEX10KE (5576ХС4Т) Ожидал, что синтезируется на блочной памяти, но нет... Хотелось бы, чтобы этот код все таки синтезировался на блочной памяти. module GF_ALU #( parameter m = 4, // Степень образующего многочлена. parameter f = 'b1001 // Образующий многочлен. ) ( input wire clk, input wire [m - 1:0] A, input wire [m - 1:0] B, output reg [m - 1:0] Y ); integer i, j; integer n; integer GF; integer feedback; integer GF_exp [(1 << m) - 2:0]; integer GF_log [(1 << m) - 1:1]; reg [m - 1:0] MUL_Table [(1 << m) - 1:0][(1 << m) - 1:0]; initial begin n = (1 << m) - 1; GF = 1; for (i = 0; i < n; i = i + 1) begin GF_exp[i] = GF; GF_log[GF] = i; feedback = (GF >> (m - 1)) & 1; if (feedback) begin GF = GF ^ f; end GF = ((GF << 1) | feedback) & n; end for (i = 0; i < (1 << m); i = i + 1) begin for (j = 0; j < (1 << m); j = j + 1) begin if (i == 0 || j == 0) MUL_Table[i][j] = 0; else MUL_Table[i][j] = GF_exp[(GF_log[i] + GF_log[j]) % n]; end end end always @(posedge clk) begin Y = MUL_Table[A][B]; end endmodule Да, тут лучше сделать конвейерную схему, но пока хочется сделать так. Или стоит все это сделать совсем по другому? Изменено 2 марта, 2016 пользователем shn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 марта, 2016 Опубликовано 3 марта, 2016 · Жалоба Quartus 8.1, ПЛИС FLEX10KE (5576ХС4Т) Ожидал, что синтезируется на блочной памяти, но нет... Ква старый, может не понимать многомерные ROM, сделайте одномерную. Если не поможет, то классически. Через предварительный расчет таблиц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shn 0 4 марта, 2016 Опубликовано 4 марта, 2016 · Жалоба Одномерный массив не помогает. Попробовал сделать умножитель на константу Y = MUL_Table[A][константа]; (для кодера Рида-Соломона). Результат синтеза неплохой, но при 7-ой степени многочлена квартус очень долго это синтезирует, а с 8-ой степенью не дождался результата. При этом никакой избыточности, задержки везде маленькие ~15 нс. Обидно. Что он так долго может считать? Modelsim этот массив считает мгновенно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 4 марта, 2016 Опубликовано 4 марта, 2016 · Жалоба Одномерный массив не помогает. Попробовал сделать умножитель на константу Y = MUL_Table[A][константа]; (для кодера Рида-Соломона). Результат синтеза неплохой, но при 7-ой степени многочлена квартус очень долго это синтезирует, а с 8-ой степенью не дождался результата. При этом никакой избыточности, задержки везде маленькие ~15 нс. Обидно. Что он так долго может считать? Modelsim этот массив считает мгновенно. Я сталкивался с тем, что Квартус очень долго синтезирует inferred ROM в блочной памяти, даже если считать ничего не надо - ROM была описана одним битовым вектором. Так что пришлось использовать мегафункцию и генерировать HEX файл для инициализации специальным скриптом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться