본문내용
efinitions
m_clk_process :process
begin
m_clk <= \'0\';
wait for m_clk_period/2;
m_clk <= \'1\';
wait for m_clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
m_reset <= \'0\';
wait for 50 ns;
startsig <= \'1\';
wait for 50 ns;
startsig <= \'0\';
wait for 50 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 50 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 50 ns;
startsig <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for m_clk_period*10;
-- insert stimulus here
wait;
end process;
END;
6. Simulation 결과
test bench를 이용하여 우선 startsig를 입력한 뒤에
m_input 값을 다음과 같이 설정하였다.
0011101111011111001111110011111111001110111101111100111
이 때, 15개의 111이 detect된 뒤에 멈추는가를 확인하고 그 뒤에는 아무것도 작동하지 않는지를 보았다. 그 뒤에 starsig 입력을 다시 주어 초기값으로 되돌려 동작함을 확인하였다.
startsig에 의해 starter에 1이 들어오면 stop 상태에서 work 상태로 바뀐다. work 상태에서 m_input에 1이 입력되면 a state에서 b state로 이동하는 것을 확인할 수 있다. 그리고 이와 마찬가지로 clock의 rising edge일 때 들어온 input이 있을 때 위에서 그린 state diagram 대로 state가 변한다.
이처럼 state가 변하면서, 111이 세 번 연속으로 입력된 상태인 d, f, g에서 각각 한번씩 count한다. 따라서 맨 아래 변수 cx를 보면 4bit의 2진수로 1씩 커져감을 확인할 수 있다.
이처럼 cx가 계속 증가하다가 15인 “1111”이 되면 주어진 조건대로 동작을 멈춘다.
이 때는 stop으로 이동하여 위 사진에 보이는 바와 같이 input이 더 들어와도 count하지 않는다.
s=1이 입력되면 다시 work state로 이동하여 처음부터 같은 과정을 되풀이한다.
m_clk_process :process
begin
m_clk <= \'0\';
wait for m_clk_period/2;
m_clk <= \'1\';
wait for m_clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
m_reset <= \'0\';
wait for 50 ns;
startsig <= \'1\';
wait for 50 ns;
startsig <= \'0\';
wait for 50 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 50 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'0\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 50 ns;
startsig <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for 10 ns;
m_input <= \'1\';
wait for m_clk_period*10;
-- insert stimulus here
wait;
end process;
END;
6. Simulation 결과
test bench를 이용하여 우선 startsig를 입력한 뒤에
m_input 값을 다음과 같이 설정하였다.
0011101111011111001111110011111111001110111101111100111
이 때, 15개의 111이 detect된 뒤에 멈추는가를 확인하고 그 뒤에는 아무것도 작동하지 않는지를 보았다. 그 뒤에 starsig 입력을 다시 주어 초기값으로 되돌려 동작함을 확인하였다.
startsig에 의해 starter에 1이 들어오면 stop 상태에서 work 상태로 바뀐다. work 상태에서 m_input에 1이 입력되면 a state에서 b state로 이동하는 것을 확인할 수 있다. 그리고 이와 마찬가지로 clock의 rising edge일 때 들어온 input이 있을 때 위에서 그린 state diagram 대로 state가 변한다.
이처럼 state가 변하면서, 111이 세 번 연속으로 입력된 상태인 d, f, g에서 각각 한번씩 count한다. 따라서 맨 아래 변수 cx를 보면 4bit의 2진수로 1씩 커져감을 확인할 수 있다.
이처럼 cx가 계속 증가하다가 15인 “1111”이 되면 주어진 조건대로 동작을 멈춘다.
이 때는 stop으로 이동하여 위 사진에 보이는 바와 같이 input이 더 들어와도 count하지 않는다.
s=1이 입력되면 다시 work state로 이동하여 처음부터 같은 과정을 되풀이한다.
추천자료
- 디지털 도어락 및 디지털 시계 및 알람(digital door lock, digital clock) -vhdl 논리설계회로
- [디지털회로설계 HW4] VHDL로 inverter 구현시 transport delay와 inertial delay의 차이점
- [디지털 회로설계] 고속 동작 덧셈기 설계
- [디지털 회로설계] 1-Bit Full Adder를 통한 4-Bit Full Adder 설계
- [디지털 회로설계] VHDL을 통한 Gray Code 설계
- [디지털 회로설계] Moore , Mealy Type Finite State Machine
- 디지털 회로설계 - 고속 동작 곱셈기 설계
- Mealy FSM zero detector 해석, 회로구현(디지털시스템설계)
- 고급디지털 회로설계 - 111 DETECTOR 설계
소개글