• 전문가 요청 쿠폰 이벤트
*사*
Bronze개인인증
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 10
검색어 입력폼
  • 논리회로설계실험 5주차 Encoder 설계
    1) Objective of the Experiment(실험 목적)이번 실습은 4:2 Priority encoder를 behavioral modeling, dataflow modeling, gate-level modeling 이 세가지 모델링 방법으로 구현하는 것을 목표로 한다. 강의시간에 다룬 4:2 encoder의 modeling 방법을 참고하여 구현하였다. 모델링을 더 쉽게 하기 위해서 먼저 K map과 Boolean expression을 유도하는 과정을 거쳤다. 마지막으로 구현한 모델링이 정상적으로 작동하는지 Testbench 코드를 직접 짜고, Modelsim의 simulation을 이용하여 출력 파형을 확인함으로써 4:2 priority encoder가 올바르게 작동하는지 검증하였다.2) Theoretical Approach(이론)4:2 Priority Encoder4:2 Encoder는 기본적으로 하나의 input만이 true인 경우에 그에 대응되는 output을 출력한다. 즉 다수의 input이 동시에 true인 경우에 동작방식과 출력하는 output이 정의되어 있지 않다. 이러한 문제를 해결하기 위한 방법으로 priority encoder가 사용되는데, 동작방식은 간단하다. Input들에 priority level을 할당하여 여러 개의 input이 true이더라도 가장 priority level이 높은 input에 의거하여 output을 출력하는 것이다. 간단한 동작 예시를 들어보자. input으로 d, c, b, a 값이 4’b0101으로 입력되면, true인 bit가 두개이지만 상위 비트인 c에 의거하여 출력은 2’b10이 되게 된다.4:2 Priority Encoder의 Truth table을 먼저 그리면 아래와 같다.dcbaout1out00000xx000100001X0101XX101XXX11Priority level이 높은 bit가 true(1)라면 Priority level이 낮은 bit의 값은 1이던 0이던 관계없이 output은 결정된다. 따라서 Priority level이 높은 bit이 1이라면 그보다 Priority level이 낮은 bit들은 X(Don’t care)로 표시하였다.위의 Truth table을 이용하여 K map을 그리면 다음과 같다.K map을 out1, out2로 나누어 그리고 각각 Boolean expression을 구하였다.Out1 = c + d Out0 = d + bc’3) Verilog Implementations(코드 실행)4:2 Priority Encoder를 behavioral modeling, dataflow modeling, gate-level modeling으로 구현하였다.3.1) Behavioral modeling수정하기 전의 코드는 모든 case의 경우가 다 분류되어 있었지만, 중복되는 경우들이 많아 casex를 이용하여 간단하게 묶어서 구현하였다.위의 코드는 Truth table을 보고 구현하였다. 코드를 표로 간단히 나타내어 설명하면, 다음과 같다.input {d, c, b, a}output {out1, out0}4’b0001(0 , 0)4’b001x(0, 1)4’b01xx(1, 0)4’b1xxx(1, 1)4’b00001’bx3.2) Dataflow modeling이전에 구한 output의 Boolean expression은 Out1 = c + d, Out0 = d + bc’ 이었다.이것을 out1= c || d, out0 = d || (b && !c)으로 표현하여 코드에 구현하였다.3.3) Gate-level modelingOutput의 Boolean expression은 Out1 = c + d, Out0 = d + bc’ 이었다. c와 d를 미리 제공된 or gate에 입력하면 out1이 된다. 비슷하게 c를 not gate에 넣은 결과값과 b를 and gate의 넣어 bc’을 먼저 구하고, 이 값을 d와 or gate의 입력 값으로 넣으면 출력으로 out0가 나온다. 위의 코드는 이러한 과정을 나타낸 것이다.3.4) TestbenchTestbench 코드는 4:2 Priority Encoder의 input과 output부분, module instantiation 부분, 마지막으로 실행을 위한 test pattern 부분 총 세가지 부분을 skeleton code에 채워야 했다.우선 4:2 Priority Encoder의 input과 output부분은 아래와 같이 코딩하였다.다음으로 model instantiation 부분에서는 위에서 구현한 세가지 모듈을 호출하고, input에 위에서 선언한 A_4_TO_2_P, B_4_TO_2_P, C_4_TO_2_P, D_4_TO_2_P을 넣어주었다. output으로도 위에서 선언한 OUTPUT1_4_TO_2_P_?, OUTPUT2_4_TO_2_P_?를 출력해주었다. (?는 각 모델링마다 B, D, G이다.)마지막으로 test pattern을 설정하는 부분이다. input이 4개 이므로 16가지의 경우로 test pattern을 구성할 수 있다. 위의 코드에선 for loop를 이용하여 input {d, c, b, a}를 10ns delay로 0000부터 1111까지 1씩 증가하게 하였다. 이러면 모든 경우의 수를 입력 값으로 넣을 수 있다.4) Result(실행 결과)위에서부터 4개의 그래프는 4개의 input a, b, c, d의 wave이다. 10ns마다 input{d, c, b, a}가 0000부터 1111까지 1씩 증가하는 모습을 볼 수 있고, 따라서 4개 input에 대한 모든 16가지 경우를 테스트할 수 있다.OUTPUT1_4_TO_P_B, OUTPUT0_4_TO_P_B은 behavioral modeling의 output waveOUTPUT1_4_TO_P_D, OUTPUT0_4_TO_P_D는 dataflow modeling의 output waveOUTPUT1_4_TO_P_G, OUTPUT0_4_TO_P_G는 gate-level modeling의 output wave이다.behavioral modeling의 경우, input이 4’b0000인 경우 output이 2’bxx로 출력된다. 이전에 구한 4:2 Priority Encoder의 진리표와 K map을 보면, c가 1이거나 d가 1인 경우에만 output1은 1이 된다. 또한 output0은 b가 1, c가 0이거나 d가 1일 때 1로 출력된다. 이러한 이론은 simulation wave에 정확히 구현되어 있음을 확인할 수 있다. input이 4’b0000인 경우에만 behavioral modeling은 처리 방식이 다르기 때문에 파형이 다르지만 나머지 input의 경우에선 세가지 모델링의 wave가 모두 모양이 일치함을 알 수 있었다. 이전에 구한 Boolean expression Out1 = c + d, Out0 = d + bc’에 알맞게 출력되어 4:2 Priority encoder가 올바르게 작동함을 알 수 있다.5) Conclusion(결론 및 고찰)이번 실습은 4:2 Priority encoder의 작동방식에 대해 공부하고 Truth table과 K map을 그린 뒤 Boolean expression을 구하였다. 이를 이용하여 behavioral, dataflow, gate-level modeling으로 직접 설계해 보았다. 마지막으로 설계한 module을 testbench code를 이용하여 Modelsim의 simulation을 이용하여 wave를 확인하였다. Behavioral model에 casex문을 사용하여 input값의 경우에 따라 output을 더욱 간결한 방식으로 코딩하는 방법에 대해 익힐 수 있었다. 또한 testbench code를 직접 짜면서 4:2 Priority encoder를 테스트하는 코드를 짜보았는데, input과 output부분, module instantiation 부분, 마지막으로 실행을 위한 test pattern 부분 총 세가지 부분을 skeleton code에 채우면서 이해를 높일 수 있었다. 특히 test pattern 부분에서 for loop를 사용하여 간단히 구성할 수 있었다. 마지막으로 simulation을 이용하여 출력 파형을 분석해보면서 4:2 Priority encoder의 이론과 실제 결과값과 일치함을 알 수 있었다. 이러한 과정에서 논리회로설계에서 중요한 Encoder에 대해 더욱 깊게 이해할 수 있었다.
    공학/기술| 2023.09.11| 6페이지| 3,000원| 조회(172)
    미리보기
  • 논리회로설계실험 4주차 MUX 설계
    1) Objective of the Experiment(실험 목적)이번 실험의 목적은 4:1 MUX와 1:4 DEMUX를 강의 시간에 배운 2:1 MUX와 1:2 DEMUX의 modeling 방법과 skeleton code를 참고하여 구현하는 것이다. 이때 구현은 세가지 방법 중에서 교안에 나오지 않은 dataflow modeling과 gate-level modeling 두가지 방법으로 구현한다. 이를 구현하기 위해선 우선 Karnaugh map과 Boolean expression을 간단히 하여야 한다. 마지막으로 Verilog 소프트웨어를 이용하여 구현한 MUX와 DEMUX를 Modelsim의 Simulation 기능을 이용하여 출력 wave를 분석하고 이론과 출력이 일치하는지 확인하여 검증할 수 있다.2) Theoretical Approach(이론)2.1) 4:1 MUX4:1 MUX는 a,b,c,d 4개의 input과 2개의 input selections s1, s0 그리고 하나의 output으로 이루어져 있다. 동작원리는 4:1MUX의 output은 2개의 select bits의 조합에 의해 결정된다. 2개의 bit 이므로 총 4가지의 경우의 수가 있다. 이 조합에 따라 input중에서 output으로 1개가 선택되어 출력된다. 오른쪽 그림과 같은 MUX에서 s1=0 s0=0일 때 a, s1=0 s0=1일 때 b, s1=1 s0=0일 때 c, s1=1 s0=1일 때 output으로 d가 출력된다. 이를 K map으로 그려보자.이를 Boolean expression으로 나타내면 다음과 같다.s1 = 0, s0 = 0 일 때 Out = s1’ s0’ as1 = 0, s0 = 1 일 때 Out = s1’ s0 bs1 = 1, s0 = 0 일 때 Out = s1 s0’ cs1 = 1, s0 = 1 일 때 Out = s1 s0 d그러므로 최종 output은 OUT = s1’ s0’ a + s1’ s0 b + s1 s0’ c + s1 s0 d이 Boolean expession을 수정하여 not gate와 input이 2개인 or gate, and gate를 이용하여 4:1 MUX를 구현할 수 있게 하여야 한다.따라서 OUT = s1’(s0’a+s0b) + s1(s0’c+s0d) 로 수정하면 Data flow modeling과 Gate flow modeling에 사용할 수 있게 된다.2.2) 1:4 DEMUX1:4 DEMUX는 1개의 input과 2개의 input select bits, 그리고 4개의 output으로 이루어져 있다. 2개의 input select bits의 조합에 따라 input이 4개의 output 중에서 어디에 전달될 것인지 정해지게 된다. 오른쪽과 같은 4:1DEMUX에서 s1=0 s0=0일 때 out1에 input이 전달 될 것이고, s1=0 s0=1일 때 out2에 input이 전달 될 것이며, s1=1 s0=0일 때는 out3에 input이 전달, s1=1 s0=1일 때는 out4에 input이 전달 될 것이다. 이 때 input을 전달받지 못한 output은 0인 상태가 된다. 이를 K map으로 그리면 다음과 같다.K map에서 A, s1, s0는 input이고 out은 4가지 경우로 나누어 K map을 그려보았다. 위의 K map을 토대로 Boolean expression을 구할 수 있고 다음과 같았다.Out1 = s1’s0’AOut2 = s1’s0AOut3 = s1s0’AOut4 = s1s0A이렇게 구한 Boolean expression은 dataflow modeling과 gate-level modeling으로 구현할 때 사용할 수 있다.3) Verilog Implementations(코드 실행)교안에 이미 Behavioral modeling으로 구현되어 있기 때문에 이번 보고서에는 dataflow modeling과 gate-level modeling 이 두가지 방법만을 이용하여 구현한 코드를 기반으로 작성하였다.3.1) 4:1 MUX우선 Dataflow modeling을 이용하여 구현하다. 코드는 다음과 같다.위에서 미리 구한 4:1MUX의 Boolean expression을 dataflow modeling에 사용하기 알맞게 정리한 output은 OUT = s1’(s0’a+s0b) + s1(s0’c+s0d) 이었다. 이 코드에선 조건 연산자를 사용하였다. 만약 s1이 0, 즉 s1 == 1’b0이 참이면 (!s0 && a) || (s0 && b)를 실행시키고, s1이 1 즉, s1 == 1’b0이 거짓이면 조건 연산자에 의해 (!s0 && c) || (s0 && d)이 실행된다. 조건 연산자를 활용하면 output의 Boolean expression을 더욱 간단히 나타낼 수 있다.gate-level modeling으로 구현하면 코드는 다음과 같다.마찬가지로 4:1MUX의 Boolean expression은 OUT = s1’(s0’a+s0b) + s1(s0’c+s0d) 이었다. s1’과 s0’을 구하기 위해 우선 not gate에 s0와 s1을 입력시켜 놓았다. And gate를 이용하여 s0’a와 s0b를 출력하였고, 이 결과를 or gate에 input으로 넣어 (s0’a+s0b)를 만들었다. 이 항을 s1’과 and gate의 input으로 넣어 s1’(s0’a + s0b) 항을 만들었다. 마찬가지로 And gate를 이용하여 s0’c와 s0d를 출력하였고, 이 결과를 or gate에 input으로 넣어 (s0’c+s0d)를 만들었다. 이 항을 s1과 and gate의 input으로 넣어 s1(s0’c + s0d) 항을 만들었다. 이렇게 구한 두 항을 다시 or gate의 input으로 넣어 4:1MUX를 구현하였다.3.2) 1:4 DEMUXdataflow modeling을 이용하여 구현한 코드는 다음과 같다.이전에 구한 1:4 DEMUX의 Boolean expression은 Out1 = s1’s0’A, Out2 = s1’s0A, Out3 = s1s0’A, Out4 = s1s0A이었다. 이를 위의 코드에서 확인할 수 있다.다음으로 4:1EMUX를 gate-level modeling으로 구현한 코드이다.마찬가지로 Boolean expression Out1 = s1’s0’A, Out2 = s1’s0A, Out3 = s1s0’A, Out4 = s1s0A 을 이용하였다. not gate와 and gate를 이용하여 s1’s0’, s1’s0, s1s0, s1s0를 구하였고, 각각을 and gate의 input으로 넣어 out1, out2, out3, out4를 구현하였다.3.3) TestbenchTestbench code는 강의시간에 다룬 loop에 의해 input 값이 입력됨을 확인할 수 있었다.코드는 따로 수정하지 않았고 교수님께서 제공해주신 코드를 그대로 사용하였다.4) Result(실행 결과)4.1) 4:1 MUX4:1 MUX에서 출력되는 파형은 다음과 같았다.위의 6개의 wave는 순서대로 각각 input인 s1, s0, a, b, c, d의 파형이다. 아래 3개의 그래프는 미리 구현된 behavioral modeling의 wave와 이번 실습에서 직접 구현한 dataflow modeling, gate-level modeling의 wave이다. Select bit인 SEL1_4_TO_1 과 SEL0_4_TO_1이 각각 (0, 0) 일 때는 4:1 MUX의 output 이 A_4_TO_1와같고 (0, 1)일 때는 output이 B_4_TO_1와 같다. 마찬가지로 (1, 0)일 때는 output이 C_4_TO_1와같고 (1, 1)일 때는 output이 D_4_TO_1와같다. 또한 dataflow modeling과 gate-level modeling의 파형이 behavior modeling의 파형과 일치한다면 이는 성공적으로 구현했다는 뜻과 같다. 실제로 simulation을 돌린 결과, 아래 3개의 파형이 정확히 일치함을 알 수 있는데, 이는 Verilog로 구현한 4:1MUX가 잘 작동하고 있음을 알 수 있다.4.2) 1:4 DEMUX1:4 DEMUX의 출력 파형은 위와 같이 나왔다. 가장 위 3개의 그래프는 input인 s1, s0, A값이고 아래의 OUTPUT1_1_TO_4_B 부터 OUTPUT4_1_TO_4_B는 각각 behavioral modeling의 output1 부터 output4 까지의 파형을 나타낸다. OUTPUT1_1_TO_4_D 부터 OUTPUT4_1_TO_4_D는 각각 dataflow modeling의 output1 부터 output4 까지의 파형을 나타내고, 마찬가지로 OUTPUT1_1_TO_4_G 부터 OUTPUT4_1_TO_4_G는 각각 gate-level modeling의 output1 부터 output4 까지의 파형을 나타낸다. 1000ns 이후의 그래프를 보면 output들의 wave는 behavioral modeling, dataflow modeling, gate-level modeling 모두 파형이 같음을 알 수 있다. 따라서 1:4 DEMUX를 잘 구현했음을 알 수 있다.5) Conclusion(결론 및 고찰)이번 실습에선 우선 4:1MUX와 1:4DEMUX에 대해 이론적으로 학습하고 각각 K map을 그리고 Boolean expression까지 구하였다. 구한 Boolean expression을 dataflow modeling과 gate-level modeling에서 구현할 수 있도록 각 항을 s1’과 s1으로 묶어주는 과정까지 진행하였다. 각 modeling 방법으로 구현하는 과정에서 강의시간에 다룬 조건 연산자를 사용하여 활용하였으며, or gate, and gate, not gate등 이전 강의시간에 배운 gate들을 사용하여 복습하는 시간도 가질 수 있었다. 마지막으로 직접 구현한 두개의 modeling을 미리 구현된 behavioral modeling과 비교하여 확인하였고, 출력 wave가 정확히 일치함을 알 수 있었다. 이번 실습은 실습을 진행하면서 4:1 MUX와 1:4 DEMUX에 대해 더 깊은 이해가 가능했고, Verilog를 다루는데 더 익숙해질 수 있었다는 부분에서 의의를 찾을 수 있었다
    공학/기술| 2023.09.11| 8페이지| 3,000원| 조회(205)
    미리보기
  • 논리회로설계실험 10주차 up down counter설계
    1) Objective of the Experiment(실험 목적)이번 실습에서는 3-bit up-down counter를 Moore machine, Mealy machine으로 구현한다. 강의내용에서 다룬 두가지 machine의 기본적인 modeling방식과 작동원리를 참고하여 설계할 것이다. 마지막으로 testbench 코드를 작성하여 Modelsim의 simulation을 이용해 출력 파형을 확인하여 구현한 두가지 방식의 3-bit up-down counter가 정상적으로 작동하는지 검증할 것이다.2) Theoretical Approach(이론)2.1) Moore machineMoore machine의 가장 큰 특징은 output이 current state에 의해서만 결정된다는 것이다. 이러한 특징을 이용하여 3-bit up-down counter를 Moore machine-style diagram으로 그려보았다.오른쪽의 diagram과 같이 current state에 의해서만 output이 결정되는 Moore machine-style diagram이 그려진다. Input으로 reset, mode가 필요하며, output으로는 next_state가 필요하다. S0부터 S7까지 총 8개의 state가 필요할 것이므로 3-bit의 state가 필요하고, output과 next_state도 마찬가지로 3-bit가 필요할 것이다.2.2) Mealy machineMealy machine은 current state와 input에 의해서 output이 결정된다. 이러한 특징을 이용하여 3-bit up-down counter를 Moore machine-style diagram으로 그려보았다.오른쪽의 diagram과 같이 current state와 input으로 output이 결정되는 Mealy machine-style diagram이 그려진다. Input으로 reset, mode가 필요하며, output으로는 state와 output이 필요하다. S0부터 S7까지 총 8개의 state가 필요할 것이므로 3-bit의 state가 필요하고, output도 마찬가지로 3-bit가 필요할 것이다.3) Verilog Implementations(코드 실행)3.1) Moore machineMoore-machine style로 3-bit up-down counter를 구현한 코드는 위와 같다. Input에는 clk, rst, mode를 입력할 수 있고, output으로는 3-bit의 out, state, next_state를 설정하였으며, reg에도 동일하게 두었다. State를 구분하기 위한 Parameter은 S0~S7까지 설정하였고, 각각 0~7의 숫자로 두었다.먼저 output은 Moore machine의 특성상 current state에만 의존하여 정해진다. 따라서 always @ (state)로 always 구문을 작성하였고, 그 아래로 현재의 state에 따라 output을 어떻게 출력할 지 구현하였다.그 다음으로는 current state를 update하는 코드를 작성하는데 clk이 posedge일 때 RESET = 1 인 경우를 제외하고 state가 next_state의 값으로 update 되도록 구현하였다.마지막으로 next_state를 update하는 코드를 작성하였다. 우선 RESET = 1이면 clk이 posedge일 때 next_state는 S0이 된다. 하지만 RESET이 1이 아닐 경우, mode가 1’b1 인 경우와 아닌 경우로 나눈 후에, 현재 state에 따라 next_state의 값을 update할 수 있게 구현하였다.3.2) Mealy machineMealy-machine style로 3-bit up-down counter를 구현한 코드는 위와 같다. Input에는 clk, rst, mode를 입력할 수 있고, output으로는 3-bit의 out, state를 설정하였으며, reg에도 동일하게 두었다. State를 구분하기 위한 Parameter은 S0~S7까지 설정하였고, 각각 0~7의 숫자로 두었다.먼저 output은 Mealy machine의 특성상 current state와 input에 의존하여 정해진다. 따라서 always @ (state or mode)로 always 구문을 작성하였고, 그 아래로 mode값과 현재의 state에 따라 output을 어떻게 출력할 지 if문과 case문을 사용하여 구현하였다.그 다음으로 작성한 코드는 다음 state를 결정하는 코드이다. RESET = 1 이라면 clk이 posedge일 때 state가 S0가 되도록 하였고 RESET = 0이면 mode와 state에 의해 다음 state값이 변하도록 코드를 구현하였다.3.3) TestbenchTestbench code의 input에는 Moore counter와 Mealy counter 둘 다 reg로 RESET, MODE를 선언하였다. output에는 Moore counter에서는 OUT, STATE, NEXT_STATE를 wire로, Mealy counter에서는 OUT, STATE를 wire로 선언하였다.Module instantiation 부분에서는 구현한 두가지의 Moore counter, Mealy counter의 module을 선언하였다.RESET과 MODE의 초기값을 지정하는 부분에서는 Moore과 Mealy 둘 다 RESET 초기값은 1’b1, MODE의 초기값은 1’b0으로 설정하였다. 또한 test pattern 코드에서는 1’b1이던 Moore과 Mealy의 RESET값을 1’b0으로 바꾼다. 그 후, Moore과 Mealy의 MODE값을 1로 150ns동안 유지하고, 그 후엔 MODE값을 다시 0으로 유지하게 test pattern을 구현해보았다.4) Result(실행 결과)4.1) Moore machine위의 그래프는 Moore-machine style로 3-bit up-down counter를 구현하여 simulation 결과 출력된 wave이다. 가장 위에는 CLK의 파형이고 그 아래는 RESET, MODE, OUT, STATE, NEXT_STATE의 wave이다. 170ns 이전까지는 RESET = 1이므로 output은 000이 출력된다. 이후에 RESET = 0이 되고 이때 MODE = 0 이므로 000에서 down되어 111이 출력된다. 이후로 111, 110, 101, 100 … 000으로 계속 down동작이 이어지다가 320ns에 MODE = 1로 바뀌고 000부터 001, 010, 011…111로 up 동작이 이어진다. 이후에 470ns이후에 MODE = 0으로 바뀌고나서 다시 down 동작이 일어난다. Moore machine으로 설계한 module은 OUT이 현재의 State에만 의존하므로 바로 바뀌지 않고 Clock의 Positive edge에서 OUT이 바뀌는 모습을 관찰할 수 있다.4.2) Mealy machine위의 그래프는 Moore-machine style로 3-bit up-down counter를 구현하여 simulation 결과 출력된 wave이다. 가장 위에는 CLK의 파형이고 그 아래는 RESET, MODE, OUT, STATE의 wave이다. 170ns 이전까지는 RESET = 1이므로 output은 000이 출력된다. 이후에 RESET = 0이 되고 이때 MODE = 0 이므로 000에서 down되어 111이 출력된다. 이후로 111, 110, 101, 100 … 000으로 계속 down동작이 이어지다가 320ns에 MODE = 1로 바뀌고 000부터 001, 010, 011…111로 up 동작이 이어진다. 이후에 470ns이후에 MODE = 0으로 바뀌고나서 다시 down 동작이 일어난다. Mealy machine으로 설계한 module은 OUT이 현재 State와 MODE 둘의 조합에 따라 결정되므로 320ns에서 바로 up counter의 동작이 OUT으로 나타나는 것을 확인할 수 있다.결과적으로 Moore와 Mealy machine으로 구현한 두개의 3-bit up-down counter의 동작이 의도한대로 잘 작동하고 있음을 알 수 있다.5) Conclusion(결론 및 고찰)이번 실습에서는 Moore machine-style과 Mealy machine-style 두가지로 3-bit up-down counter를 구현해보았다. 코드를 작성하기전에 각 machine-style diagram을 직접 그려보고 참고하였고 3-bit up-down counter를 좀 더 쉽게 구현할 수 있었다.구현한 두개의 modeling을 Modelsim의 simulation을 이용하여 출력되는 wave를 확인하였더니 두가지 3-bit up-down counter모두 정상적으로 작동함을 알 수 있었다.이번 실습에서는 FSM type중 하나인 Moore machine과 Mealy machine에 대한 더욱 깊은 이해를 할 수 있었으며 이들의 동작 방식에 대한 이론을 바탕으로 3-bit up-down counter를 설계해보며 이전 실습시간에 다루었던 counter를 복습할 수 있는 기회가 되었다는 점에서 이번 실습의 의의가 있다.
    공학/기술| 2023.09.11| 7페이지| 3,000원| 조회(334)
    미리보기
  • 논리회로설계실험 9주차 counter설계
    1) Objective of the Experiment(실험 목적)이번 실습에선 강의에서 배운 내용을 바탕으로 Structural modeling으로 Ripple counter와 Ring counter를 구현하는 것이다. 이때 Single counter와 Up-down counter와 같은 counter들의 modeling 방식을 참고하여 구현할 수 있다. 마지막으로는 testbench 코드를 통해 Modelsim의 simulation을 이용하여 출력되는 wave를 확인하고, 구현한 두 counter가 정상적으로 작동하는지 확인하는 과정을 거쳤다.2) Theoretical Approach(이론)2.1)Ripple counter (D flip flop)위의 schematic은 D flip flop을 이용한 ripple counter의 기본 구조이다. 우선 4 bit의 output을 0으로 초기화 하고 시작한다. 이때 Q = 0, Q_BAR = 1인 상태가 되는데 Q_BAR가 flip flop의 input으로 들어가게 된다. 따라서 flip flop의 D는 다음으로 1이 입력된 상태가 되고, Q 값은 0에서 1로 바뀌게 된다. 따라서 첫번째 flip flop의 clk이 다음 posedge 일 때 첫번째 flip flop의 Q는 1이 되고 Q’는 0이 된다. 즉 두번째 flip flop의 clk신호가 1에서 0으로 변한다. (첫번째 flip flop의 Q’가 두번째 flip flop의 clk에 연결되어 있으므로). 따라서 두번째 D flip flop은 clk이 하강 edge이다. 그 다음 첫번째 flip flop의 clk이 posedge 일 때 첫번째 flip flop의 Q’이 1이 되어 두번째 flip flop의 clk으로 입력되고 이는 두번째 flip flop도 posedge인 상태가 되므로 값이 변하게 된다. 이런 작동이 반복되어 D flip flop을 이용한 ripple counter 설계가 가능한 것이다.2.2) Ripple counter (JK flip 알 수 있듯, 가장 왼쪽의 JK flip flop에서 OUT[0]이 input k로 입력되고, OUT_BAR[0]이 input j로 입력된다. 또한 OUT_BAR는 그 다음 flip flop의 clk으로 입력되며 마찬가지로 OUT[1]이 input k에, OUT_BAR[1]이 input j에 입력된다. 따라서 J,K의 입력 값이 이전 값과 계속 바뀌게 되고 가장 왼쪽의 JK flip flop은 clk이 positive edge일 때 동작하고 이후의 JK flip flop들은 이전 JK flip flop의 Q’이 0에서 1로 바뀔 때 동작하게 된다. OUT[3:0]이 0000으로 초기화된 상태에서 OUT[0]에 연결되어 있는 가장 왼쪽의 JK flip flop은 clk이 Positive edge마다 Q가 0에서 1로, 다음 clk의 Positive edge에서는 1에서 0으로 변화하는 것을 반복한다. OUT[1]에 연결되어 있는 JK flip flop을 살펴보면 이전 flip flop의 Q’이 0에서 1로 바뀔 때 동작하는데 이것은 이전 flip flop의 Q가 1에서 0으로 바뀔 때와 같다. 즉 이전 flip flop이 2번 동작할 때 1번 동작하게 되는데 전체적으로 보면 OUT[0]은 clk의 Positive edge마다 값이 바뀌고 OUT[1]는 clk의 Positive edge 2번마다 값이 바뀌고 OUT[2]는 4번, OUT[3]는 8번마다 값이 바뀐다. 즉 out[3:0]은 clk의 positive edge마다 0000 -> 0001 -> 0010 -> 0011 -> 0100 -> … -> 1111 -> 0000로 바뀌게 되고 이는 output이 clk의 posedge마다 2진수 1이 더해지는 것과 같다. 이를 이용하면 structural modeling을 이용하여 ripple counter를 쉽게 구현할 수 있다.2.3) Ring counter (D flip flop)D flip flop을 이용하여 설계한 Ring counter의 schematic입력된다. 여기서 출력되는 output OUT[0]은 다음 flip flop의 input D로 입력된다. 이와 같은 과정을 반복하게 되고, RESET에 0을 인가하고 PRESET에 0001을 입력하면 clk의 positive edge마다 0001 -> 0010 -> 0100 ->1000 ->0001을 계속 반복하게 될 것이다. 이를 이용하면 structural modeling을 이용하여 ripple counter를 쉽게 구현할 수 있다.3) Verilog Implementations(코드 실행)3.1) Fixing code위의 wave는 강의자료에 제공되어 있는 D flip flop을 이용해서 structural modeling으로 Ripple counter를 구현하여 simulation을 돌린 결과 출력된 wave이다. 420ns일 때를 보면 RESET값이 0에서 1로 변한다. 이때는 PRESET도 0000이므로 OUT으로 0000이 출력되어야 한다. 하지만 그래프에서 볼 수 있듯, 0100이 출력된다. 이는 rst 신호가 들어가도 첫번째 flip flop에서 한바퀴 돌고나서 다음 flip flop으로 넘어가기 때문에 다음 flip flop에서는 clk time이 지나야 reset이 적용되기 때문이다. 따라서 reset이 적용되지 않는 상태였던 것이다.그러므로 always@(posedge clk)이었던 구문을 수정하여 rst가 0에서 1로 바뀔 경우에도 항상 always 구문이 실행되도록 위와 같이 수정하였다. 기존에는 RESET = 1임에도 0이 출력되지 않을 수 있었지만 위 코드로 해결이 가능하다.JK flip flop에 대한 코드도 똑같은 문제점을 가지므로, 오른쪽 코드처럼 JK flip flop에 대한 always 구문에 posedge rst를 추가해줌으로써 수정하였다.3.2) Ripple counter (JK flip flop)Ripple counter를 JK flip flop을 이용하여 structural modeling으로 구현한 코드는 위와 같각 out_bar와 out이 한bit씩 입력되는 것을 확인할 수 있다. 또한 다음 flip flop의 clk에는 이전 flip flop의 out_bar가 입력되는 것을 알 수 있다. 이때 JK flip flop module은 D flip flop의 경우와 같이 RESET이 1일 때 0000이 출력되지 않는 문제를 해결하기 위해 위에서 수정한 코드를 사용하였다.3.3) Ring counter (D flip flop)Ring counter를 D flip flop을 이용하여 structural modeling으로 구현하면 위와 같다. 코드는 이론 부분의 schematic을 참고하여 작성하였다. 이때 D flip flop은 RESET이 1일 때 0000이 출력되지 않는 문제를 해결하기 위해 위에서 수정한 코드를 사용한 것이다. 코드를 보면 첫번째 flip flop의 input D에 out[3]이 입력되고 다음 flip flop들의 input D로 각각 차례로 out[0], out[1], out[2]가 입력됨을 알 수 있다.3.4) Testbench이번 실습의 Testbench code는 교수님께서 언급하신 대로 강의자료에 업로드 되어있는 v파일을 그대로 사용하였다.4) Result(실행 결과)4.1) Ripple counterRipple counter의 simulation결과 wave는 위와 같이 나왔다. 위에서부터 세개의 그래프는 각각 CLK, RESET, PRESET 그래프이며 아래에는 D flip flop을 이용한 ripple counter의 그래프, 가장 아래에는 JK flip flop을 이용한 ripple counter의 그래프이다. 20ns일 때 RESET 신호가 1에서 0으로 바뀌고 counter의 역할대로 0000에서 순서대로 0001, 0010, 0011, 0100…1111까지 출력되고 다시 0000에서 0100까지 출력됨을 확인할 수 있다. 이때 강의자료에서 ripple counter는 420ns에서 RESET 신호가 1이 되어도 계속 0100을 계 0000이 출력됨을 확인할 수 있었다. 또한 두 ripple counter의 출력 wave가 일치하므로 정상적으로 구현하였음을 알 수 있었다.4.2) Ring counterRing counter의 simulation 결과 출력 wave는 위와 같이 나왔다. 위에서부터 세개의 그래프는 각각 CLK, RESET, PRESET 그래프이며 아래에는 Ring counter의 behavioral modeling의 wave와 structural modeling의 wave이다. 처음 PRESET이 0001이므로 structural modeling도 초기값 0001이었다가 20ns일 때 RESET 신호가 0이 되고 0001, 0010, 0100, 1000…으로 출력이 변하고 반복된다. 420ns일 때 다시 RESET = 1이 되고 OUTPUT은 PRESET 값인 0001을 정상적으로 출력한다. 또한 마찬가지로 behavioral modeling에 대한 그래프와 structural modeling에 대한 결과 그래프가 일치함을 확인 가능한데, 이는 구현한 Ring counter가 정상 작동하고 있음을 뜻한다.5) Conclusion(결론 및 고찰)이번 실습에선 Ripple counter를 JK flip flop을 이용하여 structural modeling으로 구현해보았으며 Ring counter도 D flip flop을 이용하여 structural modeling으로 구현해보았다. 이 과정에서 schematic을 그려 코드를 작성하는데 참고하였다. 강의자료에 제공된 D flip flop을 이용해 ripple counter를 설계하는 코드에서 RESET = 1임에도 불구하고 이전 값인 0100을 그대로 출력하는 문제점을 해결하기 위해 D flip flop의 always 구문 코드를 수정하였다. 마지막으로, 구현한 counter들이 정상적으로 작동하는지 확인하기 위해 Modelsim의 simulation을 이용하여 출력 wave를 확인하였는데, 그 결과 설계한 counter들이.
    공학/기술| 2023.09.11| 6페이지| 3,000원| 조회(182)
    미리보기
  • 논리회로설계실험 8주차 register 설계
    1) Objective of the Experiment(실험 목적)이번 실습에서는 8-bit register와 8-bit shift register를 structural modeling으로 구현한다. w8 강의에서 배운 shift register의 behavioral modeling과 1-bit register module를 참고하여 구현할 수 있다. 마지막으로 testbench 코드를 작성하여 Modelsim의 simulation을 이용하여, 구현한 두개의 register wave를 관찰하고 정상 작동하는지 확인한다.2) Theoretical Approach(이론)8-bit register와 8-bit shift register의 이론부분이 강의 자료에 이미 제공되어 있기 때문에 교수님께서 언급하신 대로 이론부분은 생략하였다.3) Verilog Implementations(코드 실행)3.1) 8-bit register (Structural modeling)위의 그림은 8-bit register structural modeling의 schematic을 나타낸 그림이다. input [7:0]에서 한 bit씩 1-bit register에 입력시키면 output [7:0]에서 한 bit씩 output을 출력함을 확인할 수 있다. 위의 schematic을 structural modeling으로 코드를 작성하면 다음과 같다.1-bit register에 in[7:0]에서 한 bit씩 입력시킨 결과를 out[7:0]에 한 bit씩 출력시킴을 확인할 수 있다.3.2) 8-bit shift register (Structural modeling)8-bit shift register도 마찬가지로 1-bit register를 이용하여 structural modeling으로 설계할 것이다. 위의 그림은 8-bit shift register의 schematic을 나타낸 것이다. 여기서 볼 수 있듯이, 8-bit shift register는 가장 오른쪽의 1-bit register의 output인 out[0]가 왼쪽 1-bit register의 input으로 입력된다. 동일하게 out[1]도 왼쪽 1-bit register의 input으로 입력되어 out[2]를 출력한다. 이러한 과정이 반복되고, 가장 오른쪽 1-bit register의 input은 SHIFT_IN임을 확인할 수 있다. 이를 코드로 작성하면 아래와 같다.가장 오른쪽의 1-bit register에 input으로 shift_in을 입력하고, 그 결과를 다음 1-bit register의 input으로 입력한다. 다시 그 1-bit register의 output을 다음 1-bit register의 input으로 입력하는 과정을 반복하여 output[7:0]을 출력한다.3.3) Testbenchmodule instantiation 부분에는 위에서 구현한 eight_bit_register_structural_module, 그리고 eight_bit_shift_register_structural_module을 입력해주었다.8-bit register의 test plan 코드는 위와 같다. 8-bit register는 RST = 1’b0일 경우에 IN[7:0]에 20ns 간격으로 8’b11001010, 8’b00110101, 8’b11110000, 8’b00001111을 입력하였고, RST = 1’b1일 때에도 마찬가지로 똑같은 입력을 주었다. RST = 1’b1일 경우에는 reset이 되므로 8’b00000000을 출력할 것이다. 또한 RST = 1’b0일 때에는 CLK이 posedge일 때 output은 input을 그대로 출력할 것이다.8-bit shift register의 test plan은 RST = 1’b1일 때 SHIFT_IN값을 1로 8번 입력하였다. 하지만 이와 같이 Reset input이 1인 경우에는 SHIFT되지 않을 것이다. RST = 1’b0일 때, 즉 Reset input이 0인 경우에는 SHIFT_IN을 10101100으로 입력하였고, 이후에 다시 RST = 1’b1로 입력하였다. 이론상 SHIFT_IN에 의해 OUT[7:0] = 8’b10101100까지 출력되었다가 RST = 1’b1에 의해 8’b00000000으로 출력될 것이다4) Result(실행 결과)4.1) 8-bit Register8-bit register의 출력 wave는 위와 같이 나왔다. 맨 위에 있는 wave는 clk으로 상태가 계속 변화하며 그 아래는 입력 input[7:0]의 wave이다. 그 다음 아래는 RST의 wave이고 그 아래로는 behavioral modeling일 때 output [7:0]과 structural modeling일 때 output [7:0] wave이다. 100ns일때 RST = 0으로 바뀌고, 이 때 CLK이 posedge 일 때 입력인 11001010이 그대로 출력되는 모습을 확인할 수 있었다. 그 다음에도 CLK이 posedge 일 때 00110101, 11110000, 00001111도 입력이 그대로 출력됨을 확인 가능하다. 이후에 180ns가 되었을 때, RST = 1이 되므로 input으로 11001010등이 입력되어도 00000000으로 출력되는 것을 알 수 있다. 또한 behavioral modeling과 structural modeling의 출력 그래프가 일치하여 구현한 structural modeling의 8-bit register가 정상적으로 작동함을 알 수 있다.4.2) 8-bit shift Register8-bit shift register의 출력 wave는 위와 같이 나왔다. 마찬가지로 가장 위의 wave는 clk이고, 그 아래는 SHIFT_IN이며 그 아래는 RST의 wave이다. 그 아래로는 서로 다른 방식의 behavioral modeling의 wave이며 맨 아래는 structural modeling의 wave이다. 440ns이전에 RST = 1일 때 SHIFT_IN이 계속 1이지만 Reset되어 계속 출력이 00000000임을 확인할 수 있다. 440ns 이후 RST = 0일 때는 SHIFT_IN이 1이므로 우선 output은 00000001이 된다. 이후에 SHIFT_IN값이 1, 0, 1, 0, 1, 1, 0, 0으로 순차적으로 바뀌었고 따라서 output에서도 shift가 일어나서 00000011, 00000110, 00001101으로 출력되고 마지막으로 10101100까지 바뀜을 확인할 수 있다. 620ns 부터는 다시 RST = 1이므로 Reset이 일어나 00000000이 출력됨을 확인할 수 있었다. 또한 behavioral modeling과 직접 설계한 structural modeling의 그래프가 일치하므로 구현한 8-bit shift register가 정상적으로 작동함을 확인할 수 있었다.5) Conclusion(결론 및 고찰)이번 실습에선 structural modeling으로 8-bit register와 8-bit shift register를 설계하였다. 이때 강의시간에 배운 1-bit register를 이용하여 구현할 수 있었다.또한 설계한 register들이 정상적으로 작동하는지 확인하기 위해 교수님께서 제공해주신 skeleton 코드를 채워 넣어 testbench 코드를 작성하였다. 또한 강의시간에 배운 synchronous reset을 적용하여 reset동작까지 확인하였다. 8-bit register와 8-bit shift register는 test plan의 경우의 수가 매우 다양했지만, 이를 모두 입력하여 테스트하는 것은 비효율적이므로 정상 작동하는지 확인할 수 있을 정도의 test plan을 구현하였다. 마지막으로 Modelsim의 simulation을 이용하여 출력 그래프를 확인하였고, 8-bit register와 8-bit shift register가 정상적으로 작동함을 검증할 수 있었다. 이번 실습을 통해 register가 clk edge에서 동작하고, 데이터를 저장하고 유지하는 특성이 있음을 알게 되었고, shift와 reset의 역할이 무엇인지 알았다. 또한 그 특성에 맞게 Verilog로 코딩할 수 있다는 것을 배웠다는 점에서 이번 실습의 의의가 있다.
    공학/기술| 2023.09.11| 5페이지| 3,000원| 조회(172)
    미리보기
전체보기
받은후기 1
1개 리뷰 평점
  • A+최고예요
    1
  • A좋아요
    0
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    0
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 04월 21일 화요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
12:08 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감