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

Verilog initial-блок

Здравствуйте всем.

Сейчас уже не модно писать коды только на одном VHDL, все работают сразу на двух языках VHDL и Verilog. Либо пишут только на одном, а примеры читают на обоих языках.

Вот и я решил изучить Verilog.

И первое, с чем столкнулся это начальное состояние входов/выходов.

Например в VHDL я пишу

data_in : input std_logic_vector(7 downto 0) := (others => '0');
data_out : output std_logic_vector(7 downto 0) := (others => '1');

.

А как это же сделать на Veriloge?

В википедии нашел такую фразу:

"initial"-блок определяет какие действия должны быть сделаны при старте программы. Этот блок не является синтетизируемым и обычно используется для тестирования.
и стало вообще непонятно, как мне правильно инициализировать входы/выходы/регистры.

Прошу помощи у знающих.

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


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

Здравствуйте всем.

В википедии нашел такую фразу:

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

а при помощи ресета не пробовали?

 

Например в VHDL я пишу
data_in : input std_logic_vector(7 downto 0) := (others => '0');
data_out : output std_logic_vector(7 downto 0) := (others => '1');

а можно узнать откуда Вы это взяли?

 

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


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

а при помощи ресета не пробовали?

Не всегда сигнал Ресет имеется в наличии, например если пишем Мастер-модуль, который уже сам будет управлять остальными модулями и раздавать им Ресеты. Да и вообще написание модуля без Ресета.

а можно узнать откуда Вы это взяли?

Довольно часто сам такие конструкции использовал, если хотел, чтобы при подаче питания на выходе был определенный сигнал.

и для чего Вам это нужно? (симулирование или для работы в "железе")

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

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


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

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

reg [2:0] a = 3'b101;

?

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


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

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

После загрузки FPGA, все синхронные элементы сбросятся в ноль, это не зависящий от вас процесс.

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

Так же есть директивы синтезатору, например,

 (* INIT = "0001" *) //Initialization value for XST
reg [3:0]  A;

 

С моделированием другое дело. Если ничего не путаю, то по стандарту verilog, zero time состояние для reg и wire - X.

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

 

На SV у типа bit zero time состояние 0, поэтому не нужно делать синхронные сбросы, только для целей симуляции.

 

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


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

reg [2:0] a = 3'b101;

?

 

т.е. такая конструкция:

module xxx(a,b, res);

input a;
input b;
output [2:0] res;

reg [2:0] res = 3'b000;

будет нормально работать и при моделировании и при синтезе?

 

Возможно ли применение такой строки:

output [2:0] res = 3'b000;

 

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


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

Возможно ли применение такой строки:

output [2:0] res = 3'b000;

module xxx (
    output reg [2:0] a = 3'b101
)

Должно работать.

Я придерживаюсь мнения, что если можно обойтись без ресета - лучше обойтись.

Синтезатор гарантирует, что при загрузке синхронные элементы будут установлены в начальное состояние.

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

 

 

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


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

Должно работать.

Мне бы поконкретнее, т.к. если в самом начале изучения начать прикрывать глаза на некоторые важные вещи, то потом все это может в хороший "хвост" накопиться.

Если можно, то мне бы ссылочку на "правильную" литературу.

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


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

Мне бы поконкретнее, т.к. если в самом начале изучения начать прикрывать глаза на некоторые важные вещи, то потом все это может в хороший "хвост" накопиться.

Если можно, то мне бы ссылочку на "правильную" литературу.

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

 

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


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

в ПЛИС, где значение регистра загружаемое, то есть Альтера/Ксайлинкс

 

средства синтеза понимают и initial и

reg [2:0] a = 3'b101;

 

по умолчанию, то есть если нету initial или нету = в объявлении, регистры ставятся в 0

 

отдельный вопрос, что это не будет работать например на Актеле или в ASI-ах, но я думаю, это пока не волнует :)

 

-----------

 

для того чтобы поставить выход в определенное положение (мне кстати тоже приведенная VHDL конструкция не нравится)

 

можно

 

.....

output ao;

....

 

reg a=0;

assign ao=a;

 

возможно в SV-шном объявлении output reg | output logic можно записать инициализатор в объявление, но я так не делал

 

--------------

 

по поводу предопределенного значения входа - ну это как-то противоречит здравому смыслу, ну то есть можно подтянуть слабыми weak0, weak1 сигналами для какой-то безумной симуляции, без тестбенча, но для практического применеия чего-то я не могу придумать вообще что это такое :)

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


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

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

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

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

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

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

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

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

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

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