RS-232 transmitter module
여기에 우리가 만들려는 놈이 있다.
이놈은 다음과 같이 작동을 한다.
- 트랜스미터는 8비트 데이터를 가지며, 그것을 직렬화한다.(TxD_start신호가 오면 시작한다)
- 전송중에는 busy 신호를 발생하며, TxD_start 신호는 무시된다.
Seializing the data
우리는 이제껏 BaudTick 신호를 115200 으로 가정을 해왔다.
우리는 스타트비트와 데이터인 8비트, 스톱비트를 만들어 낼 필요가 있다.
fpga4fun.com 의 FPGA interface projects 섹션에 serial interface 부분이 있다. 그 RS-232 부분의 번역본이다.
이문서의 원본은 http://www.fpga4fun.com/SerialInterface3.html 에서 찾을수 있다. from 후니유.
공부를 위한 목적으로 번역을 하였기때문에 오역,맘대로의역이 있어도 내맘이다 ㅋㅋ
reg[3:0] state;
always @(posedge clk)
case(state)
4'b0000: if(TxD_start) state <= 4'b0100;
4'b0100: if(BaudTick) state <= 4'b1000; //start
4'b0100: if(BaudTick) state <= 4'b1001; //bit 0
4'b1000: if(BaudTick) state <= 4'b1010; //bit 1
4'b1001: if(BaudTick) state <= 4'b1011; //bit 2
4'b1010: if(BaudTick) state <= 4'b1100; //bit 3
4'b1011: if(BaudTick) state <= 4'b1101; //bit 4
4'b1100: if(BaudTick) state <= 4'b1110; //bit 5
4'b1101: if(BaudTick) state <= 4'b1111; //bit 6
4'b1110: if(BaudTick) state <= 4'b0001; //bit 7
4'b1111: if(BaudTick) state <= 4'b0010; //stop1
4'b0001: if(BaudTick) state <= 4'b0000; //stop2
default: if(BaudTick) state <= 4'b000;
endcase
state machine 이 TxD_start 신호가 뜰때 시작하는 것을 확인하자.
reg muxbit;
always @(state[2:0])
case(state[2:0])
0: muxbit <= TxD_data[0];
1: muxbit <= TxD_data[1];
2: muxbit <= TxD_data[2];
3: muxbit <= TxD_data[3];
4: muxbit <= TxD_data[4];
5: muxbit <= TxD_data[5];
6: muxbit <= TxD_data[6];
7: muxbit <= TxD_data[7];
endcase
assign TxD = (state<4) | (state[3] & muxbit);
다음은 RS-232 리시버 모듈로 넘어간다. 여기를 눌러~~