Jump to content

    

RobFPGA

Свой
  • Content Count

    1825
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About RobFPGA

  • Rank
    Профессионал

Recent Profile Visitors

10830 profile views
  1. Приветствую! Ну так болт же - а вот к нему и задница . В ModelSIm это работает если складываются две одинаковые величины - ...state.last()+...state.last(), ...state.first()+...state.first(), dut.ST_PULS + dut.ST_PULS, даже ...state.next()+...state.next(), А вот разные значения даже одного enum ни ни! А почему так увы не знаю Удачи! Rob.
  2. Приветствую! В первом случае вы не можете сделать static cast так как state это переменная а не тип. А во втором случае вы натыкаетесь на область видимости типов. Если вы объявили тип enum в модуле то этот тип локален - вы не можете видеть его вне модуля. Обидно понимаешь ли Хотите видеть снаружи - объявляете тип в package и импортируйте куда нужно. Поэтому в вашем случае: либо переносить все в package - идеологически правильно но муторно. либо забит на строгость ModelSIm и отрубить ошибку несоответствия типов (через -suppress vsim-8386) и делать force dut.state = 6; либо .... взять болт с левой резьбой: force dut.state = dut.ST_PULS + dut.ST_PULS; (или даже dut.state.last() + dut.state.last() ) Хотя чревато это тем что на этот болт когда нибудь найдется своя задница. Удачи! Rob.
  3. Приветствую! Тестовой средой ничего не оптимизируется. При таком объявление enum представлен как int в 32 бита. И в коде при желании можно запросто воткнуть ему любое значение. Кстати и синтезаторы тоже не всегда нормально оптимизируют разрядность enum. В частности Qu периодически норовить синтезировать enum переменные в полные 32 бита если не обрезать разрядность до требуемой при объявлении. Удачи! Rob.
  4. Приветствую! Когда вы просто объявляете enum то тип этого enum анонимен и вы не можете сделать статический cast к этому анонимному типу. А сделать это через динамический $cast() не получится if (!$cast (state, ST_PULS+1) ... // cast bad Поэтому только небольшим изменением через статический cast - Но так как правильность static cast не проверяется надо иметь ввиду базовый тип enum по умолчанию. Так как в SV это обычно int (bit base) то каcтануть его к 'x не получится . Это можно делать только для logic base типов . Так же как и если базовый тип typedef enum [1:0] {....} state_t, а попытаться присвоить значение > 3. Удачи! Rob.
  5. Приветствую! На сколько знаю в Vivado нет - но можно прикинуть мин-мах и брать среднее. Или даже построить калибровочную кривую и меряя температуру и вольтаж динамически переключать число LUT в петле подстраивая частоту, да еще и фазу ... "... И тут Остапа понесло ... " Успехов! Rob.
  6. Приветствую! Теоретически по задержке в LUТ * 2 как минимальный ориентир . Ну а потом уточнить типичное время задержки на роутинг на тестовом дизайне на нужной FPGA. Вот результат для вышеприведенного кода с длиной в 10 LUT на чипе Alveo U50 Успехов! Rob.
  7. Приветствую! За ISE сейчас точно не скажу, -давно уже в нем ничего не делал. Но помню что похожее решение работало. А Vivado синтезирует такое без проблем. Думаю что для синтезатора важно что тут используется инстацирование примитивов LUT (как black_box), а не непосредственно синтез логики. Поэтому как бы и нет логической петли. А вот на имплементации Vivado уже ворчит варнингом DRC и предложением пометит в констрейнах эту цепь как ALLOW_COMBINATORIAL_LOOPS TRUE. Так что надо пробовать. Удачи. Rob.
  8. Приветствую! Ну и насколько я помню в Spartan6 вроде есть похожий встроенный клок ~50 MHz для конфигурации. Почитайте внимательно Spartan-6 Configuration User guide and data sheet как к нему подключится, чтобы свое не ваять. Удачи! Rob.
  9. Приветствую! Можно слепить генератор на внутренней логики типа петли из задержек и инвертора. Типа: module gen #(parameter LEN=5) ( output bit clk_o ); (* dont_touch="true" *) wire [LEN-1:0] stg; generate for (genvar gi=0; gi<LEN; ++gi) begin LUT1 #(.INIT(2'b10)) i_lut ( .O (stg[gi] ), // 1-bit output: LUT .I0((gi==0) ? ~stg[LEN-1] : stg[gi-1]) // 1-bit input: LUT ); end endgenerate always @(posedge stg[LEN-1]) begin clk_o <= ~clk_o; end endmodule Удачи! Rob.
  10. Приветствую! Вы не можете присвоить default. Это ключевое слово а не значение. Мне кажется вам надо присваивать state значение которое неопределенно в enum для этого state или которого нет в case где этот state используется. Как пример: force state = e_STATE_t'(ST_LAST_DEFINED + 1); или force state = e_STATE_t'('x); Удачи! Rob.
  11. Приветствую! Ну как я и предполагал - читать доки как минимум не хотим. То что вы обвели в кружочек это размер лота для конкретного типа испытаний ESD (это когда мс бьют током, больно!) - причем это число мс берется только для испытаний на ESD и берется с КАЖДОЙ партии раз в квартал или чаще в зависимости различных условий. А еще в каждой партии берется 77/45/25 штук мс для lifetime теста, который гоняется как минимум 2000 часов на этих мс. А еще берется ... Впрочем это наверно не изменить вашей веры что буржуи вам врут. И что не могут они делать такие крутые FPGA которые работают так долго. Ну и - Товарищ имей ввиду! Во всех цифрах в этой табличке (в частности 813,326) запятая отделяет группы порядков (..., миллионов, тысяч), а не десятичную часть! Удачи! Rob.
  12. Приветствую! Для начала указать в каком симе работаете. А потом смотреть доки по этому симу. Если это ModelSim то при запуске (или в конфигах) vsim можно указать опцию -svext=+lfmt. vsim -help расскажет что это такое. Удачи! Rob.
  13. Приветствую! Скорее всего какие то конфликты из за interface и modport. Может из за раздельной компиляции корок и модулей с интерфейсами. Хорошо что хоть знаете где копать. Удачи! Rob.
  14. Приветствую! Меня смущает вот эта цепь : pcie_port/pcie_i/inst/inst/pcie_top_i/pcie_7x_i/cfg_err_aer_headerlog_set_INST_0/O Явно это выход - и он не должен на земле сидеть - может где случайно занулили выход? Удачи! Rob.
  15. Приветствую! С того что в начале этой же таблички есть подробное описание с какой периодичностью проводят тесты, и сколько отбираются образцов и с какой периодичностью для различных испытаний. Или вы реально считаете что 1 чип наработал в сумме 813,326 часов (для StratixV) или 2,173,058 (для Cyclone5) ? То есть у вас не только с математикой но и со чтением проблемы - Укажите точно страницу/строку где в этой таблице написано что для испытаний на lifetime использовано всего 1 или 3 чипа? Удачи! Rob.