реклама на сайте
подробности

 
 
18 страниц V  « < 9 10 11 12 13 > »   
Reply to this topicStart new topic
> Документация на System Verilog, Сбор документации на SVerilog. И обсуждение тонких моментов синтаксиса
des333
сообщение Jun 4 2009, 16:06
Сообщение #151


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(CaPpuCcino @ Apr 30 2009, 21:16) *
...
вариант с прекомпилятором использовать не хочется, хотчется языковыми средствами.
спб



Встала аналогичная задача, только коммутировать интерфейсы необходимо динамически во время работы(в железе).
То есть вариант с прекомпилятором отпадает в принципе.

Не могли бы Вы поделиться своими соображениями на данную тему: нашли ли вы какое-либо изящное решение или поняли, что его не существует?


Заранее спасибо!


--------------------
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Jun 6 2009, 19:06
Сообщение #152


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(des333 @ Jun 4 2009, 19:06) *
Встала аналогичная задача, только коммутировать интерфейсы необходимо динамически во время работы(в железе).

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


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
IL-76
сообщение Jul 14 2009, 14:51
Сообщение #153


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 16-03-09
Из: ex USSR
Пользователь №: 46 167



А не мог бы кто-нибудь выложить на рапидшару или подобный сервис "SystemVerilog For Design: A guide to using SystemVerilog for HW design and Modeling. Stuard Sutherland, Simon Davidmann // Kluwer Academic Publishers"?

Доступа к фтп не имею, а хотелось бы почитать..
Go to the top of the page
 
+Quote Post
MaOR
сообщение Jul 15 2009, 06:32
Сообщение #154





Группа: Новичок
Сообщений: 3
Регистрация: 16-06-06
Пользователь №: 18 114



SV for Design
Go to the top of the page
 
+Quote Post
IL-76
сообщение Jul 15 2009, 06:54
Сообщение #155


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 16-03-09
Из: ex USSR
Пользователь №: 46 167



Большое спасибо, MaOR
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 7 2009, 06:57
Сообщение #156


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



господа проясните следующий момент, какой по вашему мнению должен быть результат в outb/outg

CODE

module test_bad (input logic zero, sign, input logic signed [15 : 0] idat, output logic signed [23 : 0] odat);

assign odat = zero ? '0 : (sign ? -idat : idat);

endmodule

module test_good (input logic zero, sign, input logic signed [15 : 0] idat, output logic signed [23 : 0] odat);

always_comb begin
if (zero)
odat = '0;
else
odat = (sign ? -idat : idat);
end

endmodule

module tb ;

logic zero, sign;
logic signed [15 : 0] idat;
logic signed [23 : 0] odatb;
logic signed [23 : 0] odatg;

test_bad uutb (.odat(odatb), .*);
test_good uutg (.odat(odatg), .*);


initial begin : main
#10ns;
zero = 1'b0;
sign = 1'b1;
idat = 1;
#10ns;
zero = 1'b0;
sign = 1'b1;
idat = -1;
#10ns;
zero = 1'b0;
sign = 1'b0;
idat = 1;
#10ns;
zero = 1'b0;
sign = 1'b0;
idat = -1;
#10ns;
$stop;
end
endmodule


квеста 6.4с считает вот так (см аттач). Исходя из битов odatb вообще не понятно как она думает. А квартус считает что в test_bad при инверсии надо делать беззнаковое расширение, не смотря на то, что результат операции знаковый. Посмотрел стандарт вроде все должно быть наоборот. Т.е. по правилам приведения операндов в test_bad должно быть знаковое расширение. Или я ошибаюсь?

PS. вопрос снимается, все по стандарту. сам дурак.

Цитата
SystemVerilog adds the ability to specify unsized literal single-bit values with a preceding apostrophe ( ’ ), but without the base specifier. All bits of the unsized value are set to the value of the specified bit. In a self-determined context, these literals have a width of 1 bit, and the value is treated as unsigned


будте внимательны
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Go to the top of the page
 
+Quote Post
Builder
сообщение Nov 12 2009, 12:19
Сообщение #157


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Вот, наткнулся на упоминание SystemVerilog 2009, по ссылкам кратко некоторые нововведения:
http://www.sunburst-design.com/papers/DAC2...burstDesign.pdf
http://www.sunburst-design.com/papers/DAC2...therlandHDL.pdf
Думаю будт интересно, кто на SV пишет.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 16 2009, 06:07
Сообщение #158


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Builder @ Nov 12 2009, 06:19) *
Вот, наткнулся на упоминание SystemVerilog 2009, по ссылкам кратко некоторые нововведения:
http://www.sunburst-design.com/papers/DAC2...burstDesign.pdf
http://www.sunburst-design.com/papers/DAC2...therlandHDL.pdf
Думаю будт интересно, кто на SV пишет.


работа над ошибками ассертов понравилась, про перегрузку функций так и не заикаются %(

Занятно у альдека использование $info/$warning/$error/$fatal было не привязано к ассертам (в отличии от ментора) как в воду глядели, а может быть и баг ставший реальностью %)

PS. надо готовиться к валу вопросов на форуме типа "почему не собирается" %)

Код
always_ff @(edge clk, posedge rst)
  if (rst)
    pipa <= '0;
  else
   pipa <= popa;
end


--------------------
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Nov 16 2009, 10:20
Сообщение #159


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(des00 @ Nov 16 2009, 09:07) *
PS. надо готовиться к валу вопросов на форуме типа "почему не собирается" %)

biggrin.gif
можно успокоиться только тем, что ещё относительно не скоро


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Nov 21 2009, 19:19
Сообщение #160


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(Builder @ Nov 12 2009, 15:19) *
Вот, наткнулся на упоминание SystemVerilog 2009, по ссылкам кратко некоторые нововведения:

наткнулся в новом стандарте на интересную лазейку для параметризирования типов данных(если я, конечно, ничего не попутал):
пользовательский тип можно определять через ссылку на тип объявленный в теле интерфейса при условии, что этот интерфейс воткнут в модуль. Если параметризировать интерфейс типом(ами), то получим параметризируемые структуры данных. по-моему забавно smile.gif
Код
interface #(parameter type templatization_type_pt = int, parameter int size_p=8 )type_templated_if;
   typedef templatization_type_pt templated_array_type_t[size];
endinterface

module my_m(type_templated_if my_if);
   typedef my_if.templated_array_type_t my_templated_array_t;
   my_templated_array_t my_typed_array;
endmodule


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 9 2009, 19:06
Сообщение #161


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



А у меня вот такой вот вопрос...

Код
reg                    global_prereset;            //reset for PLL
reg            [27:0]    global_prereset_reg;        //reset delay reg
initial begin
    global_prereset = 0;
    global_prereset_reg = 0;
end
always    @(posedge CLK_50) begin : global_prereset_build
    if (global_prereset_reg < (global_def :: GLOBAL_RESET_DELAY)) begin
        global_prereset <= 1;
        global_prereset_reg++;
    end else global_prereset <= 0;
end


Тут по правилам Verilog, объявляю переменную типа reg. Она может иметь 4 состояния, поэтому моделсим показывает неопределенное состояние этих сигналов, если не сделать initial.

Теперь вместо reg назовем переменную logic, результат такой же как и для reg, т.е. опять нужен initial.
Если же назвать переменные bit, которые могут принимать лишь 2 значения - 0 и 1, то все прекрасно работает без initial.

Необходима ли инициализация переменных типа bit, и какое значение она примет "по-умолчанию"?


Дальше я что-то вообще запутался.
В Verilog, можно написать
Код
assign a = 10;

если а объявлена как wire
и можно написать
Код
always @(posedge CLK) a <= 10;

если а объявлена как reg
Вроде бы, можно сказать, что wire - это просто соединение, а reg - комбинационная логика, на ней уже можно строить тригеры и прочее.

Для SV переменные bit и logic можно использовать где угодно. Что это означает? Просто более абстрактный подход, типа компилятор сам решит во что превратить переменную? Прошу специалистов разъяснить...





Цитата
A 4-state
variable can be explicitly declared using the keyword pair var
logic. For example:
Код
var logic [63:0] addr; // a 64-bit wide variable

A Verilog net type defaults to being a 4-state logic data type. A net
can also be explicitly declared as a 4-state data type using the logic
keyword. For example:
Код
wire logic [63:0] data; // a 64-bit wide net


Ква ругается на вторую, а первая прокатывает blink.gif

Простите за разговорчивость. Нашел ответ на первую часть вопроса:
Цитата
All 2-state date types begin simulation with a logic 0. Since 2-state
types do not store an X value, they cannot represent an unitialized
state. This is one of the reasons that it is preferable to use 4-state
types to represent synthesizable RTL models.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Dec 9 2009, 23:38
Сообщение #162


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(torik @ Dec 9 2009, 23:06) *
Теперь вместо reg назовем переменную logic, результат такой же как и для reg, т.е. опять нужен initial.
Если же назвать переменные bit, которые могут принимать лишь 2 значения - 0 и 1, то все прекрасно работает без initial.

вы ещё забываете о таком замечательном действии как инлайн инициализация
Код
reg x=1'b0;
в этом случае переменная приобретает значение ещё до начала симуляционного времени (initial, если я не ошибаюсь, тоже присваивает значение до модельного времени//конечно если не стоит задержка #0)
Цитата(torik @ Dec 9 2009, 23:06) *
Вроде бы, можно сказать, что wire - это просто соединение, а reg - комбинационная логика, на ней уже можно строить тригеры и прочее.

противопоставлять wire и reg/bit некорректно, корректно противопоставлять wire и var, т.е. есть типы данных(reg, int, string, my_type) и есть вид(или класс или тип) объекта(сигнал/переменная/параметр/макрос-переменная(genvar))
типам данных присущи множества/диапазоны значений и структура;
классы объекта составляют парадигму языка. ну например, genvar - это переменная препроцессора, параметр - переменная времени компиляции, сигналу присущи свойства уровнем абстракции ниже логического(физические свойства) и у сигнала нет дискретного во времени состояния, т.е. действительно похож на провод: если его подключить к источнику, то по нему течёт ток, если изменить скачко образно силу тока, то по нему будет теч ток другой силы, но всё равно будет течь непрерывно, хотя уровень тока кака-будто бы дискретно изменился, а если его отключить от источника, то не будет течь никакой, т.е. у сигнала нет состояния в прошлом/настоящем/будущем у него есть только одно состояние "всегда", т.е. у сигнала нет памяти как у переменной; но говоря о памяти переменной ни в коем случае нельзя понимать её как память в модельном времени - т.е. как регистр/зачёлку, а только как память языковой парадигмы. лучше всего это показать на примере:
Код
(var) int a;
always_comb
  begin
    a=b;
    a=a+1;
    a=a**2;
    a=a-1;
  end

это не запоминающий элемент на практике, а комбинационная схема, что же помнит тогда a? а помнит своё предыдущее состояние (кстати, не только самое последнее, и даже не только прошлое).
то что при помощи переменной можно описать физическую память, это только производная от её свойств как класса объекта.
почему происходит постоянная путаница между этими понятиями? потому, что по умолчанию всё что явно не декларировано как сигнал, является переменной. т.е. int a; на самом деле это var int a;
при этом необходимо помнить, что не корректно говорить об исключительном противопоставрении var - wire, так как по сути говоря, сигналы существуют 12 типов (по их "физическим" свойствам) т.е. корректное противопоставление было бы var - {wire,wor,wand,tri,,supply0 ...}
чем отличается сигнал от переменной на практике:
- сигнал может иметь несколько драйверов, переменная нет (т.е. синалу можно присваивать несколько значений одновременно, правило разрешения определит каким будет результирующее значение множественного присваивания), при этом переменной можно присваивать значения в нескольких блоках, однако это не будет считаться одновременным присваиванием, т.к. действует правило "кто прследний тот и папа" (но при этом если переменной присваивается значения оператором непрерывного присваивания, то это может быть только единственным присваиванием этой переменной);
- т.к. сигнал не может хранить значение ему нельзя присваивать значения в процедурных блоках, а только в операторах непрерывного присваивания assign (присваивание при объявлении сигнала и соединение с портом для сигнала считаются непрерывными присваиваниями), в то же время переменной можно присваивать значение в любых типах блоков а также оператором непрерывного присваивания assign, но если существует непрерывное присваивание, то это может быть единственным присваиванием данной переменной;
- переменная не может быть соединена с портом inout;


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 10 2009, 08:02
Сообщение #163


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Цитата
вы ещё забываете о таком замечательном действии как инлайн инициализация


Ага, периодически забываю, спасибо. Инлайн инициализация, насколько я понял, тождественна initial? В размере кода я разницы не заметил...



Вот такая штука не катит, почему? Особенность ква?
Код
wire logic sdfgsdfg;


Ну и насчет переменных bit с двумями состояниями. Вычитал, что такие переменные необходимы вобщем-то для тестбенчей.
Если использовать их в тестбенче, а подключать к ним сигналы logic тестируемого модуля, не получится ли что можно упустить при моделировании некие моменты, связанные с начальной инициализацией?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
des00
сообщение Dec 10 2009, 09:16
Сообщение #164


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



уважаемый CaPpuCcino сильно пошел в теорию, вот на пальцах

Цитата(torik @ Dec 10 2009, 02:02) *
Аот такая штука не катит, почему? Особенность ква?
Код
wire logic sdfgsdfg;


потому что wire/wand/wor/wxor/tri/... это декларация сигнала-цепи, а bit/logic/reg/enum/class..... это декларация переменной. Вы пытаетесь их смешивать. К цепям можно использовать только длительные присвоение (assign), а переменным любые.

Цитата(torik @ Dec 10 2009, 02:02) *
Ага, периодически забываю, спасибо. Инлайн инициализация, насколько я понял, тождественна initial? В размере кода я разницы не заметил...


вы про RTL ? там это монописуально, а вот в tb разница есть

Цитата
Если использовать их в тестбенче, а подключать к ним сигналы logic тестируемого модуля, не получится ли что можно упустить при моделировании некие моменты, связанные с начальной инициализацией?


вы правы, тут надо смотреть как работает ваше железо и помнить что bit вектора/массивы весят как минимум в 2 раза меньше чем они же но на logic/reg. Имеется в виду память симулятора %)


--------------------
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 10 2009, 10:12
Сообщение #165


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Цитата
потому что wire/wand/wor/wxor/tri/... это декларация сигнала-цепи, а bit/logic/reg/enum/class..... это декларация переменной. Вы пытаетесь их смешивать. К цепям можно использовать только длительные присвоение (assign), а переменным любые.


В книжке "Springer - SystemVerilog for Design, 2nd Edition" говорится, что wire, var - это тип. А logic/bit - это тип данных.
По-умолчанию, wire - 4 состояния, т.е. logic. Но можно и явно указать wire logic, так ниписано в книге. Верно? Т.к. wire может быть только 4 состояния и не иначе, то запись logic вроде излишняя, но дело принципа...

Цитата
вы про RTL ? там это монописуально, а вот в tb разница есть

Расшифруйте неразумному, пожалуйста, что такое tb...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

18 страниц V  « < 9 10 11 12 13 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01531 секунд с 7
ELECTRONIX ©2004-2016