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

dubb

Участник
  • Постов

    47
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о dubb

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

1 752 просмотра профиля
  1. Спасибо! Вот тут тоже нашел ответ https://stackoverflow.com/questions/24179095/modelsim-optimization-issue вот в таком виде получил что хотел: vsim -voptargs=+acc=lprn +initreg+0 top
  2. Подниму тему, т.к. вопрос очень близкий, как раз по упразднению ключика -novopt Угараздило воспользоваться Квестой 10.7с и никак не получается увидеть хоть какие-нибудь сигналы в тестбэнче, и решения пока тоже не нашел. Компилирую SystemVerilog файлы командой вида: vlog -O0 +initreg+0 C:/temp/top.v Далее запускаю симуляцию: vsim +initreg+0 top В top.v генерация тактовой, счетчик от нее, в квесте в Objects ничего, она все оптимизировала и выбросила за ненадобностью... Манипуляции в modelsim.ini вроде [vsim] ; VoptFlow = 1 - было VoptFlow = 0 приводят к тому что при попытке запуска симуляции квеста намекает что я неправильно живу и -novopt уже нельзя Итак вопрос: какая же теперь философия использования этого симулятора, для случая, когда мне нужно отладить небольшой проект, но желательно иметь возможность заглянуть в любой модуль и сигнал? Или как отключить оптимизацию в Questasim 10.7+ ?
  3. Несколько вариантов: 1) поставить в ПЛИС софтовый проц (NIOS, Microblaze) который будет общаться с nRF, можно использовать кучу либ под микроконтроллеры для работы с nRF, а с техническим английским надо что-то делать) 2) сделать конечный автомат для прогрузки и общения с nRF. соответственно любое изменение-правка загрузки - пересборка ПЛИС 3) подумать еще раз над задачей. С какой точностью нужно знать на удаленном конце о наличии/отсутствии излучения? Может такое решение и не совсем подойдет
  4. О, мне кажется Вы очень щедры, за такую "помощь в написании" помогающему вполне хватит тысяч 30, хотя можно и МРОТ поставить, а то за 30 - от желающих отбоя не будет)
  5. Про ISE не помню, а в Vivado хитрая кнопка с конфигурацией загрузки появляется если нажать "Open Implemented Design" и зайти в настройки проекта в пункт Bitstream. Там она появляется над таблицей, об этих же настройках речь?
  6. Добрый день, уважаемые разработчики! Есть задача - сделать Far-End loopback для 10G ethernet. Т.е. входящий снаружи поток, нужно завернуть обратно, без к-либо перестановки MACов и персборки пакетов. Аппаратная платформа - FPGA, Xilinx Kintex 7. И я сразу вижу следующую проблему этого подхода - разница тактовых передатчика и моего девайса. Т.е. я не могу просто завернуть поток, т.к. приемник восстанавливает клок из входного потока, а передатчик работает только на входном опорном клоке, переключить на восстановленный от приемника его нельзя. Теперь вопрос: Есть ли в стандарте на 10G ethernet вещи, регламентирующие коррекцию тактовой, например вставка каких-нибудь служебных символов на уровне кодера 64b/66b ? В стандарте я пока нашел что-то похожее, в виде ||R|| символов, но еще не осознал это оно или нет. Т.е. если воткнуть корку, которая будет работать до уровня XGMII смогу ли я завернуть напрямую входящий поток на выход? или понадобиться оперировать пакетами (убирать / добавлять паузы) ?
  7. Реанимирую старую тему. Кто-нибудь пользовался этой фичей - расширения адресного пространства? Насколько стабильно работает? У меня возникли проблемы с "улетанием" Микроблейза в неведомые дали, при попытке провести тест памяти. В проекте с адреса 0x1_0000_0000 прилинкован 1Gb DDR3, но если поставить туда блочную память, то ситуация похожая Вот что происходит: #include "mb_interface.h" u32 Data; u32 Rd_Data; u32 err_cnt = 0; u64 Addr = 0x0000000100000000LL; // write-read test for (u32 i = 0; i < 0x1000; i++) // words count loop { Data = (u32)i; swea(Addr, Data); // Store word to extended address Rd_Data = lwea(Addr); if (Data != Rd_Data) { err_cnt++; xil_printf("Err cnt: %u\n", cnt); } Addr = Addr + 4; } При выполнении такого кода проц улетает в какой-то бесконечный цикл, частью которого является, например, сообщение "Err cnt: %u". Оно в терминле крутиться постоянно. Здесь я использую обращение в расширенном адресном пространстве в соответствии с MicroBlaze Processor Reference Guide(UG984) - функции swea(u62, u32) и lwea(u32). Одиночные попытки прочитать - записать по произвольному адресу в диапазоне выше 0x1_0000_0000 как правило успешны. Создается впечатление, что при обращении к MIG я одновременно записываю в область локальной памяти (что лежит с нулевого адреса) и это приводит к вышеописанным проблемам. Итак вопрос к тем кто использовал эту опцию в МБ. Работает ли оно у Вас? Может у меня не хватает какой-нибудь включенной опции компилятора или чего-то еще? Спасибо!
  8. Решение найдено при более пристальном изучении исходников опорного проекта, а именно файла es_pc_host.tcl Функция es_host_gen_csv_viv как раз занимается пост-обработкой данных и расчетом матрицы BER для диаграммы Там при использовании DFE эквалайзера (lpm_mode = 0) рассчитывают BER для двух случаев UT_SIGN + и - , после чего поэлементно суммируют для всей матрицы # ################################################################################ ##################### # Function: es_host_gen_csv_viv # Description: Given arrays containing eye scan data, generates csv file that can be opened in Vivado # # Parameters: # csv_file: name of output csv file # lpm_mode: equalizer mode # vert_step: vertical scan step size # horz_arr_a: reference to array populated with horizontal offset values # vert_arr_a: reference to array populated with vertical offset values # utsign_arr_a: reference to array populated with ut-sign values # sample_count_arr_a: reference to array populated with sample count values # error_count_arr_a: reference to array populated with error count values # prescale_arr_a: reference to array populated with prescale values # data width: parallel data width # rate: rate mode (e.g. full-rate, half-rate, etc) # # Returns: none # ################################################################################ ##################### proc es_host_gen_csv_viv {csv_file lpm_mode vert_step horz_step horz_arr_a vert_arr_a utsign_arr_a sample_count_arr_a error_count_arr_a prescale_arr_a data_width rate start_time} { upvar $horz_arr_a horz_arr upvar $prescale_arr_a prescale_arr upvar $vert_arr_a vert_arr upvar $utsign_arr_a utsign_arr upvar $sample_count_arr_a sample_count_arr upvar $error_count_arr_a error_count_arr set f_csv [open $csv_file w] # Generate CSV Header iBERTplotter puts $f_csv "SW Version,2013.2.0" puts $f_csv "GT Type,7 Series GTX" puts $f_csv "Date and Time Started, $start_time" puts $f_csv "Date and Time Ended, [clock format [clock seconds] -format {%b. %d %Y %I:%M:%S %p}]" puts $f_csv "Scan Name,$csv_file" puts $f_csv "Settings," #puts $f_csv "Open Area,3072" puts $f_csv "Open Area,N/A" puts $f_csv "Dwell,BER" puts $f_csv "Dwell BER,1e-$prescale_arr(0,0,0)" puts $f_csv "Dwell Time,0" puts $f_csv "Horizontal Increment,$vert_step" puts $f_csv "Horizontal Range,-0.500 UI to 0.500 UI" puts $f_csv "Vertical Increment,$vert_step" puts $f_csv "Vertical Range,100%" puts $f_csv "Scan Start" set first_line [lsort -integer [array names horz_arr]] #puts $first_line puts -nonewline $f_csv "2d statistical," puts $f_csv [join $first_line ","] set ber 0 set iter 0 foreach curr_vert [lsort -decreasing -integer [array names vert_arr]] { set ber_list $curr_vert foreach curr_horz [lsort -integer [array names horz_arr]] { if {$lpm_mode == 1} { # In LPM mode, only process data with ut-sign of 0 if {[info exists error_count_arr($curr_horz,$curr_vert,0)] == 1} { set curr_err0 $error_count_arr($curr_horz,$curr_vert,0) set curr_samp0 $sample_count_arr($curr_horz,$curr_vert,0) set curr_prescale0 $prescale_arr($curr_horz,$curr_vert,0) # Get total samples by multiplying sample count with data width and 2^(prescale + 1) set curr_tot_samp0 [expr wide($curr_samp0) * ($data_width << (1+$curr_prescale0) )] set ber [format "%.2E" [expr double($curr_err0)/double($curr_tot_samp0)]] # To limit BER floor, assume 1 as minimum number of errors. if {$ber == 0} { set ber [format "%.2E" [expr 1/double($curr_tot_samp0)]] } lappend ber_list $ber } else { puts $f_csv "Error: X:$curr_horz, Y:$curr_vert, UT:0 data point does not exist!" } } else { # # In DFE mode, average BER for ut-sign 0 and 1 if {[info exists error_count_arr($curr_horz,$curr_vert,0)] == 1 && [info exists error_count_arr($curr_horz,$curr_vert,1)] == 1} { #puts "horz = $curr_horz vert = $curr_vert" set curr_err0 $error_count_arr($curr_horz,$curr_vert,0) set curr_samp0 $sample_count_arr($curr_horz,$curr_vert,0) set curr_prescale0 $prescale_arr($curr_horz,$curr_vert,0) # Get total samples by multiplying sample count with data width and 2^(prescale + 1) set curr_tot_samp0 [expr wide($curr_samp0) * ($data_width << (1+$curr_prescale0)) ] # Calculate BER for ut-sign of 0 set ber0 [expr double($curr_err0)/double($curr_tot_samp0) ] set curr_err1 $error_count_arr($curr_horz,$curr_vert,1) set curr_samp1 $sample_count_arr($curr_horz,$curr_vert,1) set curr_prescale1 $prescale_arr($curr_horz,$curr_vert,1) # Get total samples by multiplying sample count with data width and 2^(prescale + 1) set curr_tot_samp1 [expr wide($curr_samp1) * ($data_width << (1+$curr_prescale1)) ] # Calculate BER for ut-sign of 1 set ber1 [expr double($curr_err1)/double($curr_tot_samp1) ] #puts "$curr_err0,$curr_samp0,$curr_prescale0,$curr_tot_samp0" # Calculate final BER set ber [format "%.2E" [expr ($ber0 + $ber1)/2]] if {$ber == 0} { set ber [format "%.2E" [expr 1/(double($curr_tot_samp0) + double($curr_tot_samp1))]] } lappend ber_list $ber } else { puts $f_csv "Error: X:$curr_horz, Y:$curr_vert data points do not exist or incomplete (not both UT signs present)!" } } #puts $f_csv "$iter,NA,NA,NA,NA,$curr_vert,$curr_horz,NA,NA,NA,$ber" set iter [expr $iter + 1] } puts $f_csv [join $ber_list ","] #puts $ber_list } puts $f_csv "Scan End" close $f_csv } Вот так вот поговорил с собой :laughing:
  9. Доброго времени суток. Хочу построить глазковую диаграмму для трансвера в режиме 10GBASE-R на плате KC705. Но думаю железо тут не самая существенная деталь, ибо все трансиверы в 7 серии имеют схожую функциональнось. Как опорный проект использую http://www.xilinx.com/support/documentatio...98-eye-scan.pdf Проблема вот в чем: я не совсем понимаю как построить эту диаграмму в режиме c DFE экавлайзером. В UG476 в разделе RX Margin Analysis написано следующее: ну и снабжено картинкой как эта чудо-фича работает: так вот непонятно как объединять данные для +UT и -UT, а нужно разобраться и кастомизировать этот проект. сейчас делая два прохода с параметрами UT_SIGN 0 и 1, что соответствует + и - получаю две картинки, которые выглядят как отзеркаленные относительно горизонтальной оси. Да и непохожесть картинки на глаз настораживает. Складывается ощущение, что я чего-то не понимаю Вот пример сканирования с UT_SIGN = 0 Может кто поделится опытом как правильно делать сканирование в таком режиме?
  10. Rob, спасибо, пропустил эту замечательную настройку Микроблейза. Думаю теперь обойдется без своих велосипедов)
  11. Если я вас правильно понял, то нужно написать свое ядро, у которого наружу будут смотреть AXI_Master (к контроллеру памяти), AXI_Slave0 (к микроблейзу интерфейс памяти) и AXI_Slave1 (к микроблейзу интерфейс управления для переключения сегментов памяти). Ну или интерфейсы до МБ можно засунуть в один AXI c адресным пространством типа [Размер сегмента памяти + управляющий регистр] ? Почему микроблейз - из-за распространенности, много примеров, документации. Сейчас задача - тестирование памяти. Вы можете посоветовать какой-то вариант 64 бит софотового проца с контроллером DDR3? В процах пока не силен к сожалению.
  12. Доброго времени суток. Имеется Vivado 2016.2, борда KC705 + скоро появиться модуль память SODIMM 4GB вместо стандартного. Нужно присоединить память DDR3 на 4 Гигабайта к Микроблейзу. Для хранения данных в процессе работы, Использую Xilinx MIG. Соответственно память появляется в общем адресном пространстве системы, а поскольку МБ 32 битный оно всё вмещает 4 ГБ. На вопрос "можно-ли это сделать" ответили здесь https://forums.xilinx.com/t5/Memory-Interfa...DR3/td-p/632200 говорят что можно, хоть 8 ГБ. Теперь вопрос "как?" Каким образом организовать доступ к этой памяти? На некоторых англо-язычных форумах советуют Memory segmentation, но примеров не приводят. Принцип сегментации памяти ясен как белый день, но как его реализовать на практике непонятно. Можно-ли это сделать стандартными средствами? Или нужно будет городить прослойку между Master-AXI и MIG? В общем хотелось бы услышать совет от тех кто уже прошел эту дорогу, уверен не у меня первого возникла необходимость подключить более 2ГБ памяти )) Заранее спасибо за ответы.
  13. Доброго времени суток! Вопрос в следующем: при добавлении файлов в проект с system verilog кодом, но с расширением *.v вивада воспринемает их по умолчанию как verilog и соответственно не распознаёт синтаксис system verilog. Сейчас чтобы это побороть приходиться вручную у каждого файла в свойствах устанавливать в поле Type значение SystemVerilog, эта процедура несколько напрягает, особенно когда создается новый проект и требуется одновременно добавить большое количество файлов. Итак вопрос, есть ли какое-нибудь автоматизированное средство для установки типа СистемВерилог для всех файлов *.v в проекте? Переименование файлов в *.sv на подходит, т.к. религия и история не позволяет этого сделать Заранее спасибо!
  14. STM32F217ZT & USB3300

    Вы USB используете в режиме хоста? У меня была несколько проще схема - у физики был свой кварц, ресет сидел на земле (напрямую без резистора), ID тоже на земле (мне нужен был хост). Остальное, вроде, так-же. Кстати у микрухи пузо должно на земле сидеть, я у вас на схеме не нашёл доп. ноги для неё, хотя может у вас так символ нарисован? Провертье что есть земля.
×
×
  • Создать...