Des333 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба ... вариант с прекомпилятором использовать не хочется, хотчется языковыми средствами. спб Встала аналогичная задача, только коммутировать интерфейсы необходимо динамически во время работы(в железе). То есть вариант с прекомпилятором отпадает в принципе. Не могли бы Вы поделиться своими соображениями на данную тему: нашли ли вы какое-либо изящное решение или поняли, что его не существует? Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 6 июня, 2009 Опубликовано 6 июня, 2009 · Жалоба Встала аналогичная задача, только коммутировать интерфейсы необходимо динамически во время работы(в железе). на мой взгляд подобное языковыми средствами не решается. динамическая коммутация в железе - это полноценный блок-коммутатор, т.е. отдельное устройство (поправте, плз., если я заблуждаюсь). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IL-76 0 14 июля, 2009 Опубликовано 14 июля, 2009 · Жалоба А не мог бы кто-нибудь выложить на рапидшару или подобный сервис "SystemVerilog For Design: A guide to using SystemVerilog for HW design and Modeling. Stuard Sutherland, Simon Davidmann // Kluwer Academic Publishers"? Доступа к фтп не имею, а хотелось бы почитать.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaOR 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба SV for Design Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IL-76 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Большое спасибо, MaOR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 октября, 2009 Опубликовано 7 октября, 2009 · Жалоба господа проясните следующий момент, какой по вашему мнению должен быть результат в outb/outg 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 будте внимательны Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 1 12 ноября, 2009 Опубликовано 12 ноября, 2009 · Жалоба Вот, наткнулся на упоминание SystemVerilog 2009, по ссылкам кратко некоторые нововведения: http://www.sunburst-design.com/papers/DAC2...burstDesign.pdf http://www.sunburst-design.com/papers/DAC2...therlandHDL.pdf Думаю будт интересно, кто на SV пишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 ноября, 2009 Опубликовано 16 ноября, 2009 · Жалоба Вот, наткнулся на упоминание 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 16 ноября, 2009 Опубликовано 16 ноября, 2009 · Жалоба PS. надо готовиться к валу вопросов на форуме типа "почему не собирается" %) можно успокоиться только тем, что ещё относительно не скоро Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Вот, наткнулся на упоминание SystemVerilog 2009, по ссылкам кратко некоторые нововведения: наткнулся в новом стандарте на интересную лазейку для параметризирования типов данных(если я, конечно, ничего не попутал): пользовательский тип можно определять через ссылку на тип объявленный в теле интерфейса при условии, что этот интерфейс воткнут в модуль. Если параметризировать интерфейс типом(ами), то получим параметризируемые структуры данных. по-моему забавно :) 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 9 декабря, 2009 Опубликовано 9 декабря, 2009 · Жалоба А у меня вот такой вот вопрос... 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: Простите за разговорчивость. Нашел ответ на первую часть вопроса: 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 9 декабря, 2009 Опубликовано 9 декабря, 2009 · Жалоба Теперь вместо reg назовем переменную logic, результат такой же как и для reg, т.е. опять нужен initial. Если же назвать переменные bit, которые могут принимать лишь 2 значения - 0 и 1, то все прекрасно работает без initial. вы ещё забываете о таком замечательном действии как инлайн инициализация reg x=1'b0; в этом случае переменная приобретает значение ещё до начала симуляционного времени (initial, если я не ошибаюсь, тоже присваивает значение до модельного времени//конечно если не стоит задержка #0) Вроде бы, можно сказать, что 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 10 декабря, 2009 Опубликовано 10 декабря, 2009 · Жалоба вы ещё забываете о таком замечательном действии как инлайн инициализация Ага, периодически забываю, спасибо. Инлайн инициализация, насколько я понял, тождественна initial? В размере кода я разницы не заметил... Вот такая штука не катит, почему? Особенность ква? wire logic sdfgsdfg; Ну и насчет переменных bit с двумями состояниями. Вычитал, что такие переменные необходимы вобщем-то для тестбенчей. Если использовать их в тестбенче, а подключать к ним сигналы logic тестируемого модуля, не получится ли что можно упустить при моделировании некие моменты, связанные с начальной инициализацией? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 декабря, 2009 Опубликовано 10 декабря, 2009 · Жалоба уважаемый CaPpuCcino сильно пошел в теорию, вот на пальцах Аот такая штука не катит, почему? Особенность ква? wire logic sdfgsdfg; потому что wire/wand/wor/wxor/tri/... это декларация сигнала-цепи, а bit/logic/reg/enum/class..... это декларация переменной. Вы пытаетесь их смешивать. К цепям можно использовать только длительные присвоение (assign), а переменным любые. Ага, периодически забываю, спасибо. Инлайн инициализация, насколько я понял, тождественна initial? В размере кода я разницы не заметил... вы про RTL ? там это монописуально, а вот в tb разница есть Если использовать их в тестбенче, а подключать к ним сигналы logic тестируемого модуля, не получится ли что можно упустить при моделировании некие моменты, связанные с начальной инициализацией? вы правы, тут надо смотреть как работает ваше железо и помнить что bit вектора/массивы весят как минимум в 2 раза меньше чем они же но на logic/reg. Имеется в виду память симулятора %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 10 декабря, 2009 Опубликовано 10 декабря, 2009 · Жалоба потому что 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... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться