|
|
  |
Проблема с TRI буферами в EPF10K10QC208-3, Не синтезируется структура с TRI буферами на каждый вывод ПЛИС |
|
|
|
Jan 11 2010, 09:42
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
Доброго времени суток.
У меня есть проект в Quartus II 8.0 Web Edition, AHDL, EPF10K10QC208-3.
Когда я пытаюсь ко всем используемым 108 выводам подсоединить примитив TRI с управлением своим сигналом oe от регистра для каждого выхода, Quartus пишет, что не может это синтезировать с ошибкой типа: Error: Node "out[48]~156" of type logic cell has no legal location Error: Can't find fit где out - BIDIR port, который привязан к внешним выводам ПЛИС.
Fitter effort установлено в Standard Fit. В то же время, если использовать один сигнал oe для группы выводов - например, 2 группы по 54 вывода, структура синтезируется. Никаких присваиваний, кроме присваиваний элемнтов шины out внешним выводам, и других портов, выполнено не было.
Означает ли это сообщение, что такую структуру синтезировать в этой м/c в принципе нельзя?
|
|
|
|
|
Jan 12 2010, 08:46
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
Цитата(DmitryR @ Jan 11 2010, 18:47)  Посмотрите, register duplication включено? Трассировочных ресурсов для разводки одного OE на все выводы может быть в самом деле недостаточно, однако почему тогда компилятор не дублирует источник автоматически - неясно. Когда один сигнал OE на все выводы, то как раз все нормально синтезируется. Проблемы при попытке использовать свой отдельный сигнал OE для каждого вывода. Register duplication опция почему-то отсутствует в Fitter Settings->More settings для данного проекта. На странице Physical Synthesis Optimizations вообще все контролы, включая Perform register duplication, неактивны (не действуют и рисуются серым текстом).
|
|
|
|
|
Jan 12 2010, 13:53
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
Цитата(DmitryR @ Jan 12 2010, 11:49)  у этого кристалла один OE на банк. Посмотрите документацию внимательно. Извините, а вы бы не могли привести ссылку, где именно это указано. Я читаю документ dsf10k.pdf - FLEX 10K Embedded Programmable Logic Device Family Data Sheet, там на странице 30 есть картинка, где для каждого вывода есть свой регистр для хранения значения OE. При попытке компиляции, независимо от опций fitter-а, ругается всегда сначала на 49-й провод шины. До него 48 выводов с отдельными сигналами OE для каждого синтезируются нормально. Похоже проблема где-то в другом месте.
|
|
|
|
|
Jan 13 2010, 07:29
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
То есть если в проекте оставить 48 выводов с разными OE, он отсинтезируется? ДА. Более точно, первые 47 синтезируются (нумерация с 1), последний - подсоединен к PIN_120, а на 48-м, который назначен на PIN_119, происходит первая такая ошибка. Если отключить этот вывод, и попробовать синтезировать, то такое же сообщение (типа Error: Node "out[XX]~156" of type logic cell has no legal location) появляется и на несколько других из оставшихся используемых 108. Если их выборочно отключить, то структура с оставшимися выводами синтезируется.
|
|
|
|
|
Jan 13 2010, 13:56
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
Цитата(sazh @ Jan 13 2010, 11:19)  А Вы сбросьте ограничения на пины I/O и посмотрите. У Вас всего 134 I/O. Проект покажите. Он же примитивный. Чего гадать. При удалении assignments пинов появляются те же ошибки, но для других выводов. Часть проекта в AHDL, где назначаются выходы: CODE INCLUDE "lpm_decode.inc";
SUBDESIGN ssi ( out[108..01] :BIDIR; D[7..0] :BIDIR; A[7..0] :INPUT; nRD :INPUT; nWR :INPUT; nCS :INPUT; -- ALE :INPUT; )
Variable decmem0 : lpm_decode WITH (LPM_WIDTH=4, LPM_DECODES=14,LPM_PIPELINE=0); reg_out[13..00][07..00] : DFFE; -- addresses 0..13 reg_oute[13..00][07..00] : DFFE; -- addresses 16..39 dtri[07..00] : TRI; outtri[13..00][07..00] : TRI; BEGIN decmem0.data[] = a[3..0]; decmem0.enable = !nCS;
reg_out[][].prn = vcc; reg_out[][].clrn = vcc; reg_out[][].d = D[]; reg_out[][].clk = nWR;
reg_oute[][].prn = vcc; reg_oute[][].clrn = vcc; reg_oute[][].d = D[]; reg_oute[][].clk = nWR; -- generation of input structure for i in 0 to 13 generate reg_out[i][].ena = decmem0.eq[i] & !nCS & !a[4]; reg_oute[i][].ena = decmem0.eq[i] & !nCS & a[4]; end generate; -- generation of output structure for i in 0 to 12 generate outtri[i][].oe = reg_oute[i][].q; outtri[i][].in = VCC; --reg_out[i][].q; out[i*8+8..i*8+1] = outtri[i][].out; end generate; outtri[13][3..0].in = reg_out[13][3..0].q; out[108..105] = outtri[13][3..0].out; END;
|
|
|
|
|
Jan 14 2010, 07:58
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(GW83 @ Jan 13 2010, 16:56)  При удалении assignments пинов появляются те же ошибки, но для других выводов. Часть проекта в AHDL, где назначаются выходы: А зачем в этом куске двунаправленные входы выходы. Если что не получается, оформите как модуль с входами и выходами по третьему состоянию. а на верхнем уровне уже bidir Во всяком случае 8 квартус кушает 112 управляемы выходов по третьему состоянию на 10к10_208 (в максе работать это не будет) CODE module tri_oe ( input clk, input [7:0] data, input ena, input [3:0] sel, output [111:0] out );
reg [7:0] rg_dffe [13:0];
wire [111:0] rg;
integer i; always @(posedge clk) begin for (i=0; i<=13 ; i=i+1) if ((sel == i) && ena) rg_dffe[i] <= data; end
genvar j; generate for(j=0; j<=13; j=j+1) begin:block assign rg[j*8+7:j*8] = rg_dffe[j]; end endgenerate
genvar l; generate for(l=0; l<=111; l=l+1) begin:tri_oe assign out[l] = rg[l] ? 1'b0 : 1'bz; end endgenerate
endmodule
|
|
|
|
|
Jan 15 2010, 07:21
|
Группа: Участник
Сообщений: 12
Регистрация: 24-09-09
Из: Санкт-Петербург
Пользователь №: 52 551

|
sazh У меня это не скомпилировалось. А зачем в этом куске двунаправленные входы выходы. Если что не получается, оформите как модуль с входами и выходами по третьему состоянию. а на верхнем уровне уже bidir А это и есть верхний уровень. (ssi design entity). Двунаправленные выводы нужны, так как нужно и устанавливать значения на них, и считывать, что реально там снаружи есть после установки.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|