ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Кстати, неоднократно писал, что многие учебники по VHDL слишком примитивны. Я, когда выбирал, "куды ж христьянину податься", листал книжку по VHDL, русского автора. Не впечатлила, ни качеством полиграфии, ни содержимым. Потом попалась книжка Полякова, где одинаковые конструкции были расписаны параллельно на двух языках. Тоже книга бестолковая. Но позволила мне сделать выбор в пользу Verilog. Verilog уже свое отжил. Дальше будет только SystemVerilog. Победил С++. НО и он уже тоже отмирает во многих областях, заменяясь более современными языками. C++0x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба C++0x Явой например. Шарпом. То есть языками, в которых выкинуты многие вольности из голых сей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Мои 5 копеек в тему. Прошу не рассматривать это как холивар. Я начинал на VHDL, потом когда проекты стали побольше устал пользоваться комбинацией Ctrl-C + Ctrl-V и перешёл на Verilog. Классический верилог, потому как работаю исключительно с Xilinx. ISE не поддерживает SV и будет ли поддерживать - неизвестно. Сами Xilinx рекомендуют любителям SV пользовать сторонние синтезаторы (Sinplify,Menotr).В ISE есть поддержка этих синтезаторов, однако я упорно стараюсь пользовать лишь классический verilog чтобы проекты легче переносились, т.е. собирались на другой машине в любой точке планеты. Объяснять кому-то как устанавливать Sinplify, где брать таблетку и как их подружить с ISE - довольно муторное занятие. В классическом верилоге меня серьёзно напрягают два недостатка (оба кстати уже решены в SV): 1. Отсутствие структур. Типа record в VHDL. Крайне напрягают пучки проводов между модулями, особенно если надо протащить сигнал через больше чем один уровень иерархии. 2. Нет поддержки атрибутов типа 'left 'right 'size - из-за этого приходится в модули загонять параметры типа ширины шины данных, хотя в VHDL можно было бы и внутри модуля вычислить ширину шины с помощью этих атрибутов. Из несомненных плюсов : 1. Не надо описывать component - боже, как это задалбывало в VHDL!!! 2. Контроль соответствия типов не такой строгий. Понятно, что это - палка о двух концах, но для меня плюс больше чем минус. Вообще на вкус и цвет - товарища нет, поэтому советовать тут бесполезно. Я для себя выбрал Verilog с прицелом на SV. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
:-) 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Кстати, неоднократно писал, что многие учебники по VHDL слишком примитивны. Поэтому плохого низкоуровневого кода, действительно, много. В котором счетчик от нуля до пяти может быть реализован через битовые вектора. А назовите, пожалуйста, толковую литературу и/или достойные примеры на vhdl. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба В классическом верилоге меня серьёзно напрягают два недостатка (оба кстати уже решены в SV) Смотрите что есть у Quartus 9.1, по крайней мере, декларировано: The Quartus II software supports the following SystemVerilog constructs: ■ Parameterized interfaces, generic interfaces, and modport constructs ■ Packages ■ Extern module declarations ■ Built-in data types logic, bit, byte, shortint, longint, int ■ Unsized integer literals ‘0, ‘1, ‘x, ‘z, ‘X, and ‘Z ■ Structure data types using struct ■ Ports and parameters with unrestricted data types ■ User-defined types using typedef ■ Global declarations of task/functions/parameters/types (does not support global variables) ■ Coding constructs always_comb, always_latch, always_ff ■ Continuous assignments to nodes other than nets, and procedural assignments to nodes other than reg ■ Enumeration methods First, Last, Next(n), Prev(n), Num, and Name ■ Assignment operators +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, <<<=, and >>>= ■ Increment ++ and decrement -- ■ Jump statements return, break, and continue ■ Enhanced for loop (declare loop variables inside initial condition) ■ Do-while loop and local loop constructs ■ Assignment patterns ■ Keywords unique and priority in case statements ■ Default values for function/task arguments ■ Closing labels ■ Extensions to directives ‘define and ‘include ■ Expression size system function $bits ■ Array query system functions $dimensions, $unpacked_dimensions, $left, $right, $high, $low, $increment, and $size ■ Packed array (include multidimensional packed array) ■ Unpacked array (include single-valued range dimension) ■ Implicit port connections with .name and .* Quartus II integrated synthesis also parses, but otherwise ignores the SystemVerilog assertions. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба А назовите, пожалуйста, толковую литературу и/или достойные примеры на vhdl. Относительно литературы, я уже давно предпочитаю знакомиться с языками программирования, читая их стандарты. Литература, совершенно точно не адаптированная для малограмотных. :) По стилю - книжки, посвященные прежде всего моделированию на VHDL, а не синтезу. Например, Ben Cohen, "VHDL coding style and methodologies" Книжки по синтезу, как правило, "адаптированные для электронщиков", привыкших к схемотехнике и пытающиеся проектировать на HDL, рисуя в уме схему. 1. Не надо описывать component - боже, как это задалбывало в VHDL!!! И не нужно описывать. Могу наврать, но, кажется, еще в VHDL'93 появилась конструкция entity при вставке компонента. ■ Built-in data types logic, bit, byte, shortint, longint, int Скажите, а диапазоны целых в SV есть? В VHDL диапазоны служат двум целям. Во-первых, при моделировании проверяется, что при присваивании или любом другом приведении к подтипу значение попадает в диапазон. При синтезе позволяет синтезатору игнорировать возможные значения вне диапазона, выделяя для регистра нужное количество разрядов. Замечу, что нередко используемые значения можно вычислить по коду, но не всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Скажите, а диапазоны целых в SV есть? есть перечисления enum For example: typedef enum { add=10, sub[5], jmp[6:8] } E1; This example defines the enumerated type E1, which assigns the number 10 to the enumerated named con- stant add. It also creates the enumerated named constants sub0, sub1, sub2, sub3, and sub4 and assigns them the values 11...15, respectively. Finally, the example creates the enumerated named constants jmp6, jmp7, and jmp8 and assigns them the values 16 through 18, respectively. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба есть перечисления enum То есть нет. Опять недоделали. В Ada были диапазоны целых, и именно они оказались естественно полезны для VHDL. А в сях никогда проверкой диапазонов не заморачивались, и система типов целых соответствует размерам операндов команд процессоров. При этом упаковка меньшего диапазона в слово никого не беспокоит, так как иначе - никак. И в SV это перенесли бездумно, выходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба То есть нет... И в SV это перенесли бездумно, выходит. Я думаю, если переменная выйдет за пределы перечисления, как минимум, получим предупреждение. А вообще, неявное приведение типов как в C, так, надо думать и в SV, широко распространено. На форуме есть более продвинутые "гуру", может, они скажут свое веское слово... upd. Даю слово стандарту: Enumerated types are strongly typed; thus, a variable of type enum cannot be directly assigned a value that lies outside the enumeration set unless an explicit cast is used or unless the enum variable is a member of a union. This is a powerful type-checking aid, which prevents users from accidentally assigning nonexistent values to variables of an enumerated type. The enumeration values can still be used as constants in expres- sions, and the results can be assigned to any variable of a compatible integral type. Enumerated variables are type-checked in assignments, arguments, and relational operators. Enumerated variables are auto-cast into integral values, but assignment of arbitrary expressions to an enumerated vari- able requires an explicit cast. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Я думаю, если переменная выйдет за пределы перечисления, как минимум, получим предупреждение. Перечисления - да. Но мне кажется, что перечисления - это всё же не диапазоны целых. Например, тип индекса в массиве описывать как перечисление глупо. А при использовании типа целых для него нет гарантии, что синтезатор сможет для регистра вычислить правильный поддиапазон, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Например, тип индекса в массиве описывать как перечисление глупо. Но возможно! Или делать перечислением, "по-глупому", или "забить" и делать, как получится. Если размер кратен степени 2, можно вектор приспособить. bit [9:0] i Но мне кажется, что перечисления - это всё же не диапазоны целых. Диапазоны и есть. An enumerated type declares a set of integral named constants. И даже более того. По умолчанию - набор int, 32-битовых знаковых целых. Но можно задать тип и другой, по своему желанию. enum bit [3:0] {bronze='h3, silver, gold='h5} medal2; Вот и получили числа нужной размерности и заданного диапазона. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Но возможно! Или делать перечислением, "по-глупому", или "забить" и делать, как получится. Если размер кратен степени 2, можно вектор приспособить. bit [9:0] i До какого размера возможно? Он ведь имена при этом в пространство имен для каждого значения добавляет. И если я хочу посчитать до ста миллионов, мне нужно самому ширину счетчика описывать, или пользоваться общим 32-битным типом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба До какого размера возможно? Он ведь имена при этом в пространство имен для каждого значения добавляет. И если я хочу посчитать до ста миллионов, мне нужно самому ширину счетчика описывать, или пользоваться общим 32-битным типом? Самому, почему нет? Может быть так - enum bit [26:0] {fst_addr = 100_000_000, next_addr[0:4095]} address; А int 32-разрядный, вам хватит :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба А int 32-разрядный, вам хватит :) Мне-то хватит, вопрос в том, что синтезируется в результате? Счетчик на 27 бит, или на 32? И если для обычных процессоров разницы никакой нет, то при синтезе железа лишней разрядностью разбрасываться не стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Мне-то хватит, вопрос в том, что синтезируется в результате? Счетчик на 27 бит, или на 32? И если для обычных процессоров разницы никакой нет, то при синтезе железа лишней разрядностью разбрасываться не стоит. Я думаю, лишние разряды создаваться физически не будут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться