Page 1109 - 3-2
P. 1109
if(rx_clk_cnt >= baud_rate)
// 컴퓨터의 통신속도로 시스템클럭 분주
begin
rx_clk_cnt <= 0;
if(rx_bit_cnt >= 8) rx_bit_cnt <= 0;
// 수신데이터 bit count
else rx_bit_cnt <= rx_bit_cnt +1'b1;
end
else rx_clk_cnt <= rx_clk_cnt + 1'b1;
if ( rx_bit_cnt < 8 && rx_clk_cnt == baud_rate) // receive data
begin
rx_data_buffer[rx_bit_cnt] <= rxd;
state_rx <= 1;
end
else if (rx_bit_cnt == 8&& rx_clk_cnt == baud_rate && rxd == 1)
// stop receiving
begin
state_rx <= 0;
rx_data <= rx_data_buffer; // data 출력
end
// if stop bit is not received, clear the received data
else if (rx_bit_cnt == 8 && rx_clk_cnt == baud_rate && rxd != 1)
begin
state_rx <= 0;
rx_data_buffer <= 8'b00000000; // invalidate
end
end
end
endmodule
******************************** 스마트홈 부분 Verilog HDL 코드 *******************************
module relay_test(clk,rst,rxd,relay1,relay2,relay3,relay4,rx_data);
/*
스마트 홈 부분 통합 모듈
*/
input clk,rst,rxd;
output reg relay1,relay2,relay3;
output reg [1:0]relay4;
output [7:0] rx_data;
uart_rx1 u0(clk,rst,rxd,rx_data);
always @(posedge clk, negedge rst) //BlueTooth 를 통해 수신한 값에 따라 집 제어
begin
if(!rst) {relay1,relay2,relay3,relay4}<=0;
else
begin
case(rx_data)
"c" : relay1<=1; //fan on
"d": relay1<=0; //fan off
"e" : relay2<=1; // 침실 on
"f" : relay2<=0; // 침실 off
"g" : relay3<=1; // 화장실 on
"h" : relay3<=0; // 화장실 off
"i" : relay4<=2'b01; // 커튼 on
"j" : relay4<=2'b11; // 커튼 off
default : {relay1,relay2,relay3,relay4}<=0;
endcase
end
end
endmodule
- 1109 -