alman 0 April 18, 2014 Posted April 18, 2014 (edited) · Report post Уважаемые коллеги, помогите разобраться в причинах разного поведения при симуляции в Icarus Verilog и при работе в ПЛИС. В симуляторе всё работает как и задумывалось - в логе всё красиво и в GTKWave все сигналы соответствуют задуманному. Всё меняется при переносе проекта в ПЛИС - в какой-то момент сигналы на одной из выходных шин "портятся". Выходной порт объявлен как регистр. Возможно стОит обратить внимание, не пишут ли в него друге модули? Проостите, если вопрос глупый, но ответа в FAQ и на первых 5 страницах я не нашел. Думаю, что причины различного поведения в симуляторе и в "железе" могут быть разные. В идеале, хотелось бы получить список в виде приоритетов причин, по которым поведение может отличаться. Спасибо. p.s. Использую Quartus II v12.1 Говорят, в тринадцатом Квартусе есть встроенный симулятор? Edited April 18, 2014 by alman Share this post Link to post Share on other sites More sharing options...
zambezi 0 April 18, 2014 Posted April 18, 2014 (edited) · Report post Вопрос зачетный :) Ответ простой, смотрите timing constraints и clock domains. Edited April 18, 2014 by zambezi Share this post Link to post Share on other sites More sharing options...
SFx 0 April 18, 2014 Posted April 18, 2014 · Report post 1. в квартусе стимулятор всегда был. 2. выложите части кода которые на выходе Share this post Link to post Share on other sites More sharing options...
Sefo 0 April 19, 2014 Posted April 19, 2014 · Report post Выходной порт объявлен как регистр. Эта фраза говорит о том, что скорее всего у Вас код неправильный. Дело в том, что в верилоге reg не означает регистр. Поэтому объявить порт регистром невозможно и ваш порт регистром, скорее всего, не является. Код в студию! Как раз из последних Квартусов встроенный стимулятор убрали. Есть только в старых версиях. Share this post Link to post Share on other sites More sharing options...
iosifk 2 April 19, 2014 Posted April 19, 2014 · Report post Уважаемые коллеги, помогите разобраться в причинах разного поведения при симуляции в Icarus Verilog и при работе в ПЛИС. В симуляторе всё работает как и задумывалось - в логе всё красиво и в GTKWave все сигналы соответствуют задуманному. Скорее всего где-то есть асинхронное проектирование... Share this post Link to post Share on other sites More sharing options...
Pavia 0 April 19, 2014 Posted April 19, 2014 · Report post Как раз из последних Квартусов встроенный стимулятор убрали. Есть только в старых версиях. Как раз таки вы не правы. В 13 и 13.1 он есть. Да и в других тоже был. http://www.altera.com/education/univ/softw...m/unv-qsim.html Share this post Link to post Share on other sites More sharing options...
Sefo 0 April 19, 2014 Posted April 19, 2014 · Report post Как раз таки вы не правы. В 13 и 13.1 он есть. Да и в других тоже был. http://www.altera.com/education/univ/softw...m/unv-qsim.html Да, попутал чего-то. Я, видимо, с Timing Analyzer перепутал - его они бесповоротно на TimeQuest Timing Analyzer заменили Share this post Link to post Share on other sites More sharing options...
StewartLittle 9 April 20, 2014 Posted April 20, 2014 · Report post Скорее всего где-то есть асинхронное проектирование... + несоответствие модели входного воздействия реальным входным сигналам. Share this post Link to post Share on other sites More sharing options...
lennox 0 April 20, 2014 Posted April 20, 2014 (edited) · Report post Поэтому объявить порт регистром невозможно . а почему? .. output reg oDONE=0 .. always @(posedge iCLK) oDONE <= ... Edited April 20, 2014 by dcs Share this post Link to post Share on other sites More sharing options...
iosifk 2 April 20, 2014 Posted April 20, 2014 · Report post а почему? .. output reg oDONE=0 .. always @(posedge iCLK) oDONE <= ... Этот фрагмент кода говорит о том, что выходы РЕГИСТРА "oDONE" подаются на выходной ПОРТ с тем же именем. А ПОРТ не может быть РЕГИСТРОМ... Share this post Link to post Share on other sites More sharing options...
Sefo 0 April 20, 2014 Posted April 20, 2014 · Report post а почему? .. output reg oDONE=0 .. always @(posedge iCLK) oDONE <= ... Кроме того, что ... ПОРТ не может быть РЕГИСТРОМ... в силу того, что это совершенно разные понятия, я имел ввиду еще и следующее. Когда Вы пишите, что объявили A регистром, то это значит, что А является регистром в силу объявления, а не в силу использования. Например, когда Вы объявляете А как integer, то Вы не сможете присвоить А ничего, что не может быть преобразовано к integer. В Verilog нет такого типа, как регистр. Именно поэтому объявить что-то регистром невозможно. Начинающие очень часто считают что reg в Verilog означает регистр и поэтому "reg A;" считают за объявление регистра. Однако, это не так. Будет А регистром или нет определяется использованием, а не объявлением. И в вашем примере регистр oDONE появится на свет только благодаря тому, что есть always @(posedge iCLK) Причем, регистр будет называться oDONE только в силу того, что практически все синтезаторы используют примерно одинаковый алгоритм наименования синтезируемых примитивов. При обсуждении кода инженеры тоже назовут oDONE регистром, опираясь на смысл кода, а не на строчку с объявлением (ну, во всяком случае такой логике будут придерживаться опытные инженеры). Еще необходимо понимать, что код always @(posedge iCLK) oDONE <= ... только для синтезатора является регистром, а вот симулятор этот код так не интерпретирует. При этом, поведение при симуляции полностью совпадает с поведением регистра, но, повторюсь, симулятор не считает это регистром. Например, в VHDL шаблон описания регистра несколько иной. В VHDL если в списке чувствительности process не указать клок, то для синтезатора это не будет проблемой - он "понимает", что описан регистр по другим "признакам" - синтезатор поставит регистр. Зато при симуляции регистр ни разу не сработает, если список чувствительности у process отсутствует. Share this post Link to post Share on other sites More sharing options...
Golikov 0 April 20, 2014 Posted April 20, 2014 · Report post Что практически дает столь тонкое чувство нюансов? Share this post Link to post Share on other sites More sharing options...
lennox 0 April 20, 2014 Posted April 20, 2014 · Report post Еще необходимо понимать, что код always @(posedge iCLK) oDONE <= ... только для синтезатора является регистром, а вот симулятор этот код так не интерпретирует. При этом, поведение при симуляции полностью совпадает с поведением регистра, но, повторюсь, симулятор не считает это регистром. это еще почему? Вы ошибаетесь Share this post Link to post Share on other sites More sharing options...
Sefo 0 April 20, 2014 Posted April 20, 2014 · Report post это еще почему? Вы ошибаетесь Хотелось бы увидеть развернутую аргументацию почему Вы считаете, что я ошибаюсь. Ответьте, пожалуйста, на несколько простых вопросов: 1) Всякую ли и всегда ли синтаксически правильную конструкцию синтезатор сможет воплотить физически в FPGA/ASIC? 2) Всякую ли и всегда ли синтаксически правильную конструкцию симулятор сможет просимулировать? 3) Зачем синтезатору нужно "уметь" код типа always @(posedge iCLK) oDONE <= А; интерпретировать как регистр? 4) Зачем симулятору нужно "уметь" код типа always @(posedge iCLK) oDONE <= А; интерпретировать как регистр? 5) В чем, на ваш взгляд, заключается разница между задачей синтеза и моделирования (симуляции)? 6) Вы все еще считаете, что я ошибаюсь? Share this post Link to post Share on other sites More sharing options...
lennox 0 April 20, 2014 Posted April 20, 2014 (edited) · Report post Хотелось бы увидеть развернутую аргументацию почему Вы считаете, что я ошибаюсь. Ответьте, пожалуйста, на несколько простых вопросов: 1) Всякую ли и всегда ли синтаксически правильную конструкцию синтезатор сможет воплотить физически в FPGA/ASIC? 2) Всякую ли и всегда ли синтаксически правильную конструкцию симулятор сможет просимулировать? 3) Зачем синтезатору нужно "уметь" код типа always @(posedge iCLK) oDONE <= А; интерпретировать как регистр? 4) Зачем симулятору нужно "уметь" код типа always @(posedge iCLK) oDONE <= А; интерпретировать как регистр? 5) В чем, на ваш взгляд, заключается разница между задачей синтеза и моделирования (симуляции)? 6) Вы все еще считаете, что я ошибаюсь? 1)нет 2)не знаю, уверен что нет! 3)за тем, что так посчитал разработчик! если он так не думает, то надо ему объяснить!! (с помощью констрейнов) есть другие варианты? 4)как иначе? 5) 6) да Edited April 20, 2014 by dcs Share this post Link to post Share on other sites More sharing options...