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

jokolemene

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

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

  • Посещение

Сообщения, опубликованные jokolemene


  1. Так там действительно защелка образуется. Чтобы ее не было, нужно перед "for" присвоить num_bit_reg значение по умолчанию, например 0.

     

    Кстати, ваш код будет считать номер бита с конца. Чтобы считал сначала, нужно после "num_bit_reg = i" поставить "break".

    Да, регистр был не инициализирован. Инициализировал. Всё равно варнинг рисуется. Посмотрел сгенерённую схему: куча комбинаторики и в самом конце стоят защёлки - в них используются входы ACLR и PRESET.

     

    А насчёт порядка счёта: без разницы откуда считать. Единичный бит в регистре только в одном экземпляре.

     

    PS: Добавил в цикл break - перестало компилироваться. Выдаёт ошибку: can't resolve reference to object "break".

  2. На порту result_o нужно получить порядковый номер бита регистра result_reg, установленного в единицу. Например, если регистр result_reg имеет размер 8192 бита, и в нём установлен бит номер 4015, то на порту result_o нужно получить число 4015.

     

  3. Всем привет!

     

    Тема такая: создаю схему на верилоге. В ней есть регистр переменного размера. Размер его задаётся через parameter, а затем выполняется перекомпиляция схемы. В результате работы схемы в регистре только один бит устанавливается в 1, остальные остаются в нуле. Вопрос: как комбинаторикой узнать номер этого установленного бита?

     

    Вот, например, как это было бы мной реализовано, если бы регистр был постоянного размера, скажем, восьмибитовым:

    reg [7:0] result_reg;
    
    assign result_o = result_reg[7] ? 7 :
                      result_reg[6] ? 6 :
                      result_reg[5] ? 5 :
                      result_reg[4] ? 4 :
                      result_reg[3] ? 3 :
                      result_reg[2] ? 2 :
                      result_reg[1] ? 1 :
                      0;

    А как это сделать если регистр переменного размера?

    Пытаюсь сделать нечто в этом роде:

    parameter XX = 8;        // Количество бит в регистре результата
    parameter NB = log2(XX); // Логарифм по основанию 2 от XX (вычисляется функцией log2)
    
    reg [XX-1:0] result_reg;  // Регистр с результатом работы схемы
    reg [NB-1:0] num_bit_reg; // Номер установленного бита в регистре result_reg
    
    assign result_o = num_bit_reg; // result_o - output-порт модуля
    
    always @( result_reg )
    begin
    
      integer i;
    
      for( i=0; i < XX; i=i+1 )
        if( result_reg[i] )
          num_bit_reg = i;
    
    end

    Компилируется и вроде даже работает как надо, но при компиляции выдаётся warning: inferring latch(es) for variable "num_bit_reg", which holds its previous value in one or more paths through the always construct.

    Как сделать так, чтобы этого варнинга не было? Очень уж мне такие варнинги не нравятся. Да и как схема синтезируется в случае подобных конструкций - не совсем понятно. А я люблю, когда всё понятно и прозрачно.

     

  4. Могу. Вот две картинки.

    PS: заметил особенность - если к этим виртуальным ножкам прицепить "неоптимизированные" сигналы - всё нормально синтезируется без выдачи подобной ошибки.

    post-55950-1409133059_thumb.png

    post-55950-1409133072_thumb.png

  5. Всем привет!

     

    Может вопрос детский, но что-то внезапно заступорил меня.

    Тема такая: нужно проверить работу синхронизатора между двумя модулями. Для этого нужно поподавать на один модуль такты, сдвинутые на разную величину времени относительно тактов другого модуля.

     

    Вот, например, пытаюсь сдвинуть такты 2 относительно тактов 1 на 6 наносекунд:

     

    reg clk1;
    reg clk2;
    
    always
      #10 clk1 = ~clk1;
    
    always
      #10 clk2 = ~clk2;
    
    initial
    begin
      #0 clk1 = 0;
      #0 clk2 = 0;
      #6 clk2 = 1;
    end

     

    Получается неправильно - результат на картинке. Как надо написать, чтобы было правильно?

    post-55950-1405496367_thumb.png

  6. Всем привет!

     

    Есть плата на которую не впаяны некоторые микросхемы. С одной из микросхем (последовательный интерфейс Intel 82510) дорожки RX и TX идут на одну из таких невпаянных микросхем. Скорее всего это должен быть преобразователь уровней TTL-RS. Есть необходимость определить тип этой микросхемы. Хотя-бы для начала может кто-нибудь подскажет - что это за тип корпуса? Фото прилагается. Интересует микросхема U76.

    post-55950-1392889773_thumb.jpg

  7. С неделю назад мне так уже рекомендовали делать. Я проверил - результат был аналогичный (правда, при проверке команда CGREG дала ответ 2, а не 0):

    [00:00:12] {GSM } Проверяем регистрацию в сети
    [00:00:12] {GSM }  COMM: AT+CREG?
    [00:00:12] {GSM }  ANSW: +CREG: 0,1
    [00:00:12] {GSM }  ANSW: OK
    [00:00:12] {GSM } Есть регистрация в сети
    [00:00:12] {GSM } Измеряем уровень сигнала
    [00:00:12] {GSM }  COMM: AT+CSQ
    [00:00:12] {GSM }  ANSW: +CSQ: 18,0
    [00:00:12] {GSM }  ANSW: OK
    [00:00:12] {GSM } Уровень сигнала = -77 dBm
    [00:00:12] {TCP } Проверяем состояние канала
    [00:00:12] {GSM }  COMM: AT+QISTAT
    [00:00:12] {GSM }  ANSW: OK
    [00:00:12] {GSM }  ANSW: STATE: IP INITIAL
    [00:00:12] {TCP } Проверяем состояние сети
    [00:00:12] {GSM }  COMM: AT+CGREG?
    [00:00:12] {GSM }  ANSW: +CGREG: 0,2
    [00:00:12] {GSM }  ANSW: OK
    [00:00:12] {TCP } Нет регистрации в сети
    [00:00:12] {TCP } Подключаем GPRS-сервис
    [00:00:12] {GSM }  COMM: AT+CGATT=1
    [00:00:12] {GSM }  ANSW: +CME ERROR: unknown
    [00:00:12] {TCP } ERROR: нет ответа 'OK'

    Возможно, что если бы команда CGREG ответила 0, а не 2, то модуль на команду CGATT ответил бы ОК. Но во время тестирования команда CGREG ни разу не ответила 0. Только 2 или 1.

  8. Я же говорю, что через пять секунд после "unknown" дивайс даёт эту команду повторно, получает "ОК" и дальше работает нормально. APN задаётся чуть позже - перед выполнением команды "AT+QIACT". Опять-же, точно такой-же дивайс, но с модулем SIM340DZ, аттачится к GPRS-сервису с пол-пинка, работая по точно такому-же алгоритму. Тем не менее, сделал для проверки установку APN заранее. Вот лог результата:

     

    [00:00:00] {MAIN} ADC(0)=715; Vbat=4.19В
    [00:00:00] {GSM } Включаем GSM-модуль
    [00:00:03] {GSM }  ANSW: RDY
    [00:00:03] {GSM }  COMM: AT+IPR?
    [00:00:03] {GSM }  ANSW: AT+IPR?
    [00:00:03] {GSM }  ANSW: +IPR: 38400
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+IFC?
    [00:00:03] {GSM }  ANSW: AT+IFC?
    [00:00:03] {GSM }  ANSW: +IFC: 0,0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATZ
    [00:00:03] {GSM }  ANSW: ATZ
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATE0
    [00:00:03] {GSM }  ANSW: ATE0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATX4
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+CMEE=2
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+CREG=0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+QIURC=0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты
    [00:00:09] {GSM }  COMM: AT+CPIN?
    [00:00:09] {GSM }  ANSW: +CPIN: SIM PIN
    [00:00:09] {GSM }  ANSW: OK
    [00:00:09] {GSM } Включена защита PIN-кодом
    [00:00:09] {GSM } Считываем ID SIM-карты
    [00:00:09] {GSM }  COMM: AT+QCCID
    [00:00:09] {GSM }  ANSW: 89997776112013633181
    [00:00:09] {GSM }  ANSW: OK
    [00:00:09] {GSM } Считываем количество оставшихся попыток набора PIN-кода
    [00:00:09] {GSM }  COMM: AT+QTRPIN
    [00:00:09] {GSM }  ANSW: +QTRPIN: 3,3,10,10
    [00:00:09] {GSM }  ANSW: OK
    [00:00:09] {GSM } Пытаемся разлочить карточку
    [00:00:09] {GSM }  COMM: AT+CPIN=2586
    [00:00:09] {GSM }  ANSW: +CPIN: READY
    [00:00:09] {GSM }  ANSW: OK
    [00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты
    [00:00:09] {GSM }  COMM: AT+CPIN?
    [00:00:09] {GSM }  ANSW: +CPIN: READY
    [00:00:09] {GSM }  ANSW: OK
    [00:00:09] {GSM } SIM-карточка открыта
    [00:00:10] {GSM } Проверяем регистрацию в сети
    [00:00:10] {GSM }  COMM: AT+CREG?
    [00:00:10] {GSM }  ANSW: +CREG: 0,2
    [00:00:10] {GSM }  ANSW: OK
    [00:00:10] {GSM } Поиск сети
    [00:00:10] {GSM } Измеряем уровень сигнала
    [00:00:10] {GSM }  COMM: AT+CSQ
    [00:00:10] {GSM }  ANSW: +CSQ: 99,99
    [00:00:10] {GSM }  ANSW: OK
    [00:00:10] {GSM } Уровень сигнала = -113 dBm
    [00:00:10] {MAIN} ADC(0)=714; Vbat=4.18В
    [00:00:15] {GSM } Проверяем регистрацию в сети
    [00:00:15] {GSM }  COMM: AT+CREG?
    [00:00:15] {GSM }  ANSW: +CREG: 0,1
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM } Есть регистрация в сети
    [00:00:15] {GSM } Измеряем уровень сигнала
    [00:00:15] {GSM }  COMM: AT+CSQ
    [00:00:15] {GSM }  ANSW: +CSQ: 20,0
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM } Уровень сигнала = -73 dBm
    [00:00:15] {TCP } Проверяем состояние канала
    [00:00:15] {GSM }  COMM: AT+QISTAT
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM }  ANSW: STATE: IP INITIAL
    [00:00:15] {TCP } Устанавливаем имя точки доступа, логин и пароль
    [00:00:15] {GSM } Считываем номер оператора из GSM-модуля
    [00:00:15] {GSM }  COMM: AT+COPS=0,2
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM }  COMM: AT+COPS?
    [00:00:15] {GSM }  ANSW: +COPS: 0,2,"40177"
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM }  COMM: AT+CGDCONT=1,"IP","internet"
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM }  COMM: AT+QIREGAPP="internet","",""
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {TCP } Подключаем GPRS-сервис
    [00:00:15] {GSM }  COMM: AT+CGATT=1
    [00:00:15] {GSM }  ANSW: +CME ERROR: unknown
    [00:00:15] {TCP } ERROR: нет ответа 'OK'

     

    Дополнение:

    Проблема решилась так: не давать команду "AT+CGATT" совсем. Никогда. Такой "workaround" пока-что работает. Буду наблюдать. Но в любом случае "unknown" - это баг. Негоже модулю выдавать такие сообщения об ошибках на вполне легальные команды.

  9. Всем здравствуйте!

     

    Продолжаю писать программу для дивайса, в котором установлен M10 (Revision: M10BR06). При попытке аттача к GPRS-сервису (сразу после инициализации модуля) командой "AT+CGATT=1" появляется сообщение об ошибке "+CME ERROR: unknown". В большинстве случаев после выполнения пятисекундной задержки и повторной передачи команды "AT+CGATT=1" GPRS-сервис поднимается нормально, но один раз эта ошибка появлялась в течение нескольких минут. При этом в то-же самое время другой дивайс с модулем SIM340DZ и карточкой того-же самого провайдера поднял GPRS и соединился с сервером "на ура". Проблема не связана с каким-то конкретным оператором - проверялось на разных операторах с разными карточками (VegaLine и Tele2). Вот кусок лога работы дивайса:

     

    [00:00:00] {MAIN} ADC(0)=712; Vbat=4.17В
    [00:00:00] {GSM } Включаем GSM-модуль
    [00:00:02] {GSM }  ANSW: RDY
    [00:00:02] {GSM }  COMM: AT+IPR?
    [00:00:02] {GSM }  ANSW: +CFUN: 1
    [00:00:02] {GSM }  ANSW: +CPIN: SIM PIN
    [00:00:02] {GSM }  ANSW: AT+IPR?
    [00:00:02] {GSM }  ANSW: +IPR: 38400
    [00:00:02] {GSM }  ANSW: OK
    [00:00:02] {GSM }  COMM: AT+IFC?
    [00:00:03] {GSM }  ANSW: AT+IFC?
    [00:00:03] {GSM }  ANSW: +IFC: 0,0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATZ
    [00:00:03] {GSM }  ANSW: ATZ
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATE0
    [00:00:03] {GSM }  ANSW: ATE0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: ATX4
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+CMEE=2
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+CREG=0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM }  COMM: AT+QIURC=0
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты
    [00:00:03] {GSM }  COMM: AT+CPIN?
    [00:00:03] {GSM }  ANSW: +CPIN: SIM PIN
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } Включена защита PIN-кодом
    [00:00:03] {GSM } Считываем ID SIM-карты
    [00:00:03] {GSM }  COMM: AT+QCCID
    [00:00:03] {GSM }  ANSW: 89997776112013633181
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } Считываем количество оставшихся попыток набора PIN-кода
    [00:00:03] {GSM }  COMM: AT+QTRPIN
    [00:00:03] {GSM }  ANSW: +QTRPIN: 3,3,10,10
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } Пытаемся разлочить карточку
    [00:00:03] {GSM }  COMM: AT+CPIN=2586
    [00:00:03] {GSM }  ANSW: +CPIN: READY
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты
    [00:00:03] {GSM }  COMM: AT+CPIN?
    [00:00:03] {GSM }  ANSW: +CPIN: READY
    [00:00:03] {GSM }  ANSW: OK
    [00:00:03] {GSM } SIM-карточка открыта
    [00:00:03] {GSM } Проверяем регистрацию в сети
    [00:00:03] {GSM }  COMM: AT+CREG?
    [00:00:04] {GSM }  ANSW: +CREG: 0,2
    [00:00:04] {GSM }  ANSW: OK
    [00:00:04] {GSM } Поиск сети
    [00:00:04] {GSM } Измеряем уровень сигнала
    [00:00:04] {GSM }  COMM: AT+CSQ
    [00:00:04] {GSM }  ANSW: +CSQ: 99,99
    [00:00:04] {GSM }  ANSW: OK
    [00:00:04] {GSM } Уровень сигнала = -113 dBm
    [00:00:08] {GSM } Проверяем регистрацию в сети
    [00:00:08] {GSM }  COMM: AT+CREG?
    [00:00:08] {GSM }  ANSW: +CREG: 0,2
    [00:00:08] {GSM }  ANSW: OK
    [00:00:08] {GSM } Поиск сети
    [00:00:08] {GSM } Измеряем уровень сигнала
    [00:00:08] {GSM }  COMM: AT+CSQ
    [00:00:08] {GSM }  ANSW: +CSQ: 23,0
    [00:00:08] {GSM }  ANSW: OK
    [00:00:08] {GSM } Уровень сигнала = -67 dBm
    [00:00:10] {MAIN} ADC(0)=687; Vbat=4.03В
    [00:00:13] {GSM } Проверяем регистрацию в сети
    [00:00:13] {GSM }  COMM: AT+CREG?
    [00:00:13] {GSM }  ANSW: +CREG: 0,1
    [00:00:13] {GSM }  ANSW: OK
    [00:00:13] {GSM } Есть регистрация в сети
    [00:00:13] {GSM } Измеряем уровень сигнала
    [00:00:13] {GSM }  COMM: AT+CSQ
    [00:00:13] {GSM }  ANSW: +CSQ: 23,0
    [00:00:13] {GSM }  ANSW: OK
    [00:00:13] {GSM } Уровень сигнала = -67 dBm
    [00:00:13] {TCP } Проверяем состояние канала
    [00:00:13] {GSM }  COMM: AT+QISTAT
    [00:00:13] {GSM }  ANSW: OK
    [00:00:13] {GSM }  ANSW: STATE: IP INITIAL
    [00:00:13] {TCP } Подключаем GPRS-сервис
    [00:00:13] {GSM }  COMM: AT+CGATT=1
    [00:00:13] {GSM }  ANSW: +CME ERROR: unknown
    [00:00:13] {TCP } ERROR: нет ответа 'OK'
    [00:00:15] {TCP } Проверяем состояние канала
    [00:00:15] {GSM }  COMM: AT+QISTAT
    [00:00:15] {GSM }  ANSW: OK
    [00:00:15] {GSM }  ANSW: STATE: IP INITIAL
    [00:00:15] {TCP } GPRS-канал закрыт
    [00:00:15] {TCP } ERROR: неудачная попытка открыть GPRS-канал

     

    Вопрос: что это за ошибка - "unknown"? И как от неё избавиться?

  10. ОК. Спасибо. Тогда второй вопрос - и где же её взять, эту бета-прошивку? А также средства для заливки её в модуль? Ни на сайте quectel.com, ни на сайте quectel.ru найти прошивку не могу... Гугль тоже что-то не помогает...

  11. Всем здравствуйте!

     

    Пишу сейчас программу для дивайса, в котором установлен M10 (Revision: M10BR06A06N32). Возникла серьёзная проблема со стартовой идентификацией SIM-карты. Раньше в дивайсах стояли другие модули (Siemens MC55, SIM300, SIM340) и везде можно было запросить 20-значный ID SIM-карты до набора PIN-кода. Таким образом можно было определить - сменили ли SIM-карту в дивайсе и не пытаться разлочить её PIN-кодом, хранящимся в памяти дивайса, в случае смены SIM-карты. Модуль M10 же на запрос ID SIM-карты отвечает:

    at+qccid
    +CME ERROR: SIM PIN required

    Возникает вопрос - как идентифицировать SIM-карту до ввода PIN-кода?

  12. Всем привет!

     

    Проблема в следующем: отправляю с помощью модуля SIM300 SMS на свой сотовый Nokia 6230i. SMS приходит, но прочитать его не могу - вместо текста SMS отображается текст "Сообщение показать нельзя".

     

    Делаю так:

    at+cmgf=1
    at+cmgs="номер"
    > текст сообщения <Ctrl+Z>

    Пробовал писать только латинские буквы (без русских) - результат такой-же.

    Пробовал менять кодировки командой at+cscs - не помогает.

     

    Кто сталкивался с этим - подскажите, пожалуйста, куда копать?

     

  13. WinAVR у меня установлен. Ещё до написания основной программы на C я хотел им пользоваться, но потом на IAR C перешёл. Но что-то в опциях ассемблера студии я не вижу возможности выбрать для компиляции ассемблер WinAVR. Как его к студии прикрутить?

  14. Никак.

    Я этот вопрос задавал в техподдержку атмела, мне посоветовали писать и отлаживать на Си (типа там watch нормальный).

    Вот порнушники. На дворе 21-й век, а они всё не могут такой элементарной вещи сделать.

    Выход - только memory window и наблюдать побайтно

    Сейчас так и делаю.

    Если используется ассемблер из WinAVR, а не студийный...

    Использую AVR Assembler Version 2 - понравился тем, что в нём комментарии можно по сишному типу оформлять (/* */).

    Кароче я переменные просто в ком порт засовывал и не стал со всем этим разбираться )) Может быть и вам так поступить тоже

    Я отлаживаю бутлоадер - ограничен местом, поэтому такой вариант отладки напрягает. Кроме того специально под этот проект был приобретён JTAGICE MkII (нифига не задёшево). Имея такой дебаггер, выводить отладочную информацию в COM-порт - это несерьёзно.

  15. Отлаживаю сейчас программу, написанную на AVR ассемблере. В ней есть несколько переменных, объявленных подобным образом:

    xmodemLength: .byte  2
    crc32:        .byte  4

    Переменная xmodemLength - это short int, а переменная crc32 - это long. Но при отладке в окне Watch эти переменные отображаются, как char - показывается только их младший байт. Подскажите, пожалуйста, что нужно сделать, чтобы эти переменные отображались полностью - как short и long?

  16. Да, насчёт sbi я уже разобрался, help почитал. Так что спасибо за подсказку. Просто ни разу не писал на ассемблере для atmega. Раньше работал всё больше с пиками. Поэтому тут был несколько удивлён такими ограниченными командами, которые могут работать или только с частью регистров или с частью портов ввода/вывода или с малыми константами. Такие странные ограничения несколько напрягли.

     

    И спасибо за подсказку насчёт IAR ассемблера. Правда сейчас я на него уже вряд-ли буду переходить, потому что бутлоадер уже в стадии отладки.

  17. Написал программу для ATmega64 на Си. Использовал IAR C. Всё нормально, всё работает. Теперь встала задача написать бутлоадер, чтобы грузить прошивку в проц удалённо. Решил писать на ассемблере. Выяснилось, что ассемблер IAR-а балдеет от русских комментариев - то повиснет, то какие-то другие глюки начинают происходить. Пришлось с IAR перейти на AVR Studio 4 и AVR Assembler. Теперь другая проблема - компилятор ругается на совершенно легальные команды типа "sbi tifr,icf1", что мол "Operand 1 out of range: 0x36". По доке на процессор видно, что адрес 0x36 попадает в область I/O этого проца и с включенным режимом совместимости с ATmega103 и с выключенным. Что за тема, не въеду? Как это победить?

  18. Здравствуйте!

     

    В настоящее время я пишу программу для некоего китайского дивайса GT30, в котором установлен модуль SIM340DZ. По крайней мере так написано на его наклейке. Но когда я считал ревизию из него, то она оказалась 1008B13SIM300D32_SST34HF3284. Насколько я понял из массы топиков на вашем форуме - это страшно глючная версия. Не совсем понятно, как она оказалась в модуле SIM340DZ, но это - факт. Хотелось бы в таком случае понять - на какую версию прошивки мне лучше проапгрейдиться и где её можно взять?

×
×
  • Создать...