1. 대충 보니까
8254를 써서 clock 을 원하는 주파수로 분주하는 fuction generator를 만드는듯
2. mode3 동작
- 프로젝트에서는 mode3를 사용해서 square wave를 생성하는데
데이터시트를 보니 mode3는 mode2와 비슷하게 rate generator 역할을 한다.
clock의 duty cycle만 다른듯?
(data sheet의 mode definition 참고할 것.)
- GATE는 무시하란다

- mode3 동작
divide-by-N counter 와 같이 동작
initial count의 반이 되면 OUT이 나오는듯?
위 그림에서 LSB가 initial count인 듯
(LSB 4, 5일때 2에서 count expired - 5일때는 2되고 1clock 지나서)
a) even counts
- initial count load(OUT은 initially high)
- 매 clock마다 값이 2씩 감소,
- count가 끝나면(initial count의 반) OUT이 바뀜(toggle)
- 다시 initial count reloaded
- 반복
b) odd counts
- initial count load N-1(even), (OUT은 initially high)
- 매 clock마다 count 2씩 감소
- count가 끝나고 한 clock 있다가 OUT이 LOW로 됨
- 다시 initial count reloaded
- 매 clock마다 count 2씩 감소
- count 끝나면 바로 OUT이 HIGH로 됨
- 다시 reloaded
- 반복
----------2014_11_1_SAT-----------
3. 8254
아하하하하ㅏㅇ항하앟ㅇ하
8254 코드는 주어진단다 하하하ㅏ 시발
나는 CONTROL SIGNAL GENERATOR를 통해서 8254에 쓰이는
control signal만 만들면 된단다
4. PCFG TOP 파일도 주어진다.
그냥 뭐 별거는 없고 input, output만 정의해놓은 거임
여기다가는 각 component의 proto type과,
각 component들에 사용할 signal들을 정의해주면 된다.
5. Address Decoder
PC로부터 9bits address를 입력받게 된다.
address decoder에서 그 주소를 입력받은 후,
각 component에 해당하는 address를 입력받았을 때, 그 component를 사용할 수 있도록
1 bit signal을 내보내주면 된다. 이 signal이 CS역할을 하는 것 같다
simulation 결과,
input address에 따라서 각 output signal들이 잘 나오는듯
clk은 필요없는거 같다.

6. Data Bus Buffer
PC로부터 데이터를 입력받을때, PC로 데이터를 보낼때 같은 BUS를 이용하므로
tri buffer를 이용한 control이 필요하다
enable은 active low로 동작하며
enable이 0이면 latch에서 나온 데이터가 PC로 들어가고,
1이 되면 Hi-Z로 만들어서, PC에서 또 다른 latch나 8254로 데이터를 보낼 수 있도록 한다.
- 지금 top에서 signal 연결을 제대로 안했는데, latch의 output을 buffer의 input으로 연결해줘야함

흠 근데 각 component 말고 top에서 시뮬해봐야 할텐데, TOP simul할 때 어떻게 component들의
signal을 보는지 잘몰겠당...
7. LATCH
data를 입력받을 때나 출력할 떄, clock과의 동기화를 위해 latch를 거친다
(enable 있고, clock이 1일 때만 입력이 출력으로 전달된다, edge triggered 가 아닌 level sensitve로 동작,
clock low이면 이전 값이 그대로 유지됨)
PC로부터 data 입력, PC로 data 출력, ADC로부터 data 입력, DAC로 data 출력
총 네개의 latch가 사용되며, 모두 같은 clock과 reset을 갖지만
input data, output data, enable은 모두 따로따로임
모든 enable 신호는 모두 control signal generator에서 만들어 보내준다.

8. internal / primary signal
-- signal
-- 각 component들의 output signal만을 internal signal로 정의해준다, input은 할 필요없다.
-- ex) latch의 enable은 internal signal로 선언해줄 필요 없고,
-- control signal generator에서 나오기 때문에 여기서 나온 output을 internal signal로 선언해준 후
-- latch의 input에 연결만 해주면 된다
-- 선언해준 internal output signal 들은 사용되는 component들의 primary input으로 연결해준다
9. with - select
with s select y <= d0 when s = '1',
d1 when s = '0';
"00" when others;
이거를 쓰려면 마지막에 others가 꼭 필요하다
10. MUX_2_TO_1
RAM0로 들어가는 mux, DAC와 PC로 나가는 mux 두개가 있다
설명서에는 각각 input, output mux라는데 그게 그거 아닌가...
input mux는 PC 데이터와 ADC 데이터로부터 선택, output mux는 RAM0와 RAM1 으로부터 선택
암튼 테스트 결과 이상 없음

11. MUX_3_TO_1
input이 3개다, input 3개이므로 select signal은 2bit, control signal generator에서 잘 맞춰야한다
filter에서 들어오는거, RAM0에서 들어오는거, input MUX에서 들어오는거
이 중에서 select해서 output은 RAM1로 들어간다

12. DUAL_PORT_RAM
RAM0, RAM1
simulation은 아직 못해봄
13. ERRORERROR

모듈을 선언해놓고, architecture에 아무것도 없으면 위와 같은 error가 뜨게 된다
아무 쓰잘데기 없는 명령이라도 하나 집어넣으면 에러 안뜸
-----------2014_11_ 9_SUN-------------------
14. 8254
8254 클락나옴!!
테스트벤치에서 어드레스랑 wen, ren등 다른 signal은 잘나오는데 이상하게 data가 자꾸 안나온다 했더니
버퍼를 통해서 8254에 넣어주니 데이터가 잘들어온다

위와 같이 어드레스, 데이터 wen등 나온다 control register에 한번, counter에 두번 데이터를 쓰고 나면
8254에서 시스템 clock이 8분주된 clock이 나오게 된다.
주의할점은, 어드레스가 나오자마자 데이터를 바로 쓰는게 아니라,
어드레스와 cmd_data가 나온 후에, controller에서 ready signal을 띄워주면
그제서야 wen과 data가 나오게 된다, 그 전까지는 data가 high-z 로 되어있는 것을 볼 수 있다

8254 세팅을 안해도 처음에 느린 clock이 나오다가 세팅하는 과정에서 이상한 모냥이 잠깐 나오고

세번의 데이터를 쓰는 세팅 과정이 끝나면 위와 같이 8분주된 clock이 나오게 된다
테스트벤치에서는 ready신호를 controller에서 받아야 어드레스와 데이터를 보내준다.
일단은 걍 가라로 뜨게 해줌
스테이트를 통해서 ready 신호가 나오게 해줘야한다
15. address counter
ram0에 여러번 따로따로 쓰더라도
카운트는 계속 마냥 증가? 리셋 들어오기 전까지는?