clk scan Counter 1 3 data 3 2

  • Slides: 21
Download presentation

전체 회로 구성도 clk scan Counter 1 3 data 3 2 1 0 Keypad

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

Counter 1 - 1이 입력되는 동안 1, 2, 4 카운트 clk scan Counter 1

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

Counter 1 - 1이 입력되는 동안 1, 2, 4 카운트 Status Graph 0 Transition

Counter 1 - 1이 입력되는 동안 1, 2, 4 카운트 Status Graph 0 Transition Table 0 S 0 001 0 1 S 3 001 1 AB A+B+ X=0 1 Z 2 Z 1 Z 0 S 1 010 S 0 00 00 01 001 S 1 01 01 10 010 S 2 10 10 00 1 S 3 11 00 00 001 1 S 2 100 0 A+ = AB’X’ + A’BX B+ = A’BX’ + A’B’X Z 2 = A + Z 1 = B + Z 0 = Z 2’ Z 1’

Counter 1 - 1이 입력되는 동안 1, 2, 4 카운트 Circuit Design z x

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

Keypad – 키패드 입력에 따른 BCD코드 출력 clk scan Counter 1 3 data 3

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

Keypad – 키패드 입력에 따른 BCD코드 출력 scan data conv key module keypad(scan, data,

Keypad – 키패드 입력에 따른 BCD코드 출력 scan data conv key 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'b 010_0001: 7'b 100_1000: 7'b 010_1000: 7'b 001_1000: 7'b 100_0100: 7'b 010_0100: 7'b 001_0100: 7'b 100_0010: 7'b 010_0010: 7'b 001_0010: 7'b 100_0001: 7'b 001_0001: default: conv endcase endfunction conv = 4'b 0000; conv = 4'b 0001; conv = 4'b 0010; conv = 4'b 0011; conv = 4'b 0100; conv = 4'b 0101; conv = 4'b 0110; conv = 4'b 0111; conv = 4'b 1000; conv = 4'b 1001; conv = 4'b 1010; conv = 4'b 1011; = 4'b 0000; assign sd[6: 4] = scan; assign sd[3: 0] = data; assign key = conv(sd); endmodule // // // 0 1 2 3 4 5 6 7 8 9 * # 버튼 scan data 1 1000 2 010 1000 3 001 1000 4 100 0100 5 0100 6 001 0100 7 100 0010 8 010 0010 9 0010 * 100 0001 0 010 0001 # 001 0001 키패드에서 입력받은 data값은 당 시의 scan값에 대한 결과. 따라서 키의 확인을 위해서는 Counter 1에서 출력한 scan값과 회 로에 입력받은 data값을 조합하여 결과 출력. 버튼에 따른 scan-data값은 좌측의 표와 같음. Keypad모듈은 scan-data값에 대한 키패드 값을 BCD코드로 변환하여 출력.

Counter 2 – 10 입력시퀀스로 0~1 카운트 clk scan Counter 1 3 data 3

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

Counter 2 – 10 입력시퀀스로 0~1 카운트 0/0 Status Graph S 0 1/0 0/0

Counter 2 – 10 입력시퀀스로 0~1 카운트 0/0 Status Graph S 0 1/0 0/0 S 3 1/1 1/0 S 1 0/1 1/1 Transition Table AB A+B+ 0 1 0 S 0 00 00 01 0 0 S 1 01 10 01 1 0 S 2 10 10 11 1 1 S 3 11 00 11 0 1 Z 1 A+ = AX + AB’ + A’BX’ B+ = X Z = A+ S 2 0/1

Counter 2 – 10 입력시퀀스로 0~1 카운트 Circuit Design x clk z

Counter 2 – 10 입력시퀀스로 0~1 카운트 Circuit Design x clk z

Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 clk scan Counter 1 3

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

Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 0 1 0 1 D

Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 0 1 0 1 D CLK Q Q 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 setmux 3(key_in[3], key_out[3], load, key[3]), setmux 2(key_in[2], key_out[2], load, key[2]), setmux 1(key_in[1], key_out[1], load, key[1]), setmux 0(key_in[0], key_out[0], load, key[0]); d_ff mem 3(key[3], clk, key_out[3]), mem 2(key[2], clk, key_out[2]), mem 1(key[1], clk, key_out[1]), mem 0(key[0], clk, key_out[0]); endmodule D 플립플롭에 의해 키패드에서 입력받은 값을 저 장하고, 저장 한 값을 출력. 키패드 입력이 없어도 회로는 작동하기 때문에 입 력이 있을 때에만 해당 값을 저장하도록 구분해주 기 위해 2 -1 MUX 추가. ☞ 키패드 입력이 있을 때엔 키패드 입력값, 키패드 입력이 없을 때엔 이전에 저장된 값을 플립플롭에 저장하고 출력한다.

Keypad memory – 키패드 입력 저장, 저장되어있는 값 출력 load clk Circuit Design Key_in[3]

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

7 -Segment – BCD코드로 7 -세그먼트 세팅 clk scan Counter 1 3 data 3

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

7 -Segment – BCD코드로 7 -세그먼트 세팅 7 -Segment module sevensegment(a_in, seg); input [3:

7 -Segment – BCD코드로 7 -세그먼트 세팅 7 -Segment 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'h 0: func_seg = 7'b 011_1111; 4'h 1: func_seg = 7'b 000_0110; 4'h 2: func_seg = 7'b 101_1011; 4'h 3: func_seg = 7'b 100_1111; 4'h 4: func_seg = 7'b 110_0110; 4'h 5: func_seg = 7'b 110_1101; 4'h 6: func_seg = 7'b 111_1101; 4'h 7: func_seg = 7'b 000_0111; 4'h 8: func_seg = 7'b 111_1111; 4'h 9: func_seg = 7'b 110_1111; 4'ha: func_seg = 7'b 111_0111; 4'hb: func_seg = 7'b 111_1100; endcase endfunction assign seg = func_seg(a_in); endmodule 이전 실험에서 만들었던 7 -세그먼트 회로의 출력값만 일부 변경

7 -Segment MUX clk – 출력 할 7 -세그먼트값 결정 scan Counter 1 3

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

7 -Segment MUX – 출력 할 7 -세그먼트값 결정 두개의 7 -세그먼트 모듈에서 나온

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

com clk – COMBO-II에서 표시 할 7 -세그먼트 결정 scan Counter 1 3 data

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

com – COMBO-II에서 표시 할 7 -세그먼트 결정 assign comctr = pressed | memctr;

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