반응형
1.RAM(Random Access Memory)
Memory에 저장된 값을 읽을 수 있고, ROM과 다른점은 필요한 data를 저장할 수 있다. 하지만 전원이 끊기면 저장된data가 날아간다(=휘발성 메모리)
8비트 데이터를 8개 저장하는 간단한 8비트의 RAM을 설계한다 보았을 때,
memclk의 rising_edge 신호에 맞춰 w_en의 신호가 High가 될 때의 address신호값에 data_in을 입력하여 저장시킨다.
2.소스코드 및 설명
7: ADDR_BITS 는 매개변수3으로 정의, DATA_BITS는 매개변수8로 정의 //회로의 개수나 입출력의 크기가 매개변수에 의해 결정되게 하는 generic문
19: subtype형의 ram_word는 DATA_BITS-1=(8-1) 8비트의 로직벡터형 선언
20: ram_word의 type중 하나ram_memory는 배열형(0부터 2^3-1 즉,7까지)
22: signal타입 ram선언 데이터 형식은 ram_memory이다. ram_memory는 ram_word형(8비트의로직벡터)형 중의 ram_memory(0부터 7까지 배열)형
그리고 값은 배열의 0번부터 7번까지 초기값을 적어줌
28 : write_addr의 변수는 0부터 2^3-1 즉 7까지의 범위의 상수형 선언
30: memclk가 상승신호 일 경우,
31: w_en 신호가 1일 경우
32: write_addr에 addr의 로직벡터형을 정수로 치환하여 전달
33: ram(write_addr), write_addr의 index에 해당하는 ram의 배열값에 data_in의 입력값을 전달해준다 ( 메모리쓰기 부분)
39: read_addr의 변수선언 : 정수 0부터 2^3-1 (=7)의 범위의 값을 가진다.
41: read_addr은 addr 로직벡터값을 정수형으로 전환하여 넣어준다
42: data_out에 RAM(read_addr(정수형))에 해당하는 index를 전달하여 출력한다.
3.시뮬레이션 결과 및 설명
1. addr입력신호가 000이 되었을시, integer형으로 정수 0이되어 conv함수를통해 0부터7까지 정수형의 변수로 선언된 read_addr에 값이 전달된다.그리고 출력은 RAM(read_addr)=RAM(0) RAM의 0번 index에 해당하는 배열의 값이 data_out으로 전달되어 출력된다.
2. addr의 입력신호가 001이라 integer형으로 정수 1이되어 read_addr에 전달되어 RAM(1)의 해당하는 배열의 값이 나와야 하지만, write_enable(=w_en)신호가 1이고, memclk pulse가 rising_edge이므로 data_in의 data값이 RAM의 배열 1번주소에 써진다. 초기값위에 덮어쓰기가 되어 11111111이 저장되어 출력된다.
3. 다음 addr의 신호가 001이 되었을 때, 정수1로 변환하여 read_addr값으로 변환되어 RAM(1)에 해당하는 배열의 값이 전 w_en신호에 맞춰서 새로 저장된 data의 값으로 씌어져 출력에 저장된 data값으로 출력이 된다.
반응형
'VHDL' 카테고리의 다른 글
Coffe Vending Machine VHDL (Moore설계) (0) | 2021.06.09 |
---|---|
Sequence Detector(순차검출기) (0) | 2021.06.09 |
ROM memory (Read Only Memory) VHDL (0) | 2021.06.09 |
4비트 존슨 카운터(4bit johnson counter) (0) | 2021.06.09 |
4 BIT RING COUNTER,4비트링카운터 VHDL (1) | 2021.06.09 |