VHDL

램메모리 VHDL RAM(Random Access Memory) VHDL

전자자연인 2021. 6. 9. 21:43
반응형

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값으로 출력이 된다.

 

 

 

반응형