Перейти к содержанию

    

flammmable

Участник
  • Публикаций

    31
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о flammmable

  • Звание
    Участник

Посетители профиля

69 просмотров профиля
  1. IBIS - это модель входных-выходных буферов. Т.е. моделирование распространения сигнала в линии возможно, если с обоих сторон выводы микросхем с IBIS-моделями. А если я хочу промоделировать сигнал от микросхемы, который потом сниму осциллографом с разъема? Как быть тогда?
  2. - Создаю резистор в библиотеке. - В Library Component Properties снимаю галки в чекбоксах напротив Default Designator и Default Comment. - Добавляю резистору параметр №1 и параметр №2. - Ставлю параметру №1 галку в Visible, параметру №2 галку снимаю. - Сохраняю. - Кидаю на схему резистор - у него Designator, Comment и параметр №1 оказываются видимые. - Захожу на схеме в Properties for Schematic Component in Sheet, снимаю галки напротив Designator и Comment - они исчезают. Вопрос: на что влияет свойство Visible у Default Comment в Library Component Properties и как сделать так, что бы Default Comment не появлялся при броске компонента на схему?
  3. Правильно ли я понимаю, что для микросхем с фиксированным назначением выводов пара "Символ-футпринт" (компонент) является логической частью библиотеки. Путем подключения библиотеки мы используем один компонент в разных проектах (связь "один-ко-многим"). Но если мы работаем с ПЛИС, то "за скобки" может быть вынесен лишь футпринт, а символ становится частью проекта. Максимум - может быть символ-заготовка с отмеченными пинам для программирования и питания, который необходимо копировать и править его в конкретном проекте. Таков ли подход?
  4. Не, Qu не синтезирует ваш пример. И ModelSim не синтезирует ваш пример. Вообще, я не очень понимаю зачем и к чему вы его написали. Пример из первого поста Qu синтезирует стабильно, так же стабильно его не синтезирует ModelSim
  5. Хотелось бы увидеть нормальную группировку атрибутов сущности. Хотелось бы увидеть как атрибут сущности объявляется один раз (а не один раз во внешнем модуле, один раз во внутреннем модуле и еще два раза его имя нужно написать при подключении этого модуля). А какую задачу решает конструкция struct? Никак. Данный пример не соберется ни в Квартусе, ни в МоделСиме. Заглавный же пост о том, что один и тот же код одной системой считается верным, а другой системой - ошибочным. О том, что интерпретация инженерами Ментора стандарта SystemVerilog обессмысливает одну синтаксическую конструкцию. И о том, как бы побороть это зло.
  6. Звучит логично. Жаль. Не хотелось бы имена регистров копировать четыре раза вместо одного, используя module для группировки. Посмотрю что скажет Мегратек (и вообще) и покорюсь судьбе :)
  7. Спасибо за комментарии. Кое-что удалось выяснить. 1. Зачем вся эта тема нужна? Вот пара примеров группировки атрибутов (при помощи модуля и при помощи структуры): Модуль: module test013_LITERAL ( output some_output ); logic reg_C; logic reg_A_for_submodul;//первое упоминание reg_A logic reg_B_for_submodul; logic reg_C_for_submodul;//придумать уникальное название во избежание пересечения имен submodul(.reg_A(reg_A_for_submodul),//второе и третье упоминание reg_A .reg_B(reg_B_for_submodul), .reg_C(reg_C_for_submodul)); assign some_output = reg_C_for_submodul; endmodule module submodul( input reg_A,//четвертое упоминание reg_A input reg_B, output reg_C ); endmodule Структура: module test013_LITERAL ( output some_output ); logic reg_C; struct{logic reg_A; //только одно упоминание reg_A logic reg_B; logic reg_C;//можно не опасаться пересечения имен } struct_example; assign some_output = struct_example.reg_C; endmodule Вам как было бы удобней производить группировку? 2. Вопрос веры :) Некоторые полагают, что элементы enum не вызвать через точку. Другие полагают, что можно, но синтаксис SystemVerilog таков, что вынесет элементы enum во внешнюю область видимости. Рабочий пример: module test013_LITERAL ( output [3:0]first_literal, output [3:0]second_literal ); struct{enum{SOME_LITERAL_0_FIRST, SOME_LITERAL_1_FIRST, IDLE, SOME_LITERAL_3_FIRST, SOME_LITERAL_4_FIRST} enum_reg; } first_struct; struct{enum{SOME_LITERAL_0_SECOND, SOME_LITERAL_1_SECOND, SOME_LITERAL_2_SECOND, IDLE, SOME_LITERAL_4_SECOND} enum_reg; } second_struct; assign first_literal = first_struct.IDLE; assign second_literal = second_struct.IDLE; endmodule Результаты компиляции на Quartus Prime 17.1.0 для MAX-10 10M02SCE144C8G: Info (293000): Quartus Prime Full Compilation was successful. 0 errors, 32 warnings Результат работы прошивки на лампочках демоплаты (линейка из восьми светодиодов): 0010 0011 3. Кто что говорит. Altera-forum - молчит. Verification Academy от Mentor - молчит. StackOverflow - говорит, что на одном из трех симуляторов мой код заработал. Так же там ссылаются на раздел 23.9 стандарта IEEE 1800-2017 и утверждают, что struct не создает scope (пффф, а зачем он тогда вообще нужен?), но проверить это утверждение пока не представляется возможным ввиду отсутствия у меня IEEE 1800-2017. Мы продолжаем следить за событиями.
  8. Хороший документ. Хороший вариант - делать группировку при помощи модулей. Однако странно, что в этом документе нет ни одного упоминания конструкции "struct". Применяете ли вы структуры? Если да, то в каких случаях? Если нет, то как полагаете, для чего данная конструкция языка может быть нужна и нужна ли?
  9. - Как? - Иначе! ©Badcomedian Хорошо, это не C/C++. Поэтому, например, исходя из каких-то соображений элементы struct могут иметь или блокирующее или не блокирующее присвоение. Хотя такое ограничение несколько странно, но допустим дело в том, что компилятор расположит отдельные биты этих элементов рядом и... (и что дальше?) и не знаю, но допустим это как-то связано со структурой ПЛИСов. Ладно, то - такое. Но! Как вы верно отметили "IDLE" - сугубо синтаксическая абстракция. Для нее. Надо. Просто. Сделать. Ограничение. Видимости. Потому как в противном случае ситуация следующая: 1. Есть конечный автомат как некая сущность. 2. У этого автомата есть некоторые атрибуты. 3. Эти атрибуты можно сгруппировать в struct. 4. В этот же struct можно внести и список состояний автомата. 5. Причем значения этих состояний можно получать через "имя_структуры.имя_состояния". 6.1. Но! IDLE, который есть у большинства автоматов надо вынести отдельно и обращаться к нему напрямую! 6.2. Или придумать для каждой машины свое название IDLE. Имена регистров повторяются - на здоровье. Имена состояний - ни за что! 6.3. Или атрибуты сгруппировать в struct, а состояния целиком вынести в блок параметров, хотя синтаксис позволяет enum-у находится внутри struct. 6.4. Или вообще не пользоваться struct. Мне сложно поверить, что дело в синтаксисе SystemVerilog. Он не мог быть сделан так тупо. Я уверен - дело в каких-то настройках ModelSim и/или Quartus.
  10. Эмм. Внутри самого Quartus удается вполне успешно обращаться к одинаковым именам enum-ов в различных struct. Типа того... first_machine.FSM <= first_machine.IDLE; first_machine.FSM <= first_machine.SOME_STAGE_1; second_machine.FSM <= second_machine.IDLE; second_machine.FSM <= second_machine.SOME_STAGE_2; И Quartus на такой синтаксис не ругается. Т.е. не понятно: 1) если struct организует ограничение видимости, то чего хочет ModelSim? 2) если struct НЕ организует ограничение видимости, то начерта такой struct нужен? 3) если struct организует ограничение видимости, но только для переменных регистров, а для enum - нет и при этом сам Quartus ошибок не выдает, то... Я даже не знаю, то - что? P.S. На меня Quartus ругнулся, когда я разным переменным регистрам из одного struct сделал блокирующее и неблокирующее присвоение. Он сказал "Нет уж! Или всем регистрам так, или всем регистрам эдак!". Но обсуждаемом случае никаких ошибок от Quartus не было.
  11. Сделал в одном модуле несколько структур (struct) с разными именами. Внутри каждой структуры есть перечислимый тип (состояния конечного автомата). Ну и у каждой структуры есть состояние автомата IDLE. Сам Quartus собирает проект без ошибок. Но ModelSim-Altera говорит Enum literal name 'IDLE' already exists.. "Очищенный" пример: Code.sv `timescale 1 ns/ 1 ns module test013_LITERAL ( input A, input B, output C ); struct{enum{IDLE, SOME_STAGE_1} FSM; logic some_register; } first_machine; struct{enum{IDLE, SOME_STAGE_2} FSM; logic some_register; } second_machine; assign C = A ^ B; endmodule testbench.vt `timescale 1 ns/ 1 ns module testbench(); reg test_A; reg test_B; wire test_C; test013_LITERAL DUT (.A(test_A), .B(test_B), .C(test_C)); initial begin #100 test_A = 0; test_B = 0; #100 test_A = 1; test_B = 0; #100 test_A = 0; test_B = 1; #100 test_A = 1; test_B = 1; end endmodule Что я делаю не так?
  12. Большое спасибо. Могли бы вы рассказать, где и как делается настройка переменных ModelSim-Altera в Quartus? Искал как задать/настроить define в ModelSim-Altera/Quartus по словам "quartus altera modelsim variable settings define ifdef" и их комбинациям - не нашел решения. Сделал, как вы советовали - работает. Спасибо, буду делать так. Хотя данные выражения звучат как заклинание.
  13. Возможно ли в verilog обозначить часть входов/выходов модуля только для симуляции? Что бы можно было один и тот же проект (не внося изменений) запустить как на симуляцию так и на сборку прошивки.
  14. Есть ли какое-то подобие MISRA-C, но только для Verilog? Пока нашел стандарт разработки от Freescale. Вообще, есть ли у вас корпоративные/личные правила разработки? Какие вы ставите префиксы у названий переменных регистров и цепей? Предпочитаете camelCase или under_score? Как размещаете состояния FSM внутри always? Предпочитаете FSM с одним или с двумя always? И т.д.
  15. Подумал, будет разумно оставить напоминание в Сети всем, кто будет работать по старым мануалам и не сможет найти этот пункт меню. С доказательствами и ссылками на документы. Типа "не ищите, его нет". Ну и на жизнь пожаловаться, чего уж ) А за ваши ссылки - большое спасибо.