Jump to content

    

Ynicky

Участник
  • Content Count

    72
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Ynicky

  • Rank
    Участник
  1. Цитата(Golikov A. @ May 21 2015, 09:08) не понял расчета) у меня тогда получается 4 такта. 2 такта на чтение операндов и 1 такт на исполнение, 1 такт на запись. Почему вы в такты включили размер команды? Или почему вы в RISC процессоре исключили загрузку команды? А где 4 такта на извлечение команды? Если, конечно, Вы не сделаете извлечение 4 слов команды за 1 такт. Иначе нарушается конвейер при выполнении каждой команды за 1 такт. Я уже не говорю о том, что команды обработки данных перемежаются с командами ветвления. Хотя это справедливо и для тех RISC, где каждая команда имеет длину в 1 слово.
  2. Цитата(Golikov A. @ May 20 2015, 09:35) ну то есть надо на самом деле сделать 3 портовую оболочку брам, даже чуть проще 2 порта чтения и один запись, и автоматом получиться огромный регистровый файл. А вот теперь вопрос, зачем регистры в таком решении отделять от РАМ проца? Выигрыш только в сокращении шины адресации? В регистрах на LUTах можно за один такт складывать любые 2 и писать в третий, но эта возможность порождает дикие мультиплексоры которые жрут все LUTы, альтернативой я так понимаю служит несколько тактовая операция R1+R2->R3, реализуемая через 3 портовую БРАМ. И в этом случае у меня получается что нет смысла делать отдельно БРАМ регистров, и включить его в общий РАМ проца. Правильно рассуждаю или я что-то не учел? Давайте порассуждаем. Команда в Вашем случае должна содержать: Опкод - 1 слово. Адрес первого операнда - 1 слово. Адрес второго операнда - 1 слово. Адрес приемника - 1 слово. + 2 такта минимум на чтение операндов. + 1 такт на исполнение в АЛУ. + 1 такт запись результата. Итого получили 8 тактов. В RISC процессоре: 2 такта на загрузку первого операнда. 2 такта на загрузку второго операнда. 1 такт на исполнение в АЛУ. 1 такт на запись результата. Итого получили 6 тактов. В Вашем случае можно сэкономить 1 такт начиная считывать первый операнд не дождавшись конца загрузки команды. Можно еще укоротить адреса операндов (например в одном слове 2 адреса источников).
  3. Мне очень помогло это: [attachment=83387:lec9_2.pdf] http://www.kurtm.net/archive/2003-Fall-cs1..._html/lecnotes/
  4. Цитата(:-) @ Oct 18 2011, 09:22) Кстати, а вы смотрели выход max2769 на спектроанализаторе в аналоговом режиме? Как там выглядит спектр? А сдвиг всех литер одинаковый? Тогда, может, у вас кварцевый генератор плохой (низкая стабильность частоты у него)? А как посмотреть выход MAX2769 (и какой) в аналоговом режиме? Про генератор я подумал в первую очередь. Я использую NT3225SA-26M-NSA0322T. У него стабильность 2,5 ppm. Это гораздо меньше 26 кГц. Насколько я понял, у всех литер одинаковый сдвиг. Точный сдвиг можно будет вычислить после того как программисты осилят вторичку (определение координат в реальном времени). Николай. PS. Забыл добавить. На трех экземплярах приемника результат аналогичен.
  5. Наконец-то принял сигналы спутников. Оказалось, что все литеры сдвинуты примерно на +26 кГц. С чем это связано, пока не понял. Работаю как с полосой +-4 МГц, так и с +-8 МГц. С полосой +-8МГц неравномерность АЧХ очень сильная. При работе АРУ вообще непонятная АЧХ. Без АРУ - лучше. Выброс на частоте 1600 МГц - 32-я гармоника частоты 50 МГц на которой работает процессор. Настройки MAX2769 следующие: +-4 МГц: 0xA291FEB0 0x85502881 0xEAF71DC2 0x9EC00083 0x0C820D04 0x80000705 0x80000006 0x10061B27 0x1E0F4018 0x14C04029 +-8 МГц без АРУ: 0xA291FFD0 0x85512881 0xCAF71DC2 0x9EC00083 0x0C820D04 0x80000705 0x80000006 0x10061B27 0x1E0F4018 0x14C04029 +-8 МГц с АРУ: 0xA291FFD0 0x85502881 0xEAF71DC2 0x9EC00083 0x0C820D04 0x80000705 0x80000006 0x10061B27 0x1E0F4018 0x14C04029 АЧХ прилагаю. Николай. PS. Два месяца назад написал в службу поддержки ф.MAX. Задавал вопросы по MAX2769. В ответ запросили больше информации. Послал. С тех пор жду ответа.
  6. Цитата(:-) @ Sep 2 2011, 17:55) Вторая удачная конфигурация Интересно, а какая у Вас получится АЧХ со следующей конфигурацией: 0xA2919A30 - полоса пропускания 2,5 МГц. Остальные регистры не менял. То, что получилось у меня - во вложении. Николай.
  7. Цитата(:-) @ Sep 2 2011, 17:55) Вторая удачная конфигурация Сделал тоже самое у себя. Интересные получились результаты. Николай.
  8. Цитата(:-) @ Sep 1 2011, 17:26) Ой, а это у вас не сам сигнал в файле, а уже его спектр? Только я так и не понял у вас работает max2769 в режиме ГЛОНАСС или нет? В режиме lowpass filter mode (бит FCENX = 0), по-моему, значение бит FCEN не играет роли. А что значит "Минимальное время петли обратной связи - это 4 мС в фильтре ФАП"? Т.е. каждую мс вы считываете значения с интеграторов, но только каждые 4 мс используете их? А какую частоту выставляете для синтезатора несущей: соответствующую текущей расстройке или как-то хитро экстраполируете ее на время +4мс? Я сам пытаюсь использовать коррелятор из проекта namuru: http://www.gmat.unsw.edu.au/namuru/ А управляющую программу osgps: http://sourceforge.net/projects/osgps/ Отсчеты с АЦП мне не доступны, да и памяти столько в FPGA нет, чтобы их сохранить. А с MAX2769 я так и не могу принять ни одного спутника, ни в режиме ФНЧ ни в режиме ПФ. Значения с интеграторов я использую каждую эпоху. Усредняю и подставляю в формулу фазовой автоподстройки. Каждые 4мС записываю в управляющие регистры корректирующую информацию (новое значение фазы несущей). Для неподвижного объекта это время можно увеличить. Для динамического (самолет) больше нельзя сделать. Будет срыв автоподстройки. А вообще коррелятор у меня позаимствован у GP2021 (идея). Только я его модифицировал для работы с широкой входной полосой несущего сигнала, чтобы обрабатывал весь спектр ГЛОНАСС. И программа за основу взята у ф.Zarlink, которую они прилагают к своим отладочным платам. Николай.
  9. Цитата(:-) @ Aug 31 2011, 00:34) Это вы берете вторую ПЧ с gp2015 вместо третьей? Ох, как-то непривычно выглядит спектр в данном режиме у вас. А не могли бы вы выложить запись отсчетов, по которым у вас строился спектр, чтобы я мог сравнить в своей привычной программе? У меня спектр выглядит как в приложении. Выбросы около нулевой частоты и прочие тоже обычно прослеживаются, если взять БПФ от выборки подлинее. С причиной пока не разобрался, но так как они заметно не влияют на результат обработки пока оставил все как есть... Ой, очень любопытно узнать как отлаживается связка коррелятор+программа управления. Еще очень интересует вопрос как влияют задержки между моментом получения очередной выборки с коррелятора и моментом ввода новых команд коррелятору. В проекте RF приемника на GP2015 с выхода 1-й ПЧ идет ответвление для ГЛОНАССа на квадратурный смеситель U2794B, далее через RC ФНЧ - на АЦП AD9066 (используются 2 старших разряда). Для NAVSTAR-а используется остальная часть GP2015. АЧХ прикрепил. Так как схема довольно сложная, решил перейти на MAX2769. Дамп памяти для построения спектра в MATLAB-е прикрепил. Текс .m файла привожу ниже. fid = fopen('f1601bw18.dmp','r'); [a,count] = fread(fid,'uint16'); fclose(fid) c = log10(a) plot(c,'r-') title('GLONASS') ylabel('Log10(P)') xlabel('Frequency (0 = +13MHz, 2600 = 0MHz, 5200 = -13MHz (1 = 5000Hz))') hold on В состав моего коррелятора входят 2 синтезатора частот (для кода и несущей), комплексный смеситель (на основе ПЗУ), накапливающие сумматоры-интеграторы (за период 1 эпоха ПСП (1 мС)), а также счетчик местной шкалы времени. Каждую эпоху процессором считываются получаемые на интеграторах и других регистрах (псевдодальности, счетчик эпох и др.) отсчеты, которые обрабатываются и используются для задания корректирующей информации коррелятору. Минимальное время петли обратной связи - это 4 мС в фильтре ФАП. Фильтр слежения за кодом замыкается раз в 20 мС. Процессор можно применить общего назначения, только для вычисления координат требуется плавающая точка. Экспериментируя с MAX2769 установил, что нулевую центральную частоту внутреннего фильтра ПЧ можно выставить записав все 1 в поле FCEN. АЧХ для полосы 8 МГц с нулевой центральной частотой фильтра также вложил. Николай.
  10. Цитата(:-) @ Aug 30 2011, 01:17) А какая АЧХ у Вас получается? Чем не устраивает? А какой коррелятор Вы используете? Что-то самописное? А на чем сделано управление коррелятором? Коррелятор использую самодельный (написан на VHDL). При работе с приемником на GP2015 работают как ГЛОНАСС так и NAVSTAR. Только там у меня рабочая частота 25 МГц. В корреляторе есть возможность работы и на частоте 26 МГц, что используется в проекте с MAX2769. Коррелятор управляется софтпроцессором. АЧХ снимаю с помощью специальной программы. Настроил MAX2769 следующим образом: 0xA2918F90 0x85592881 - sign & mag 0xFEFF1DC2 0x9EC00083 0x0C820D04 - 1601MHz, RDIV=26 0x08000705 0x80000006 0x10061B27 Два последних регистра не конфигурирую (оставляю значения по умолчанию). Изменил Ваши настройки с учетом используемой у меня аппаратуры. АЧХ прилагаю. Выброс вблизи 0-й частоты - полагаю помеха от внутреннего VCO. При изменении центральной частоты VCO меняется и положение этого выброса. Николай.
  11. Цитата(:-) @ Jan 16 2011, 21:41) В указанном по ссылке проекте частота TCXO=16МГц; Т.к. исползьзуются обе квадратуры, то полоса оцифровываемого сигнала - 16МГц. При этом, чтобы фильтр ПЧ MAX2769 не обрезал полезный сигнал выбран его режим работы в виде фильтра НЧ с частотой среза 9 МГц. Т.е. относительно нулевой частоты сигнал простирается в положительную и отрицательную сторону на 9 МГц (т.е. полная полоса=18МГц). Сделал RF приемник на MAX2769 с выходами I и q. Коррелятор аппаратный на FPGA. Никак не получается настроить ПЧ приемника на полосу +-9МГц. АЧХ не соответствует тому что надо. Хотя полосы 2,5, 4,2 и 8 МГц в режиме с нулевой ПЧ (zero-IF mode) те что надо. Если не сложно, не могли бы Вы дать настройки каждого регистра MAX2769? Николай.
  12. Цитата(ADA007 @ Feb 23 2011, 21:10) А это случайно не аналог Cortex-M1? Нет. Вот его операции АЛУ: // Shift instructions `ALU_OP_SLL: result_o = {1'b0, a_i << b_i[4:0]}; `ALU_OP_SRL: result_o = {1'b0, a_i >> b_i[4:0]}; `ALU_OP_SRA: result_o = {1'b0, {{32{a_i[31]}}, a_i } >> b_i[4:0]}; // Arithmetical instructions `ALU_OP_ADD: if(signed_i) result_o = a_i + b_i; // Result may include a carry bit else result_o = {1'b0, a_i + b_i}; `ALU_OP_SUB: if(signed_i) result_o = a_i - b_i; // Result may include a carry bit else result_o = {1'b0, a_i - b_i}; // Logical instructions `ALU_OP_AND: result_o = {1'b0, a_i & b_i}; `ALU_OP_OR: result_o = {1'b0, a_i | b_i}; `ALU_OP_XOR: result_o = {1'b0, a_i ^ b_i}; `ALU_OP_NOR: result_o = {1'b0, ~(a_i | b_i)}; // Conditional instructions `ALU_OP_SEQ: result_o = (a_i == b_i) ? 33'b1 : 33'b0; `ALU_OP_SNE: result_o = (a_i != b_i) ? 33'b1 : 33'b0; `ALU_OP_SLT: if(signed_i) result_o = ({~a_i[31],a_i[30:0]} < {~b_i[31],b_i[30:0]}) ? 33'b1 : 33'b0; else result_o = (a_i < b_i) ? 33'b1 : 33'b0; `ALU_OP_SLE: if(signed_i) result_o = ({~a_i[31],a_i[30:0]} <= {~b_i[31],b_i[30:0]}) ? 33'b1 : 33'b0; else result_o = (a_i <= b_i) ? 33'b1 : 33'b0; `ALU_OP_SGT: if(signed_i) result_o = ({~a_i[31],a_i[30:0]} > {~b_i[31],b_i[30:0]}) ? 33'b1 : 33'b0; else result_o = (a_i > b_i) ? 33'b1 : 33'b0; `ALU_OP_SGE: if(signed_i) result_o = ({~a_i[31],a_i[30:0]} >= {~b_i[31],b_i[30:0]}) ? 33'b1 : 33'b0; else result_o = (a_i >= b_i) ? 33'b1 : 33'b0;
  13. Понятно. Значит, если я сделаю частоту опоры 26 МГц, я могу работать с ВТ кодом. Николай.
  14. Не могу понять какая частота TCXO в этом проекте? И частота среза указана 9 МГц. Нужно сделать GPS/ГЛОНАСС RF приемник, поэтому интересует этот проект. Николай.
  15. Промоделировал "queens". Результаты совпадают с "q.c". Указатели в "q2.c" изменяются на 1, в то время как у меня в процессоре байтовая адресация, т.е. указатели должны меняться на 4. Временно сдвинул адрес в процессоре на 2 разряда вправо и все заработало. 2 Leka: Что нужно (или можно) посмотреть по результатам моделирования? И еще, для чего в программе "q2.c" мы обращаемся к памяти через указатели? Почему нельзя обойтись только регистрами? Ошибок в процессоре больше пока не обнаружил. Николай.