Здравствуйте. Я только учусь работать с ПЛИС и для своих задач использую проекты, найденные в интернете. Сейчас я интересуюсь работой с датчиком температуры DS18B20 по видео с Youtube и хотел бы чтобы при превышении 30 градусов на выходе ПЛИС была постоянная 1.
В Quartus'е мой проект состоит из 4 блоков (3 из которых найдены в интернете и работают, как показывает симуляция, исправно: Делитель частоты, Reset и блок DS18B20 "OneWire_Master"). В 4-м блоке "Сomp", я бы хотел сравнить данные с датчика и при превышении 30град выставить 1 на выходе Q.
Из документации на датчик ds18b20 (cтр 5) температурные данные запоминаются как 16-битовое число, из которых первые 5 бит - знак температуры, последние 4 бита - дробное значение температуры.
Проблема в том что я не могу проверить свой датчик. Я задаю, чтобы на выходе Q была 1 для всех температур от 0 до 30 град, а для остальных значений 0 (код представлен ниже). В результате, при подаче питания на выходе Q появляется 1. Я меняю условие: для температур от 0 до 30 ставлю Q = 0, а для default : Q = 1. В результате, при подаче питания на выходе Q снова появляется 1. Не могли бы Вы сказать где я ошибаюсь?
module comp2(output reg [15:0] Q, input [15:0] Temp ,input Clk,RST, output J, output reg OUT);
always @ (posedge Clk)
begin
casex(Temp)
16'bxxxxx0000000xxxx : Q = 1; //0
16'bxxxxx0000001xxxx : Q = 1; //1
16'bxxxxx0000010xxxx : Q = 1; //2
16'bxxxxx0000011xxxx : Q = 1; //3
16'bxxxxx0000100xxxx : Q = 1; //4
16'bxxxxx0000101xxxx : Q = 1; //5
16'bxxxxx0000110xxxx : Q = 1; //6
16'bxxxxx0000111xxxx : Q = 1; //7
16'bxxxxx0001000xxxx : Q = 1; //8
16'bxxxxx0001001xxxx : Q = 1; //9
16'bxxxxx0001010xxxx : Q = 1; //10
16'bxxxxx0001011xxxx : Q = 1; //11
16'bxxxxx0001100xxxx : Q = 1; //12
16'bxxxxx0001101xxxx : Q = 1; //13
16'bxxxxx0001110xxxx : Q = 1; //14
16'bxxxxx0001111xxxx : Q = 1; //15
16'bxxxxx0010000xxxx : Q = 1; //16
16'bxxxxx0010001xxxx : Q = 1; //17
16'bxxxxx0010010xxxx : Q = 1; //18
16'bxxxxx0010011xxxx : Q = 1; //19
16'bxxxxx0010100xxxx : Q = 1; //20
16'bxxxxx0010101xxxx : Q = 1; //21
16'bxxxxx0010110xxxx : Q = 1; //22
16'bxxxxx0010111xxxx : Q = 1; //23
16'bxxxxx0011000xxxx : Q = 1; //24
16'bxxxxx0011001xxxx : Q = 1; //25
16'bxxxxx0011010xxxx : Q = 1; //26
16'bxxxxx0011011xxxx : Q = 1; //27
16'bxxxxx0011100xxxx : Q = 1; //28
16'bxxxxx0011101xxxx : Q = 1; //29
16'bxxxxx0011110xxxx : Q = 1; //30
default : Q = 0;
endcase
end
assign J = Q[0];
always @ (posedge Clk) //JK-trigger
begin
case({J, RST})
2'b00 : OUT <= OUT;
2'b01 : OUT <= 0;
2'b10 : OUT <= 1'd1;
2'b11 : OUT <= !OUT;
endcase
end
endmodule
На работе снял осциллограммы с выходов D и Reset.
Quartus проект