CaPpuCcino 0 March 7, 2007 Posted March 7, 2007 · Report post А Квартус поймет always_comb и always_latch ? Надо будет попробовать. Вообще мне такие процессы больше нравятся - понятно что получится. извините-не знаю(есть сомнение что поддерживает) - пользуюсь сторонними компиляторами (Синплифай и Пресижн) - полнее всего синтезабельное множество SystemVerilog поддреживает Менторовский Пресижн - который меня в этом плане очень радует (Синплифай очень обленился в плане внедрения языковых технологий - смотрю на эту компанию в последнее время с большим разочарованием - хотя конечно и они поддерживают эти _ff, _comb, _latch - возможно что и последние версии альтеровских САПР подросли в области синтаксического анализа - проверьте -- в конце концов очень порсто в случае чего заменить always_comb на always@* ) В Verilogе (точнее в той его части которая предназначена для тесбенчеей) еще довольно много таких "нюансов"(и гемороя с ними предостаточно). например? поделитесь, пожалуйста, парочкой Quote Share this post Link to post Share on other sites More sharing options...
klop 0 March 7, 2007 Posted March 7, 2007 · Report post например? поделитесь, пожалуйста, парочкой Ну вот например то что касается non-reentrant tasks. Хотя никаких неопределенностей с ними нету(в стандарте все сказано) но некий гемморой у меня недавно вышел. Читайте "Writing Testbenches". Quote Share this post Link to post Share on other sites More sharing options...
Andr2I 0 March 8, 2007 Posted March 8, 2007 · Report post CaPpuCcino А чем плох assign? Просмотрел - Квартус не поддерживает always_comb и always_latch. Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 March 8, 2007 Posted March 8, 2007 · Report post assign - это хорошо в верилоге. Вне процесса много чего для наглядности реализовать можно. Наверно после верилога и на system верилог можно перейти. (Поставить нужную галочку в пакете). А смешивать наверно не получиться. Quote Share this post Link to post Share on other sites More sharing options...
Andr2I 0 March 8, 2007 Posted March 8, 2007 (edited) · Report post sazh Наверно после верилога и на system верилог можно перейти. (Поставить нужную галочку в пакете). Т.е. Вы намекаете, что в квартусе можно установить галку и получить system verilog? Edited March 8, 2007 by Andr2I Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 March 8, 2007 Posted March 8, 2007 · Report post Assignments - settings - Analysis&synthesis - verilogHDL input Quartus6 поддерживает system verilog Только хорошо подумайте, а Вам это надо. Особенно после AHDL, где даже понятия фронта сигнала нет. Значит мыслите Вы базовыми примитивами и макросами. Зачем Вам неоправданно завышенный уровень абстракции (мы говорим о синтезе). Не говоря о том, что от MAX+ Вы наверно не скоро откажетесь. Перейти на верилог от AHDL очень просто. Quote Share this post Link to post Share on other sites More sharing options...
CaPpuCcino 0 March 8, 2007 Posted March 8, 2007 · Report post Ну вот например то что касается non-reentrant tasks. Хотя никаких неопределенностей с ними нету(в стандарте все сказано) но некий гемморой у меня недавно вышел. Читайте "Writing Testbenches". понимаете-книжечки эти давно устарели - данная писалась ещё для Верилог-96. с той поры уже много воды утекло - а о Верилоге всё еще судят по его самому первому стандарту. таски уже давно reentrant - в SystemVerilog точно (и кажись даже ещё с Verilog-2k1) по крайней мере у Моделсима никаких проблем с моделированием SV нет -- только галочку в настройке компилятора поставить нужно - там вам будет и динамик таски (а хотите хоть даже и со статическими переменными) и статические таски и функции возвращающие void, и хоть чёрта в ступе :) (к стати советую поглядеть в стандарт SV - можно много вкусного для себя найти, а если есть доступ посмотрите еще Саузерленда СистемВерилог фор дизайн - я засыпал в закрома, хотя и верилоговские стандарты читаются как палп-фикшен ) CaPpuCcino А чем плох assign? Просмотрел - Квартус не поддерживает always_comb и always_latch. да нет - он конечно ничем не плох совершенно -- но ток получается что его функции дулированы -- почему б тогда не перейти к однообразию конструкций - вот его и хотят отвести на задний план (конечно его не станут выкидывать из стандарта - хотя бы потомучто они должны быть обратносовместимы) Только хорошо подумайте, а Вам это надо. Особенно после AHDL, где даже понятия фронта сигнала нет. Значит мыслите Вы базовыми примитивами и макросами. Зачем Вам неоправданно завышенный уровень абстракции (мы говорим о синтезе). Не говоря о том, что от MAX+ Вы наверно не скоро откажетесь. Перейти на верилог от AHDL очень просто. это вы по принципу - Зачем Привыкать к Хорошему ?? :rolleyes: Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 March 8, 2007 Posted March 8, 2007 · Report post Чтобы привыкнуть к хорошему. Нужно попытаться рассмотреть поближе это хорошее. Особенно когда учителей раз и обчелся. Давайте начнем на раз (AHDL) parameters (width = 4); subdesign generat_e ( a[width-1..0] : input; b[width-1..0] : output; c[2*width-1..0] : output; ) begin for i in 0 to width-1 generate b = a[width-1-i]; c[2*i] = a; c[2*i+1] = a; end generate; end; На два (верилог) module generat_e #( parameter width = 4 ) ( input [width-1:0] a, output [width-1:0] b, output [2*width-1:0] c ); genvar i; generate for (i = 0; i < width; i = i + 1) begin : block assign b = a[width-1-i]; assign c[2*i] = a; assign c[2*i+1] = a; end endgenerate endmodule На три (тут я пас). Но надежд не оставляю. Quote Share this post Link to post Share on other sites More sharing options...
CaPpuCcino 0 March 8, 2007 Posted March 8, 2007 · Report post to sazh ну здесь-то реально особо места для фантазии не много -- особо не разойдёшься Quote Share this post Link to post Share on other sites More sharing options...
Andr2I 0 March 8, 2007 Posted March 8, 2007 · Report post sazh Я сегодня попробовал переписать старый проект под verilog - так ить вроде и ничего - яйца теже - вид сбоку! Про уровнь абстракции - спорить не буду, но пока не понимаю почему использование always_comb повышает уровень абстракции (на мой взгляд даже мешает вместе reg и wire). Да я мыслю на уровне регистров, когда пишу модуль, но используя модуль я мыслю на уровне модулей. Более того часто мне приходится мыслить на уровне дискретного трназистора (реального!), ну и чем это плохо если схема работает? На мой несведущий взгляд, модно заменять assign на always_comb (с заменой переменных на reg) сравнительно свободно, но другой вопрос зачем? Quote Share this post Link to post Share on other sites More sharing options...
dxp 112 March 9, 2007 Posted March 9, 2007 · Report post Про уровнь абстракции - спорить не буду, но пока не понимаю почему использование always_comb повышает уровень абстракции (на мой взгляд даже мешает вместе reg и wire). Уровень абстракции повышается при переходе от dff к always - в первом случае Вы оперируете примитивами, во втором описываете только поведение объектов. А примитивы уже синтезатор сам генерит, исходя из заданных условий (технология, времянкии т.д.). Quote Share this post Link to post Share on other sites More sharing options...
Andr2I 0 March 9, 2007 Posted March 9, 2007 · Report post dxp Уровень абстракции повышается при переходе от dff к always - в первом случае Вы оперируете примитивами, во втором описываете только поведение объектов. А примитивы уже синтезатор сам генерит, исходя из заданных условий (технология, времянкии т.д.). С этим абсолютно согласен. Но все равно я пока не могу абстрагироваться от reg и wire. Первые для меня тактируемые ячейки, вторые - просто комбинация простой логики. По сути я описываю алгоритм работы - что делать после уже сделанного. Может неправильный подход? Quote Share this post Link to post Share on other sites More sharing options...
dxp 112 March 9, 2007 Posted March 9, 2007 · Report post С этим абсолютно согласен. Но все равно я пока не могу абстрагироваться от reg и wire. Первые для меня тактируемые ячейки, вторые - просто комбинация простой логики. reg - не триггер. И не регистр в аппаратном смысле. Это регистр в том смысле, что он хранит свое состояние (регистрирует) между последовательными запусками always-блока. Если запуски блока идут по фронту тактового сигнала, то reg превращается в триггер (элемент синхронной логики), если запуски блока идут без перерывов - как в случае с комбинационным блоком, то reg вырождается в сигнал комбинационной логики или защелку. Абстрагироваться не надо, просто запомните твердо, что в Верилоге reg != триггер. :) Quote Share this post Link to post Share on other sites More sharing options...
CaPpuCcino 0 March 10, 2007 Posted March 10, 2007 · Report post Читайте "Writing Testbenches". кстати, существует апдэйт этой книжки: "Writing Testbenches using SystemVerilog"(J.Bergeron) у кого-нить есть на руках? Quote Share this post Link to post Share on other sites More sharing options...
PAB 0 March 23, 2007 Posted March 23, 2007 · Report post CaPpuCcino А чем плох assign? Просмотрел - Квартус не поддерживает always_comb и always_latch. Судя по тому, что написано в quartus|| version 7.0 handbook, квартус поддерживает и always_comb, и always_latch. Вопрос к CaPpuCcino: у вас есть опыт успешно завершённого проекта, в котором вы использовали SystemVerilog? Quote Share this post Link to post Share on other sites More sharing options...