Jump to content
    

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

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

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

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

C++0x

Share this post


Link to post
Share on other sites

C++0x

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

То есть нет.

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Но возможно!

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

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

Share this post


Link to post
Share on other sites

Но возможно!

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

bit [9:0] i

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...