[verilog]verilog를 이용한 memory설계(Little Endian방식)
- 최초 등록일
- 2006.05.29
- 최종 저작일
- 2006.05
- 기타파일
- 가격 2,000원
소개글
verilog를 이용한 memory설계(Little Endian방식)입니다.
• • • memory의 기본 기능만을 지원하는 하드웨어 설계한다. 따라서 memory에 data를 저장하고 읽는 기본적인 과정을 위의 구조를 이용하여 구현한다.
3. 동작방법
• 메모리의 동작은 두가지로 나뉘게 됩니다. 메모리의 내용을 읽을 것인가, 메모리에 내용을 쓸 것인가.
• input인 (MemWrite / MemRead) 중 한 개가 1이 되게 되면 (쓰기 / 읽기) 동작을 수행하게 됩니다.
• 그 방법은 Address에 있는 주소를 읽어와서
• 쓰기의 경우 : 입력으로 들어온 address에 맞는 entry에 Wdata 내용을 쓰게 됩니다.
• 읽기의 경우 : 입력으로 들어온 address에 맞는 entry에 내용을 읽어서 Rdata에 쓰게 됩니다.
컴파일 실행환경
max2plus
본문내용
Input 값 : Address, Wdata, MemWrite, MemRead, clk 입니다.
Output 값 : InvalidBit, Rdata입니다.
Reg 값(변수) : InvalidBit, temp1, temp2, temp3, temp4, mem0, mem1, mem2, mem3, mem4, mem5, mem6, mem7
InvalidBit를 사용한 방법.
: InvalidBit가 언제 지정이 되는지 생각하기가 참 힘들었습니다. 일단은 가능한 생각해 낸 경우가 MemRead, MemWrite 신호가 동시에 1로 들어오거나 동시에 0으로 들어올 경우에 작동을 하지 않고 InvalidBit가 1로 설정이 되도록 해주었습니다. 하지만 일단 정상적인 작동을 위한 루트로 들어가면 InvalidBit값이 다시 0으로 셋팅 되도록 만들어 주었습니다.
Little Endian 사용방법 :
이 방법을 몰라서 처음 냈을 때 실수를 했습니다. ㅠ_ ㅠ
너무나 간단했는데 혼자 너무 깊이 생각을 해버렸네요. 방법은 다음과 같습니다. memory안에 data 가 저장되어 질 때, 그 값은 낮은 주소에서부터 8bit 씩 입력이 됩니다. 이것이 바로 리틀 엔디안(Little Endian)인데 코딩으로 다음과 같이 구현하였습니다. 일단 8bit 씩 거꾸로 들어가야 하므로 8bit 변수를 4개 설정하여 임시값으로 사용하였습니다.
치환방법은 밑의 코드에서 보면 알 수 있듯이 MemWrite 구간 (메모리 Write 구간) 에서는 일단 32bit 데이터를 memory 안에 넣어준 후에 temp 변수 값들을 이용해서 치환 해 주었습니다. 또한 MemRead 구간 (메모리 Read 구간) 에서는 일단 메모리의 값을 Rdata 안에 넣어준 다음에 다시 temp 를 사용하여 원래 값으로 복원시켜 주는 방법을 사용하였습니다.
참고 자료
없음