SM 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба А про их реальные возможности интересно было узнать. Поэтому и сделал предложение: Вот ведь как интересно - Вам интресно, а другие - давай вникай, разбирайся, потом разжевывай :) Может бы наоборот, раз уже это в первую очередь Вам интересно, поглядели бы на доки, прикинули бы что там к чему, да нам рассказали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба Синтезируемый модуль "Hello,world!", ~15 ЛУТ, ~300МГц (Спартан3): module tst( output reg [7:0] q, input clk ); always@(posedge clk) begin seq(); out("H"); out("e"); out("l"); out("l"); out("o"); out(","); out("w"); out("o"); out("r"); out("l"); out("d"); out("!"); out(""); end reg [3:0] pos = 1; reg [3:0] pc = 1; task seq; begin pos = 1; end endtask task out; input [7:0] d; begin if( pc == pos ) begin pc <= pc+1; q <= d; end pos = pos+1; end endtask endmodule Предлагайте свои варианты описания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба Предлагайте свои варианты описания. module test2( output reg [7:0] q, input clk ); logic [11:0][7:0] let = {"H","e","l","l","o", ",", "W","o","r","l","d", " "}; logic [3:0] pos = 4'd11; always_ff @(posedge clk) if(pos > 0) pos <= pos - 1'b1; always_ff @(posedge clk) q <= let[pos]; endmodule Cyclone III, 681 Мгц, 11 LE. При том, что Ваш модуль на этом же Циклоне: 376 Мгц, 19 LE. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба module tst( output reg [7:0] q, input clk ); reg [8*12-1:0] let = "Hello,world "; reg [3:0] pos = 11; always@(posedge clk) begin q <= let[pos*8 +: 8]; if(pos > 0) pos <= pos-1; end endmodule - 12 ЛУТ в ISE. Просто меня сейчас интересуют разные общие варианты описания "последовательных" алгоритмов ("устройство печати ..." и тп). Вот и обратил внимание на task-и. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба Leka: Да, что-то я не подумал, о том, что с упакованным массивом можно и проще: logic [11:0][7:0] let = "Hello,world "; А так, по результатам синтеза, наши последние варианты идентичны. :) Только у Вас со строкой лучше вышло, но при этом такие строки, как: q <= let[pos*8 +: 8]; мне нравятся меньше. Перегружают код. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба ISE не понимает SV, поэтому проблемы с массивами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 18 марта, 2010 Опубликовано 18 марта, 2010 · Жалоба ISE не понимает SV, поэтому проблемы с массивами. Велкам ту Альтера! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 19 марта, 2010 Опубликовано 19 марта, 2010 (изменено) · Жалоба Попробовал синтез со вложенными циклами на task-ах: reg [7:0] loopvar [1:0]; always@(posedge clk) begin seq(); out(13); out(10); out("H"); out("e"); out("l"); out("l"); out("o"); out(13); out(10); loop(0, 1); out(13); out(10); loop(1, "0"); out(loopvar[1]); endloop(1, "9"); out(13); out(10); loop(1, "A"); out(loopvar[1]); endloop(1, "Z"); out(13); out(10); loop(1, "a"); out(loopvar[1]); endloop(1, "z"); out(13); out(10); endloop(0, 3); out(13); out(10); out("B"); out("y"); out("e"); out(13); out(10); out("."); end - 70 ЛУТ, вывод (250 тактов): . Hello 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz Bye ....................... Долой case-стиль описания FSM ? Изменено 19 марта, 2010 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Попробовал добавить пару условных переходов на task-ах в пример выше - 75 ЛУТ. Так что уже есть минимальный набор для описания последовательных алгоритмов в стиле ЯП - вложенные циклы и условные переходы. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Попробовал добавить пару условных переходов на task-ах в пример выше - 75 ЛУТ. Так что уже есть минимальный набор для описания последовательных алгоритмов в стиле ЯП - вложенные циклы и условные переходы. :rolleyes: Вы что,хотите в итоге описывать синтезируемые модули в стиле ЯП? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Вы что,хотите в итоге описывать синтезируемые модули в стиле ЯП? :) Не целиком, а только в части последовательных алгоритмов - интерфейсы, переборы, итерации и тд и тп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Написал первый вариант "устройства печати таблицы умножения", ~340 LE ~100 МГц в Квартусе, ISE зависает... (просимулировал в Icarus verilog). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 20 марта, 2010 Опубликовано 20 марта, 2010 · Жалоба ISE зависает... Теперь и синтезирует, и симулирует, в чем ошибка была - пока не понял. А как в Квартусе симулировать, так и не понял - tb() на Верилоге не берет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 20 марта, 2010 Опубликовано 20 марта, 2010 · Жалоба Нюансы синтаксиса в task-ах :07: : if ( a == b ) if ( c ) ... - зависает в ISE и дает 340 ЛЕ в Квартусе; if (( a == b ) && c ) ... - синтезируется в ISE и дает 270 ЛЕ в Квартусе; if ( ab && c ) ... //wire ab = ( a == b ); - неправильно симулируется в ISE. В Icarus Verilog - все варианты дают одинаковый результат симуляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 20 марта, 2010 Опубликовано 20 марта, 2010 (изменено) · Жалоба module tst( output reg q1, q2); reg d; wire q = d; always@* begin d = 1; q1 <= q; d = 0; q2 <= q; end endmodule q1=? Почему? Изменено 20 марта, 2010 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться