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

Кстати, неоднократно писал, что многие учебники по VHDL слишком примитивны.

Я, когда выбирал, "куды ж христьянину податься", листал книжку по VHDL, русского автора. Не впечатлила, ни качеством полиграфии, ни содержимым. Потом попалась книжка Полякова, где одинаковые конструкции были расписаны параллельно на двух языках. Тоже книга бестолковая. Но позволила мне сделать выбор в пользу Verilog.

Verilog уже свое отжил. Дальше будет только SystemVerilog.

Победил С++. НО и он уже тоже отмирает во многих областях, заменяясь более современными языками.

C++0x

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

C++0x

 

Явой например. Шарпом. То есть языками, в которых выкинуты многие вольности из голых сей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мои 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, неоднократно писал, что многие учебники по VHDL слишком примитивны. Поэтому плохого низкоуровневого кода, действительно, много. В котором счетчик от нуля до пяти может быть реализован через битовые вектора.

 

А назовите, пожалуйста, толковую литературу и/или достойные примеры на vhdl.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В классическом верилоге меня серьёзно напрягают два недостатка (оба кстати уже решены в 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А назовите, пожалуйста, толковую литературу и/или достойные примеры на 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 диапазоны служат двум целям. Во-первых, при моделировании проверяется, что при присваивании или любом другом приведении к подтипу значение попадает в диапазон. При синтезе позволяет синтезатору игнорировать возможные значения вне диапазона, выделяя для регистра нужное количество разрядов. Замечу, что нередко используемые значения можно вычислить по коду, но не всегда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, а диапазоны целых в 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть перечисления enum

 

То есть нет.

Опять недоделали. В Ada были диапазоны целых, и именно они оказались естественно полезны для VHDL. А в сях никогда проверкой диапазонов не заморачивались, и система типов целых соответствует размерам операндов команд процессоров. При этом упаковка меньшего диапазона в слово никого не беспокоит, так как иначе - никак. И в SV это перенесли бездумно, выходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть нет... И в 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, если переменная выйдет за пределы перечисления, как минимум, получим предупреждение.

 

Перечисления - да. Но мне кажется, что перечисления - это всё же не диапазоны целых. Например, тип индекса в массиве описывать как перечисление глупо. А при использовании типа целых для него нет гарантии, что синтезатор сможет для регистра вычислить правильный поддиапазон, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, тип индекса в массиве описывать как перечисление глупо.

Но возможно!

Или делать перечислением, "по-глупому", или "забить" и делать, как получится. Если размер кратен степени 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;

Вот и получили числа нужной размерности и заданного диапазона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но возможно!

Или делать перечислением, "по-глупому", или "забить" и делать, как получится. Если размер кратен степени 2, можно вектор приспособить.

bit [9:0] i

 

До какого размера возможно? Он ведь имена при этом в пространство имен для каждого значения добавляет.

И если я хочу посчитать до ста миллионов, мне нужно самому ширину счетчика описывать, или пользоваться общим 32-битным типом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До какого размера возможно? Он ведь имена при этом в пространство имен для каждого значения добавляет.

И если я хочу посчитать до ста миллионов, мне нужно самому ширину счетчика описывать, или пользоваться общим 32-битным типом?

Самому, почему нет? Может быть так -

enum bit [26:0] {fst_addr = 100_000_000, next_addr[0:4095]} address;

 

А int 32-разрядный, вам хватит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А int 32-разрядный, вам хватит :)

 

Мне-то хватит, вопрос в том, что синтезируется в результате? Счетчик на 27 бит, или на 32? И если для обычных процессоров разницы никакой нет, то при синтезе железа лишней разрядностью разбрасываться не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне-то хватит, вопрос в том, что синтезируется в результате? Счетчик на 27 бит, или на 32? И если для обычных процессоров разницы никакой нет, то при синтезе железа лишней разрядностью разбрасываться не стоит.

Я думаю, лишние разряды создаваться физически не будут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...