Современная электроника №9/2019

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 56 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2019 Далее в вычислителе производится преобразование полученных в прямом коде значений T A ITOG или T O ITOG из дво- ичного в двоично-десятичное пред- ставление с помощью содержащей- ся в модуле binar_BCD_XXXX.v язы- ковой конструкции, представленной в листинге 3. Эта полностью комбинационная схема преобразования демонстриру- ет решение задачи «в лоб», при кото- ром осуществление деления и полу- чение остатка от деления возлагает- ся на компилятор среды разработки и происходит прозрачно для разра- ботчика. Недостаток такого подхо- да – повышенный расход ресурсов ПЛИС. Затем в вычислителе производятся преобразование полученного набора байтовых двоично-десятичных значе- ний тысяч, сотен, десятков и единиц °C в ASCII-код, которое заключается в при- бавлении к каждому байту десятично- го числа 48, добавление в нужное место десятичной запятой и отправка полу- ченного набора байт на индикацию в ЖКИ и канал передачи UART. Подготовка ASCII-данных для ЖКИ выполняется с помощью языковой кон- струкции, представленной в листинге 4. В этой конструкции анализирует- ся результат сравнения значения CRC, поступившего из датчика, и значения CRC, вычисленного в ПЛИС с помощью собственного генератора. Модуль гене- ратора CRC для пятибайтового блока входных данных на языке Verilog HDL, содержащийся вфайле CRC8_D40.v, соз- давался не автором статьи, а с помощью online-генератора кода HDL, доступно- го в интернете по ссылке [2]. Внешний вид интернет-страницы этого online- генератора с введённымипараметрами описываемого датчика (полином, размер блока данных в битах) показанна рисун- ке 9. При нажатии кнопки Download на этой странице автоматически создаётся ипредлагается к загрузкефайл, содержа- щий код генератора CRCна языке Verilog HDL с заданными параметрами. Помимо собственно вычислений зна- чения температуры, заданного пользова- телемпорога сравнения, и их передачи в контроллерЖКИ, в вычислителе про- изводится сравнение текущего вычис- ленного значения температуры с этим порогом. При превышении порога одно- разрядная переменная Porog_Temper в вычислителе принимает значение 1, в противном случае – значение 0. Кроме того, при превышении порога байтовая переменная Porog_Temper_UART прини- мает значение R, в противном случае – значение S. Значение переменнойPorog_ Temper используется в дальнейшем в качестве строба для генерации преры- вистого звукового сигнала высокого тона, сигнализирующего о превыше- нии порога, а также (после инверсии)– в качестве сигнала управления светоди- одом сигнализации превышения поро- га. Значение переменной Porog_Temper_ UART выводится наЖКИ, а также переда- ётся через UART во внешнее устройство в составе информационной посылки. Для сравнения с порогомв вычислите- ле используется умноженное на 10 значе- Листинг 3 // преобразование из двоичного в десятичный вид always @(*) begin Temp0_data <= binar / 1000; Temp1_data <= binar % 1000; Temp2_data <= Temp1_data / 100; Temp3_data <= Temp1_data % 100; Temp4_data <= Temp3_data / 10; Temp5_data <= Temp3_data % 10; end assign BCD_TIS_ = Temp0_data; assign BCD_SOT_ = Temp2_data; assign BCD_DES_ = Temp4_data; assign BCD_EDI_ = Temp5_data; Листинг 4 // Направление данных значения температуры на индикацию в ЖКИ // Если установлен флаг ошибки CRC (CRC8_ERROR), // то вместо цифрового значения данных отображаются // символы ERROR_CRC8 (прочерки) always@(posedge clk_pll) begin if (CRC8_ERROR) begin REG_LCD_STR1_POZ1 <= ERROR_CRC8; REG_LCD_STR1_POZ2 <= ERROR_CRC8; REG_LCD_STR1_POZ3 <= ERROR_CRC8; REG_LCD_STR1_POZ4 <= ","; REG_LCD_STR1_POZ5 <= ERROR_CRC8; end else begin REG_LCD_STR1_POZ1 <= Temper_tis + 48; REG_LCD_STR1_POZ2 <= Temper_sot + 48; REG_LCD_STR1_POZ3 <= Temper_des + 48; REG_LCD_STR1_POZ4 <= ","; REG_LCD_STR1_POZ5 <= Temper_edi + 48; end REG_LCD_STR1_POZ6 <= GRAD_C; REG_LCD_STR1_POZ7 <= "C"; end Рис. 9. Интернет-страница online-генератора CRC

RkJQdWJsaXNoZXIy MTQ4NjUy