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

Снова о наболевшем :)

 

Да, я знаю о существовании System Verilog, вопросы относятся только к Verilog.

 

1) В VHDL есть команда "присвой нулю весь этот регистр"

signal s1 : std_logic_vector(DWIDTH-1 downto 0);
s<=(others=>'0');

В Verilog пока обнаружены следующие конструкции

 

"присваивать 32 нуля", веря в то, что регистр никогда не станет больше 32

s='d0;

 

Присваивать "массив нулей фиксированной длины"

reg [DWIDTH-1:0] s;
s={ DWIDTH{1'b0}};

Проблема сохраняется - если объявление массива изменится на [DWIDT+CONST-1:0] то конструкция перестанет работать.

Существует ли способ взятия атрибута сигнала, но присвоить его точно?

 

2) В Verilog есть неприятное свойство

modue1_inst(
.out_port(bus)
);
modue2_inst(
.in_port(bus)
);

Если сигнал bus нигде ранее не объявлен, то синтезатор по умолчанию считает его шиной шириной 1 бит. Можно ли настроить синтезатор (Vivado и Symplify) на предмет выключения такого умолчания и вываливания таких ситуация как ошибочных?

Другая ситуация - можно случайно допустить ошибку написав .clk_cfg(cfg_clk), по умолчанию будет создан однобитовый сигнал cfg_clk, который никуда не подключен

При этом сообщение об этом "создании" не передается, передается только варнинг при синтезе

WARNING: [Synth 8-3848] Net cfg_clk in module/entity u1 does not have driver.

Но таких варнингов может быть куча и они не являются опасными, делать их все критическими нет смысла. Есть смысл ловить ситуацию появления недекларированных сигналов/регистров.

Как обойти эту ситуацию?

 

3) Правильно ли я понимаю что на массивы в Verilog наложены следующие ограничения на массивы, которые в рамках Verilog 2001 не преодолимы

- Массивы одинаковой размерности нельзя присваивать один в другой.

- Массивы нельзя передавать на вход функций и возвращать из функции

 

4) Передача объектов типа struct как аргумента в функцию и возвращение структуры так же запрещено?

 

5) В VHDL существует удобная возможность хранить массивы констант в package.

Например

type VEC8_ARRAY is array (integer range <>) of std_logic_vector(7 downto 0);
constant COEF_ARR:VEC8_ARRAY(3 downto 0)=(x"41",x"42",x"43",x"44");

И потом легко обращаться к этим массивам например при generate.

Как правильно хранить константу-массив в Verilog? В vh?

Изменено пользователем ConstHw

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


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

Извините за оффтоп, но, возможно, легче будет перейти на VHDL, нежели пытаться "прилепить горбатого к стене"? Никогда не задумывались?

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


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

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

:bb-offtopic: Есть подозрение, что ТС владея VHDL пытается освоить verilog. Соответственно проецирует наработанные решения на новый ЯОА.

(я бы наверняка делал так же, желая переписать какой-либо проект с vhdl на verilog)

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


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

Существует ли способ взятия атрибута сигнала, но присвоить его точно?

Нет. Используйте автоприведение разрядностей. Самый простой вариант присвоить вектору 1'b0.

Если сигнал bus нигде ранее не объявлен, то синтезатор по умолчанию считает его шиной шириной 1 бит. Можно ли настроить синтезатор (Vivado и Symplify) на предмет выключения такого умолчания и вываливания таких ситуация как ошибочных?

`define default_nettype none

 

На свой страх и риск. Макрос глобальный.

 

Но таких варнингов может быть куча и они не являются опасными, делать их все критическими нет смысла. Есть смысл ловить ситуацию появления недекларированных сигналов/регистров.

если вы VHDL щик, у вас в крови должно быть декларация всех сигналов до использования.

- Массивы одинаковой размерности нельзя присваивать один в другой.

- Массивы нельзя передавать на вход функций и возвращать из функции

да

4) Передача объектов типа struct как аргумента в функцию и возвращение структуры так же запрещено?

В верилоге структур нет вообще

Как правильно хранить константу-массив в Verilog? В vh?

только include файлы

 

ЗЫ. Стандарт на верилог 2001 читается за день, он написан нормальным языком, в отличие от VHDL ;)

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


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

des00 Я прямо ждал вашего ответа :-)

Спасибо!

 

>>Самый простой вариант присвоить вектору 1'b0. [/

Не понял?

reg [63:0] sig1;
sig1<=1'b0;

Присвоит только младший бит, разве нет? Так же как присвоение 'd0 присвоит младшие 32?

 

Так как хранить в include?

Сейчас храню колхозно

define C0 0
define C1 1
define C2 2

 

Define аналогичен поведению дефайна в С, когда он подставляет кусок кода определенный дефайном?

my_header.vh
define C_VALUE ('h1,'h2,'h3);
----------
my_module.v
reg [2:0] my_const_reg [3:0] ='C_VALUE

 

FakeDevice За предложение перейти на VHDL большое спасибо, именно ваш совет заставил меня задуматься. Не представляю чтоб я без вас делал. Очень полезный и ценный совет.

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


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

Присвоит только младший бит, разве нет? Так же как присвоение 'd0 присвоит младшие 32?

IEEE Std 1364-2001 -> 4. Expressions -> 4.4 Expression bit lengths -> 4.4.1 Rules for expression bit lengths ->

The number of bits of an expression (known as the size of the expression) shall be determined by the operands involved in the expression and the context in which the expression is given.

A self-determined expression is one where the bit length of the expression is solely determined by the

expression itself for example, an expression representing a delay value.

A context-determined expressionis one where the bit length of the expression is determined by the bit length

of the expression andby the fact that it is part of another expression. For example, the bit size of the righthand side expression of an assignment depends on itself and the size of the left-hand side.

 

Так как хранить в include?.....

Define аналогичен поведению дефайна в С, когда он подставляет кусок кода определенный дефайном?

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

 

FakeDevice За предложение перейти на VHDL большое спасибо, именно ваш совет заставил меня задуматься. Не представляю чтоб я без вас делал. Очень полезный и ценный совет.

зря троллите. VHDL дает академичность изложения и для обучения лучше. Для всего остального есть SV

 

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


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

Пишу на VHDL 6ой год. Можно еще кстати новичкам задающим вопросы по VHDL рекомендовать бросить это дело и идти писать на яве.

 

Проблема SV что каждый сапр поддерживает свое множество языка и не хочется получить ситуацию, что код написанный для Xilinx вдруг перестанет синтезироваться в Quartus. или ранее написанный проект вдруг надо будет сунуть в ASIC, а там только verilog 95.

Есть какой минимальный набор конструкций SV, который надо поддерживать софту чтоб называться "мы поддерживаем SV"?

 

И тогда еще вопрос

Язык С не контролирует выход за границы массива. Минус - можно разрушить стек. Плюс - программа работает быстрее.

Язык Verilog не контролирует выход за границы массива и обращение reg[7:0] my_reg;l a<=my_reg[8] приведет к присвоению пустоты.

Минус - очевидная ошибка прячется за warning и может быть пропущена.

А есть вообще какие то плюсы этого? Verilog написанный для Testbench ведь все равно не комилируются в бинарник, как С, а исполняется временным симулятором как набор команд? Или комплируется?

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


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

когда-то в стародавние времена J. Cooley (ESNUG, по-моему deepchip-а тогда еще не было) проводил среди энтузиастов конкурс - довести с 0 до нетлиста некий простой узел по тех.заданию (которое оглашалось на месте) - там порядка по 20 верилогистов и вхдл-щиков участвовало, так до чистого результата ни один vhdl-щик и не дошел (из вериложщиков по-моему половина)

 

в этом плюс верилога :)

 

хотя, конечно, можно сказать позадорновски "ну они тууупыые"

 

 

 

 

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


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

когда-то в стародавние времена J. Cooley (ESNUG, по-моему deepchip-а тогда еще не было) проводил среди энтузиастов конкурс - довести с 0 до нетлиста некий простой узел по тех.заданию (которое оглашалось на месте) - там порядка по 20 верилогистов и вхдл-щиков участвовало, так до чистого результата ни один vhdl-щик и не дошел (из вериложщиков по-моему половина)

 

в этом плюс верилога :)

 

хотя, конечно, можно сказать позадорновски "ну они тууупыые"

на мой взгляд, это ничего не доказывает....

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


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

когда-то в стародавние времена J. Cooley (ESNUG, по-моему deepchip-а тогда еще не было) проводил среди энтузиастов конкурс - довести с 0 до нетлиста некий простой узел по тех.заданию (которое оглашалось на месте) - там порядка по 20 верилогистов и вхдл-щиков участвовало, так до чистого результата ни один vhdl-щик и не дошел (из вериложщиков по-моему половина)

в этом плюс верилога :)

Делать ставку на ЯОА опираясь на "статистику" с выборкой в 20 человек - неразумно. :bb-offtopic:

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


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

yes я не думаю что на основе такого конкурса можно делать далеко идущие выводы. Оба языка используются в крупных проектах крупными компаниями, оба языка дают возможность писать плохо и хорошо.

 

Коллеги, был бы рад сохранению тематики обсуждения на конкретных вопросах, без абстрактных "ну удобен мне VHDL, душа лежит"

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


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

оба языка дают возможность писать плохо и хорошо.
На Верилоге можно написать такой говнокод, который в VHDL в принципе невозможен.

Необъявленные сигналы, несовпадающие разрядности и прочая прелесть.

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


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

На Верилоге можно написать такой говнокод, который в VHDL в принципе невозможен.

Необъявленные сигналы, несовпадающие разрядности и прочая прелесть.

Vice versa

При переходе с Verilog, Думая что пишу на строго типизированном языке, понаписал такого что только 4-ый компилятор показал где же именно ошибка

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


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

Sergey_Bekrenyov, а можно пример? Просто в VHDL такие финты как присвоить несовпадающие размерности шин не прокатят, присвоить бит в вектор и наоборот, присвоить real в int

 

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


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

Sergey_Bekrenyov, а можно пример? Просто в VHDL такие финты как присвоить несовпадающие размерности шин не прокатят, присвоить бит в вектор и наоборот, присвоить real в int

Давно дело было, лет 5 назад, даже SVN не поможет

Из последних условие

 

SIGNAL init_ram_rdaddr : std_logic_vector(9 DOWNTO 0);

..

IF(init_ram_rdaddr = x"3FF") - не выполнялось никогда

 

переписано на

 

IF(init_ram_rdaddr = "11" & x"FF")

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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