Jump to content

    

_Ivan_

Свой
  • Content Count

    607
  • Joined

  • Last visited

Everything posted by _Ivan_


  1. shift_reg <= {shift_reg[6:0], datain} это вместо for(i=7; i>0; i=i-1) begin shift_reg[i] <= shift_reg[i-1]; end shift_reg[0] <= datain; А shift_reg в массиве знаковые или беззнаковые? И их точно 16 штук или согласно 3 сообщению 6? и массив из 16 слов по 8 бит в верилоге это reg [7:0] array[0:15]; в общем случае это вот так по идее reg [15:0] dout; // в нашем случае это как провод, а не регистр integer i; always@* begin for(i = 0; i < 16; i = i + 1) begin dout = dout + shift_reg[i]; end end но вообще это очень плохо, так как получится слишком большой сумматор из 16 ступеней что приведет к большим propogational delay скорей всего и частота работы схемы снизится
  2. sr в ветке положительного резета есть shift_reg? вторую часть можно написать элегантнее: shift_reg <= {shift_reg[6:0], datain}; без всяких циклов. Я немного не понял, вы хотите просуммировать биты в регистре или просуммировать массив регистров?
  3. Посмотрите в сторону generate для SV.
  4. wire - это провод. Для соединения блоков и для выражения комбинационной логики. reg - может выражать последовательностную схему, а может комбинационную схему в зависимости от написания. подробнее можно прочитать тут https://habrahabr.ru/post/306982/ <= и = это неблокирующее и блокирующее присваивание. Основное правило - первое мы применяем в последовательностной логике, а второе в комбинационной. по фронту выдачу можно организовать что-то типа такого : пишем цикл нужный http://www.asic-world.com/verilog/verilog_one_day2.html вот тут затем туда вставляем фронт (@negedge clk) и выдаем данные - вот тут смотрите http://www.angelfire.com/in/verilogfaq/pli.html
  5. Цитата(go2winner @ Nov 18 2016, 13:28) Подаю rst. нет изменений, репрограю , нет имзенений, щелкаю switch кнопки(флаги) не работает.....беда. На отладочной rst от кнопки завел, чтобы проверять. Просто не представляю что творится. Работают только делители и пару еще простых вещел. Автомат лежит Резет от кнопки не очень хорошо. У вас может быть так, что снятие резета в произвольный момент времени способствует метастабильности всех регистров под резетом, поэтому схема не работает. http://www.eetimes.com/document.asp?doc_id=1278998 А клок откуда подается? Идет ли он через PLL или DCM или так напрямую? Какая плис?
  6. Смотрели ли вывод ошибок синтезатора и разводчика? Какая схема резета в девайсе?
  7. radigast, спасибо, очень ценный совет!
  8. Всем привет! Интересует такой вопрос: Вот у нас есть code coverage. Там анализируется такой показатель как transitions в fsm. Допустим в DUT у нас есть автомат, который при резете из любого состояния переходит в состояние IDLE. То есть чтобы получить 100% покрытия для модуля по этому показателю мне нужно сделать тестбенч, который резетит модуль в тот момент, когда в нем происходит экшен. Вопросы: 1) Как по фен-шую сделать такую штуку? Видится драйвер резета и sequence резета запущенная параллельно с нормальным тестбенчем и нужно еще получается отключать покрытие и scoreboard когда модуль в резете. 2) А такое вообще делают в верификационной индустрии? Показатель Code coverage всегда должен быть равен 100% или же можно идти на сделку с совестью и ...? У меня получилось 80 процентов всего по одному из модулей.
  9. Из последнего видел такое: https://forums.xilinx.com/t5/Xcell-Daily-Bl...ble/ba-p/729252
  10. Вопрос появился: Допустим у нас есть сложный sequence_item. А для reusable у нас сделан драйвер, который воспринимает только простые операции. Например есть burst на axi шине. А драйвер может только чтение или запись 1 слова. Преобразование сложного пакета в набор простых операций делаем в sequencer, так? Или есть какие то еще методы?
  11. Ссылку выше посмотрите. Этот учебник системнее.
  12. http://www.edaboard.com/thread195003.html Some of the key differences of Questa over ModelSim: Compile flow optimizations Simulation Performance optimizations (2-50X)
  13. http://www.sunburst-design.com/papers/Hunt...esets_paper.pdf в Advanced UVM эта статья скопирована Перечитал дискуссию, понял что я немного не понял Kopart Я сейчас речь веду про 100% transition coverage и phase jump поможет. А вот загнать это в default state увы. Видится только force release state_reg DUT
  14. Цитата(Kopart @ Oct 7 2016, 23:12) Заинтриговали. Напишите, этой свой вариант. Может я такой не проверял... Phase jump. Не думаю, что не проверяли.
  15. Цитата(AVR @ Oct 6 2016, 09:55) Вопрос автору темы: в каком софте делает coverage? Я вот тестированием Verilog-проектов занимаюсь, до уровня code coverage еще не доросли, но мне заранее интересно. Questasim Цитата(Loki5000 @ Oct 6 2016, 14:06) 100% Code coverage нужен только тогда, когда вы занимаетесь проектированием ради самого процесса проектирования. При решение реальных задач перфекционизм не уместен. Даже если речь об авионике и прочих ответственных задачах 100% Code coverage никогда не бывает. Верификация всегда базируется на балансе между достигаемым эффектом и затраченными усилиями. UVM, помимо прочего, призван это соотношение улучшить. Улучшить, но не идеализировать. Вообще 100% проверку теоретически может дать только формальная верификация. Но это больше красивая теория. Спасибо за мнение, но. Как раз у меня случай с авионикой. DO-254, 10^-9 вероятность отказа и прочее. И если ошибка - погибнут люди. А я потом спать не буду и все такое. Сейчас примерно смотрю - у меня по code coverage - переходы автомата из состояния в IDLE состояние по резету нету покрытия и default в автомате. Но так как там еще будет вотчдог, то наверное придется рушить автомат для покрытия этого и смотреть. В любом случае uvm это дело очень сильно упрощает и если я раньше думал что это гвозди микроскопом, то сейчас мне кажется при reusability модулей тестбенча это все весьма прекрасно.
  16. Я покупал электронную версию. Да и 40 баксов это отличная возможность стать лучше, мотивировать себя лучше знать uvm, а также сэкономить себе кучу рабочих часов за счет грамотной работы, а затем попросить прибавку к зарплате.
  17. Спасибо, но это читерство. Я тут недавно книгу Advanced UVM купил и сейчас пролистав ее решение нашел. Сначала сам попробую, потом с народом поделюсь. Это мой первый uvm тестбенч, хочу статью накатать.
  18. Хорошо, а еще такой вопрос: есть же default состояние в FSM И в рамках симулятора загнать DUT в это состояние можно только при помощи force release Иначе 100% line coverage не видать. Как с этим поступить?
  19. May be you first need to create work library and then add files which you need to simulate and then run vsim command with arguments such as global top file of testbench?
  20. Вопросец такой: я создал класс и написал к нему ограничения: Кодclass Point;    rand int  x;    rand int  y;   constraint range{       x >= -32768;       x <= 32767;       y >= -32768;       y <= 32767;   }   constraint crt{               x**2 + y**2 <= AMP1**2;               x**2 + y**2 >= AMP0**2;}   constraint corner{       x dist {-32768 := 10, [-32767:-1]:= 1, 0:= 10, [1:32766] := 1, 32767 := 10};       y dist {-32768 := 10, [-32767:-1]:= 1, 0:= 10, [1:32766] := 1, 32767 := 10};   } endclass У меня входные данные 16-битные, т.е. можно заменить int на shortint. Но AMP0 и AMP1 int. Как правильно сделать преобразование типов, ибо по кавергруппам я вижу что констрейн crt фейлится? Проблему решил! amp_dist: coverpoint int'(x)**2 + int'(y)**2
  21. Добрый день! Хочу сделать тестбенч для своего модуля и нашел подходящую корку vip i2c на сайте syswip. Мой код: CODE//first probe of SV OOP `timescale 1ns/10ps module tb_top; `include "i2c_s_if.sv" bit clk; bit rst_n; wire sda; initial begin clk = 0; forever begin #5 clk <= ~clk; end end initial begin rst_n = 0; #50; @(posedge clk) rst_n = 1; end i2c_s_if first(sda); test test_inst(first); io_expander_controller DUT ( .clk (clk), .rst_n (rst_n), .ar_test (), .data0_from_exp (), .data1_from_exp (), .io_exp_sda (sda), .io_exp_scl (first.scl) ); endmodule сам интерфейс: CODE`timescale 1ns/10ps interface i2c_s_if(inout tri1 sda); // I2C bus signals wire scl; // Tri-state buffer control logic sda_oe; // Tri-state buffers assign sda = sda_oe ? 1'bz : 1'b0; endinterface и код тестбенча: CODE`timescale 1ns/10ps program test(i2c_s_if i2c_slave_if); import I2C_S::*; import PACKET::*; typedef bit [7:0] bit8; typedef bit8 packet[$]; initial begin I2C_s_env i2c_slave = new(i2c_slave_if, "Standart", 55); i2c_slave.startEnv(); #100000; $display("Bla-Bla!"); #100000; $stop; end endprogram Бла-бла в квесте не появляется, sda файла верхнего уровня в x. Что я делаю не так? ПРиветствуются комментарии к структуре, хотя я понимаю, что нужно входить в UVM иерархию
  22. Да. Присылайте резюме!