1 / 21

실험 목표

실험 목표. 키패드로 0~9 중 두개의 숫자를 연속으로 입력받음 . 첫번째 입력을 10 의 자리 , 두번째 입력을 1 의 자리로 인식 , 두개의 7- 세그먼트에 십진수로 표시. 실험 조건. 0-9 까지의 한자리 수 표현은 십의 자리에 0 을 포함하여 표현한다 . 예 > 키패드로 09 를 입력하고 7- 세그먼트도 09 로 출력한다 . 현재 입력이 혼동되지 않게 첫번째 입력시 모든 7- 세그먼트를 OFF, 두번째 입력까지 모두 완료 되면 7- 세그먼트에 결과 표시.

taipa
Download Presentation

실험 목표

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 실험 목표 • 키패드로0~9중 두개의 숫자를 연속으로 입력받음. • 첫번째 입력을 10의 자리, 두번째 입력을 1의 자리로 인식, • 두개의7-세그먼트에 십진수로 표시. 실험 조건 • 0-9까지의 한자리 수 표현은 십의 자리에 0을 포함하여 표현한다. • 예> 키패드로09를 입력하고 7-세그먼트도 09로 출력한다. • 현재 입력이 혼동되지 않게 첫번째입력시 모든 7-세그먼트를 OFF, • 두번째 입력까지 모두 완료 되면 7-세그먼트에 결과 표시.

  2. 전체 회로 구성도 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  3. Counter1 - 1이 입력되는 동안 1, 2, 4 카운트 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  4. Counter1 - 1이 입력되는 동안 1, 2, 4 카운트 키패드는scan 입력이 1인 줄의 각 키 상태를 data값으로 출력. 즉, 키 입력 처리를 위해 매번 scan값에 001, 010, 100을 출력하여 해당 라인의 data값 상태 확인 필요. ← data module counter(x, clk, z); input x, clk; output [2:0] z; wire a, b; d_ffda(a, clk, z[2]), db(b, clk, z[1]); assign a = (z[2] & ~z[1] & ~x) | (~z[2] & z[1] & x); assign b = (~z[2] & z[1] & ~x) | (~z[2] & ~z[1] & x); assign z[0] = ~z[2] & ~z[1]; endmodule ↑ scan z[2] z[1] z[0] 추가로, 키 입력이 감지되었을 때, 해당 값을 처리하기 위해 scan값을 고정해줄 필요가 있음. 따라서 키패드에 입력이 발생(x=0)하면 카운트를 멈추는(scan값 고정) 카운터 회로 작성.

  5. Counter1 - 1이 입력되는 동안 1, 2, 4 카운트 0 0 Status Graph Transition Table S3 001 S1 010 S2 100 S0 001 1 1 0 1 1 A+ = AB’X’ + A’BX B+ = A’BX’ + A’B’X Z2 = A+ Z1 = B+ Z0 = Z2’ Z1’ S3 0

  6. Counter1 - 1이 입력되는 동안 1, 2, 4 카운트 Circuit Design z x clk

  7. Keypad – 키패드 입력에 따른 BCD코드 출력 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  8. Keypad – 키패드 입력에 따른 BCD코드 출력 scan conv key 키패드에서입력받은data값은 당시의 scan값에 대한 결과. 따라서 키의 확인을 위해서는 Counter1에서 출력한 scan값과 회로에 입력받은data값을 조합하여 결과 출력. 버튼에 따른 scan-data값은 좌측의 표와 같음. Keypad모듈은 scan-data값에 대한 키패드 값을 BCD코드로 변환하여 출력. data module keypad(scan, data, key); input [2:0] scan; input [3:0] data; output [3:0] key; wire [6:0] sd; function [3:0] conv; input [6:0] SD; case(SD) 7'b010_0001: conv = 4'b0000; // 0 7'b100_1000: conv = 4'b0001; // 1 7'b010_1000: conv = 4'b0010; // 2 7'b001_1000: conv = 4'b0011; // 3 7'b100_0100: conv = 4'b0100; // 4 7'b010_0100: conv = 4'b0101; // 5 7'b001_0100: conv = 4'b0110; // 6 7'b100_0010: conv = 4'b0111; // 7 7'b010_0010: conv = 4'b1000; // 8 7'b001_0010: conv = 4'b1001; // 9 7'b100_0001: conv = 4'b1010; // * 7'b001_0001: conv = 4'b1011; // # default: conv = 4'b0000; endcase endfunction assign sd[6:4] = scan; assign sd[3:0] = data; assign key = conv(sd); endmodule

  9. Counter2 – 10 입력시퀀스로 0~1 카운트 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  10. Counter2 – 10 입력시퀀스로 0~1 카운트 키패드 입력에 대한 BCD코드 값을 저장 할 메모리를 선택하기 위해, 0~1을 카운트(선택) 해줄 회로가 필요. ※ 카운트 조건 1. 버튼이 눌려짐 = 1 버튼이 눌려져있지 않음 = 0 2. 입력받는 행위 = 버튼이 눌렸다 떼어졌을 때 ☞ 10이 입력시퀀스로 들어왔을 때 module counter2(x, clk, cnt); input clk, x; output cnt; wire a_in, b_in, a, b; d_ffda(a_in, clk, a), db(b_in, clk, b); assign a_in = (a & x) | (a & ~b) | (~a & b & ~x); assign b_in = x; assign cnt = a; endmodule

  11. Counter2 – 10 입력시퀀스로 0~1 카운트 Status Graph Transition Table 0/0 1/0 S0 1/0 S1 0/0 0/1 A+ = AX + AB’ + A’BX’ B+ = X Z = A+ S3 S2 1/1 1/1 0/1

  12. Counter2 – 10 입력시퀀스로 0~1 카운트 Circuit Design z x clk

  13. Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  14. D D D D Q Q Q Q Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 CLK CLK CLK CLK 0 0 0 0 1 1 1 1 D 플립플롭에 의해 키패드에서입력받은 값을 저장하고, 저장 한 값을 출력. 키패드 입력이 없어도 회로는 작동하기 때문에 입력이 있을 때에만 해당 값을 저장하도록 구분해주기 위해 2-1 MUX 추가. ☞ 키패드 입력이 있을 때엔 키패드입력값, 키패드 입력이 없을 때엔 이전에 저장된 값을 플립플롭에 저장하고 출력한다. module keypad_memory(key_in, load, clk, key_out); input [3:0] key_in; input load, clk; output [3:0] key_out; wire [3:0] key; mux_2 setmux3(key_in[3], key_out[3], load, key[3]), setmux2(key_in[2], key_out[2], load, key[2]), setmux1(key_in[1], key_out[1], load, key[1]), setmux0(key_in[0], key_out[0], load, key[0]); d_ff mem3(key[3], clk, key_out[3]), mem2(key[2], clk, key_out[2]), mem1(key[1], clk, key_out[1]), mem0(key[0], clk, key_out[0]); endmodule

  15. D D D D Q Q Q Q Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 CLK CLK CLK CLK 0 0 0 0 1 1 1 1 Key_in[3] Key_in[2] Key_in[1] Key_in[0] Circuit Design load clk Key_out[3] Key_out[2] Key_out[1] Key_out[0]

  16. 7-Segment – BCD코드로 7-세그먼트 세팅 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  17. 7-Segment – BCD코드로 7-세그먼트 세팅 7-Segment 이전 실험에서 만들었던 7-세그먼트 회로의 출력값만 일부 변경 module sevensegment(a_in, seg); input [3:0] a_in; output [6:0] seg; function [6:0] func_seg; input [3:0] in; case(in) 4'h0: func_seg = 7'b011_1111; 4'h1: func_seg = 7'b000_0110; 4'h2: func_seg = 7'b101_1011; 4'h3: func_seg = 7'b100_1111; 4'h4: func_seg = 7'b110_0110; 4'h5: func_seg = 7'b110_1101; 4'h6: func_seg = 7'b111_1101; 4'h7: func_seg = 7'b000_0111; 4'h8: func_seg = 7'b111_1111; 4'h9: func_seg = 7'b110_1111; 4'ha: func_seg = 7'b111_0111; 4'hb: func_seg = 7'b111_1100; endcase endfunction assign seg = func_seg(a_in); endmodule

  18. 7-Segment MUX – 출력 할 7-세그먼트값 결정 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  19. 7-Segment MUX – 출력 할 7-세그먼트값 결정 두개의7-세그먼트 모듈에서 나온 세팅값 중 한 쪽의 값을 선택하기 위해 각 자리의 값마다 MUX 추가. seg mux_2 muxss0(seg0[0], seg1[0], clk, seg[0]), muxss1(seg0[1], seg1[1], clk, seg[1]), muxss2(seg0[2], seg1[2], clk, seg[2]), muxss3(seg0[3], seg1[3], clk, seg[3]), muxss4(seg0[4], seg1[4], clk, seg[4]), muxss5(seg0[5], seg1[5], clk, seg[5]), muxss6(seg0[6], seg1[6], clk, seg[6]); clk seg0 seg1

  20. com – COMBO-II에서 표시 할 7-세그먼트 결정 clk scan Counter 1 4 4 7 7 7 6 5 4 3 2 1 0 com com Keypad 3 2 1 0 data 7-Segment MUX 6 5 4 3 2 1 0 seg Counter 2 3 4 Keypad memory 7-Segment Keypad memory 7-Segment

  21. com – COMBO-II에서 표시 할 7-세그먼트 결정 • assign comctr = pressed | memctr; • mux_2 muxcom0(1'b1, comctr, clk, com[6]), • muxcom1(comctr, 1'b1, clk, com[7]); • assign com[5:0] = 6'b11_1111; 출력 조건인 “두번째 입력까지 모두 완료 되면 7-세그먼트에 결과 표시” ☞ 버튼이 눌려져있지 않고 첫번째 입력을 받을차례 = 0 ☞ ~(~pressed & ~memctr) = 0 ☞ pressed | memctr = 1 전체 회로 중 COM의 회로 clk com com data Counter 2 pressed memctr

More Related