Jump to content

    

Andy-P

Свой
  • Content Count

    56
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Andy-P

  • Rank
    Участник

Контакты

  • ICQ
    Array

Recent Profile Visitors

1367 profile views
  1. Когда Алтера рекламировала свой новый движок для будущих поколений Prime - Spectra-Q, было заявлено: "Spectra-Q synthesis — stricter language parser with enhanced language support, faster algorithms, and true parallel synthesis". Однако новый синтез достался только Prime Pro. В поддержке Verilog/SystemVerilog для обычного Prime я не заметил отличий от предыдущих версий. Но, как видим, возможны сюрпризы. Собственно интерфейсы, согласно документации, поддерживаются, тут никаких противоречий. Кстати, в Quatus’s language templates имеют место modport ("запрещенные")! Не одними интерфейсами… возможно замечены другие "не разрешенные" вещи?
  2. Прочитал вопрос из соседнего форума, где ТС дали ссылку на пример применения интерфейсов от dxp (2013 год) В примере используются modport and modport expressions. dxp отвечает на вопрос Годом позже в этой же теме des00 Наши дни - quartushelp т.е., modport and modport expressions не поддерживаются. Предполагаю, что этот раздел help давно не обновляли. Если вы, уважаемые коллеги, знаете о других несоответствиях реалий с декларациями: Quartus Prime Verilog HDL Support Quartus Prime Support for Verilog 2001 Quartus Prime Support for SystemVerilog поделитесь, пожалуйста, этими радостными новостями.
  3. Для проверки результата функции $bits(message_alligned) использовал следующий пример: module tst_bit_struct ( input wire rst, // Active high reset clk, // Clock d_in, // Serial data input output logic d_out // Serial data output ); typedef struct packed { bit [ 7: 0]test_01; bit [ 7: 0]test_02; bit [ 7: 0]test_03; bit [ 7: 0]test_04; bit [ 7: 0]test_05; bit [ 7: 0]test_06; bit [ 7: 0]test_07; bit [ 7: 0]test_08; bit [ 7: 0]test_09; bit [ 7: 0]test_10; bit [ 7: 0]test_11; bit [ 7: 0]test_12; bit [ 7: 0]test_13; bit [ 7: 0]test_14; bit [ 7: 0]test_15; } message_not_alligned; typedef struct packed { message_not_alligned data; bit [7: 0]some_var; } message_alligned; localparam lp_message_bit_size = $bits(message_alligned); localparam lp_message_byte_size = lp_message_bit_size / 8; initial begin $display("lp_message_bit_size = %0d", lp_message_bit_size); $display("lp_message_byte_size = %0d", lp_message_byte_size); end logic [lp_message_bit_size - 1 : 0] msg_rg; always_ff @ (posedge rst, posedge clk) if (rst) msg_rg <= '0; else msg_rg[lp_message_bit_size - 1 : 0] <= {msg_rg[lp_message_bit_size - 2 : 0], d_in}; assign d_out = msg_rg[lp_message_bit_size - 1]; endmodule QuartusII 13.0.1 для 5M2210ZF256I5 выдал: Info (12127): Elaborating entity "tst_bit_struct" for the top level hierarchy Info (10648): Verilog HDL Display System Task info at tst_bit_struct.sv(36): lp_message_bit_size = 128 Info (10648): Verilog HDL Display System Task info at tst_bit_struct.sv(37): lp_message_byte_size = 16 Info (21057): Implemented 132 device resources after synthesis - the final resource count might be different Info (21058): Implemented 3 input pins Info (21059): Implemented 1 output pins Info (21061): Implemented 128 logic cells Info: Quartus II 64-Bit Analysis & Synthesis was successful. 0 errors, 0 warnings … и он абсолютно прав. :laughing:
  4. Prime Pro пока в стадии beta. Поддерживает только Arria 10 Скачать можно по адресу
  5. Altera заменила один из трех файлов в установочном пакете для Windows (DVD Files) Предыдущий файл: Quartus-13.1.0.162-windows.iso Size: 3,737,073,664 bytes MD5: 34D8A3AD6209F8617457BA8ED13947EF Новый файл: Quartus-13.1.0.162-windows.iso Size: 3,737,194,496 bytes MD5: 9B8400CEA85A7B8FFF4F247795352027 Devices packages 1 and 2 остались прежние. Установил новый, - Quartus II 64-bit Version 13.1.0 Build 162 10/23/2013 Для JESD204B Initial release 2013.11.04, возможно поэтому ядро не вошло в октябрьский релиз Quartus (в новом также). В руководстве пользователя на ядро написано: «Install the MegaCore»… Мне не удалось найти его на сайте, впрочем, и упомянутый патч тоже. Stewart Little, может расскажете :rolleyes:
  6. Следует заметить, что согласно официальному заявлению Quartus 13.1 совместим с Windows 8. О совместимости с Windows 8.1 нет упоминания. Win 8.1 и 8 заметно отличаются.
  7. Расстаться с версией 13.0 не получится, есть удачные проекты на не поддерживаемых теперь семействах :(… Подскажите, 13.0SP1 (Win) лечится аналогично 13.0? Если по-новому, загрузите на ф-п инструкцию, пожалуйста.
  8. Бит-стрим не работает с такими "слайсами" ( matrix'(MatrixIN[4:0][i+4:i]) ) :laughing: The term slice refers to a selection of one or more contiguous elements of an array (IEEE 1800-2009 p.106) MatrixIN[4:0][i+4:i] – это не непрерывный фрагмент массива, т.е. не slice
  9. 1. Размер part-select or slice должен быть константой, но положением возможно варьировать. Например, Matrix[4:0][i+:4] (! это не точная замена Вашего MatrixIN[4:0][i+4:i]) 2. input signed logic [DATA_WIDTH-1:0] [24:0] MatrixIN и проследите, чтобы все (!) операнды также были signed при получении знакового результата
  10. Пример написан настолько прозрачно, с точки зрения цели его создания, что первое прочтение и ожидаемое поведение полностью совпали с результатами моделирования для обоих вариантов: static and automatic. В попытке найти ответ на свой исходный вопрос о поведении импортированных из интерфейса статических функций в модули, дополнил ваш пример еще одним экземпляром модуля a_unit установленным в модуль top. interface pipa; function static int get (int data); int tmp = 0; $display("enter %0t, state %0d, name %m", $time, tmp); tmp = tmp + data * 3; $display("exit %0t, state %0d, name %m", $time, tmp); return tmp; endfunction modport a (import get ); endinterface module a_unit (input clk, pipa p, output int led1, led2); int cnt; always_ff @(posedge clk) begin : one cnt <= cnt + 1'b1; led1 <= p.get(cnt); led2 <= p.get(cnt); end endmodule module top (input clk, output int led1, led2, led3, led4); pipa p (); a_unit a (clk, p.a, led1, led2); a_unit b (clk, p.a, led3, led4); endmodule // synthesis translate_off module tb; bit clk; int led1, led2, led3, led4; top top (clk, led1, led2, led3, led4); initial begin : clk_gen clk <= 1'b0; #5ns forever #5ns clk = ~clk; end endmodule // synthesis translate_on Если функция get объявлена с automatic – все выходные порты: led1 – led4 имеют одинаковые и независимые друг от друга значения, что является ожидаемым результатом. Если функция get объявлена с static – led2 вычисляется с учетом текущего значения led1 (согласен), при этом led3 вычисляется с учетом текущего значения led2 (удивлен), а led4 - с учетом текущего значения led3. Я ожидал, что поскольку led1 и led2 вычисляются в одном экземпляре модуля, а led3 и led4 – в другом, то led1 будет тождественным led3, а led2 - led4. Этого можно добиться в такой редакции ... module top (input clk, output int led1, led2, led3, led4); pipa p (), q (); a_unit a (clk, p.a, led1, led2); a_unit b (clk, q.a, led3, led4); endmodule ... Но это уже другая история. Возвращаясь к примеру с двумя экземплярами модуля и одним экземпляром интерфейса, напрашивается вывод: статические функции, объявленные в интерфейсе и импортируемые в модули не имеют своих собственных локальных копий в модулях. Во всяком случае, это справедливо по отношению к ModelSim SE PLUS 6.5 Rev. 2009.01. Синтезировал этот пример в Quartus 9.0 SP1. Пришлось убрать, во-первых, modport из интерфейса и, во-вторых, static из объявления функции по причине отсутствия поддержи. Без явного указания времени жизни функция предполагается статической (проверил это в ModelSim). Результат получился аналогичным, как при моделировании с автоматической функцией get. Вспоминаются слова Нильса Бора о том, что понять – значит привыкнуть и пользоваться. Денис, спасибо за время и внимание, которые вы мне уделили.
  11. Денис, благодарю за обстоятельный ответ и советы! И все же... Для того, чтобы из одного модуля обратиться к переменной, объявленной в другом модуле (в том числе переменной в функции внутри этого модуля), потребуется иерархическая ссылка. Такая ссылка не синтезируемая, что ограничивает обмен информацией между модулями только через сигналы их портов. Получить синтезируемый вариант, указанных в цитате возможностей не удастся. Модуль, импортирующий статическую функцию (или задачу) из интерфейса, получает собственную локальную копию этой функции. Функция будет в непосредственной области видимости только содержащего ее модуля. Если другой модуль импортирует из интерфейса ту же функцию, тогда для этого модуля будет сделана своя локальная копия этой же функции. Одно и тоже имя переменной функции в разных модулях это на самом деле две различные переменные. Реализовать обмен информации между модулями через переменную в импортируемой функции или сделать ее общей для нескольких модулей не удастся без привлечения иерархических ссылок. Ограничение синтеза последних является более общим правилом без привязки к импорту из интерфейсов. Так вот, пока не вижу препятствий для синтеза статических функций импортированных в модули из интерфейса... Либо мои рассуждения не точны, либо есть неизвестная мне пока информация. Можно адрес? Где-то вы писали о своих открытых проектах. Было бы очень поучительно для меня рад, что хоть чем-то оказался полезным
  12. Конечно, мне очень интересно ваше мнение. Именно ваш ответ я и ожидал. Вы и CaPpuCcino здесь из самых опытных и активных. CaPpuCcino, наверное, в Кёлне, а там Рождество... На данный момент у меня сложилось представление об интерфейсе, как о средстве существенно упрощающем написание дизайна и при этом практически не представляющего сложности для синтеза. Поясню. Цепи и переменные, объявленные в интерфейсе, как с дополнением направлений через modport, так и без оного, переносятся в модуль, подключенный к данному интерфейсу. Т.е., у модуля заменяется интерфейсный порт на привычную декларацию портов. Задачи и функции, определенные в интерфейсе и импортируемые через modport-import, также получают свои локальные копии в подключенном к интерфейсу модуле. После выполнения этих операций этот модуль выглядит так, как будто был написан на Verilog-95/01 без применения интерфейсов. Что в этом представлении ошибочного, раз вы считаете синтез интерфейсов делом темным? Вопрос не задан до конца, не хватает фразы "что бы быть синтезируемой". Тогда все встает на своим места. Это очевидно. Наличие static объектов, функций нарушает принципы объектного подхода в ХДЛ. К сожалению, мне не очевидно. Первая цитата из книги – утверждение, на основании которого было логично предположить, что локальная копия задачи или функции внутри модуля будет иметь пространство имен ограниченное этим модулем. Задача или функция может быть объявлена static (за исключением случаев, где явно нужен automatic) и одни и те же имена переменных, с которыми работает задача или функция в разных модулях являются независимыми. Эти рассуждения противоречат второй цитате, поэтому и возник первый вопрос, разумеется в контексте синтезируемости. Если мне память не изменяет вы пользуете либо модпорт, либо интерфейс. Область видимости определяется этим. Не про область видимости я интересовался... В первой цитате есть явная оговорка именно о импортируемых (в отличие от не импортируемых) задачах и функциях, для которых синтезатор делает локальную копию в подключенный модуль. Квартус не позволяет делать импорт, поэтому интересуюсь: так будет или нет локальная копия задачи или функции в подключенном модуле. Если копия будет, то получается аналогичная ситуация моего не понимания необходимости автоматических задач и функций. Если копии не будет, тогда мне понятно, зачем задачи и функции должны объявляться автоматическими. а как вы себе представляете синтез ссылки(по сути копии адреса объекта), чем и является ref? Синтез ссылки я себе также не представляю и такого вопроса не задавал. В моем тексте это было утверждение противопоставляющее третью и четвертую цитаты из книги. неверно, это как был inout, так и остался Авторы утверждают (третья цитата), что когда не определен modport (т.е. не заданы направления) все nets становятся inout, а все var становятся ref. Моделировать это можно, но синтезировать нет, так как все тот же ref. Далее авторы пишут (четвертая цитата), что если в этих же условиях отсутствия modport выполняется синтез то все signals становятся inout и синтез выполняется. Т.е., то что было ref стало inout. Почему бы не универсально: все net и var сразу в inout? Но вы уверяете, что это не приведет к разным результатам pre- and post-syntethis, если правильно работать. Хорошо, буду внимательным :) У меня похожая ситуация, но ModelSim вместо Questa. VCS – симулятор. Для моделирования Synopsys позиционирует Syphony HLS. Ни тот, ни другой не пробовал. Может у вас есть комментарий? Что скажете о Synplify или Quartus сам по себе не хуже?
  13. Посмотрел презентацию на Speedster family (http://www.achronix.com/picopipe-video.html) с интересом понять принцип, дающий такую пропускную способность. К сожалению, звука у меня нет, возможно именно звуковой комментарий пояснил бы в чем новизна их элементов хранения (даже боюсь назвать их триггерами) выборок данных (в терминологии компании data tokens). А вот с конвейером все очень традиционно и понятно. Кстати, убедительный пример, где можно ускорить проекты и для traditional FPGA. Но короткое «пролетное время» между триггерами конвейера не устраняет требования к работе триггера на 1.5ГГц, как минимум. Интересно, что скорость переключения только отдельно взятого триггера у 90nm CycloneII-6 примерно 3.7ГГц, при этом глобальный клок 500МГц. Много теряется на возможности работать по всему чипу с одним клоком. В старших семействах уже есть локальные клоки. С другой стороны время прохождения сигналов по трассам и комбинационная логика, - здесь явный компромисс между возможностями и скоростью. Время покажет...
  14. Вопрос по методам в интерфейсах от новичка. Только закончил читать SystemVerilog for Design. Последующие цитаты из этой книги. Modules that use tasks or functions imported from interfaces are synthesizable. Synthesis will infer a local copy of the imported task or function within the module. The post-synthesis version of the module will contain the logic of the task or functions; it will no longer look to the interface for that functionality. Следовательно, локальная копия задачи или функции внутри модуля будет иметь пространство имен ограниченное этим модулем. Задача или функция может быть объявлена static (за исключением случаев, где явно нужен automatic) и одни и те же имена переменных, с которыми работает задача или функция в разных модулях являются независимыми. Однако.. Imported tasks or functions must be declared as automatic and not contain static declarations in order to be synthesized. 1. Почему импортируемая задача или функция должна быть обязательно automatic и не содержать static деклараций? Предугадывая куда меня могут отправить, сходил туда добровольно... Увы, стандарт в части п. 20.6 не пролил для меня свет на этот вопрос. Цитируемое выше имеет отношение к импортируемым методам. Я пользуюсь Квартусом, который поддерживает синтез интерфейсов с методами, а также с modport, но при этом импорт (и, конечно, экспорт) задач или функций не допустим. Т.е., доступ к методам со стороны модулей, подключаемых к интерфейсу, не имеет ограничений. 2. Для задач или функций, которые не импортируются явно через import, синтезатор также сделает локальную копию в использующем их модуле? 3. Эти задачи или функции также должны быть определены как automatic и не содержать static деклараций? И еще один момент... When no modport is specified as part of the connection to the interface, all nets in the interface are assumed to have a bidirectional inout direction, and all variables in the interface are assumed to be of type ref. Тип порта ref не синтезируемый. Однако.. If no modport is specified when the model is synthesized, then all signals within the interface become bidirectional inout ports on the synthesized module. 4. Если не определен modport, то на этапе моделирования все переменные интерфейса имеют тип ref, а на этапе синтеза они же становятся inout. Это верно? 5. Если да, то не приведет ли это к разным результатам при моделировании и при синтезе? Посоветуйте софт с хорошей поддержкой SV для моделирования, симулирования, и, возможно, для синтеза (в паре с Квартусом)