FPGA 연구 노트 _ROM 코어 호출 및 디버깅

FPGA 연구 노트

ROM 코어 호출 및 디버깅

1. ROM存储器IP核的使用
2. 创建.mif文件
3. In system memory content editor内存查看工具的使用
4. Signal tapII工具使用
5. Verilog 代码
6. Modelsim仿真
7. FPGA板级验证

ROM 코어 호출 및 디버깅

  • 목표 : Quartus 소프트웨어에 제공된 ROM 코어를 호출하고 시스템 설계를 수행합니다.
  • 현상 : 데이터 세트 (삼각 파형 테이블)가 FPGA의 IP 코어로 구축 된 온칩 롬에 저장됩니다. 개발 보드의 전원을 켜면 시스템이 롬에서 데이터를 읽고 데이터를 직접 출력하기 시작합니다. 병렬 포트를 통해. 신호 탭 II 소프트웨어를 통해 병렬 포트의 데이터를 실시간으로 캡처하여 표시합니다 (삼각 파형). 그런 다음 quartus 소프트웨어에 제공된 시스템 메모리 콘텐츠 편집기 도구를 사용하여 온라인 ROM의 데이터 (사인 파형)를 변경 한 다음 신호 tapII 도구로 캡처 한 파형 데이터를 다시 관찰합니다.
  • 지식 포인트 :
  1. ROM 메모리 사용 IP 코어
    .mif 파일 생성
  2. 시스템 메모리 내용 편집기 메모리보기 도구 사용
  3. Signal tapII 도구는
    칩 노드 데이터 또는 외부 IO 포트 데이터를 직접 캡처하고 JTAG 포트를 통해 PC에 연결할 수있는 임베디드 로직 분석기 / 온칩 로직 분석기를 사용합니다. PC의 quaturs 소프트웨어는 JTAG 라인을 통해 온칩 로직 분석기와 통신하고 온칩 로직 분석기가 캡처 한 설계의 노드 정보를 실시간으로 PC로 전송하는 신호 탭 II 소프트웨어를 제공합니다. 그리고 PC는 singal Tap II를 사용합니다. 소프트웨어는 데이터를 표시합니다.

여기에 사진 설명 삽입

1. ROM 메모리 IP 코어 사용

  • (1) .IP 카탈로그, ROM 검색, ROM 두 번 클릭 : 1- 포트, 요구 사항에 따라 데이터 너비, ROM 메모리 및 기타 정보를 설정하고 다음을 클릭합니다.

여기에 사진 설명 삽입

  • (2) 필요에 따라 등록 포트를 선택하고 다음을 클릭하십시오.

여기에 사진 설명 삽입

  • (3) .mif 파일을 선택하고 다음을 클릭합니다.

여기에 사진 설명 삽입

  • (4) 다음을 클릭하십시오.

여기에 사진 설명 삽입

  • (5). 마침 클릭

여기에 사진 설명 삽입

  • (6) .qip 파일 생성, 우클릭, 최상위 엔티티로 설정, 분석 및 합성

여기에 사진 설명 삽입

  • (7). 테스트 벤치 작성, 시뮬레이션 검증 기능

2. .mif 파일 생성

  • (1) 새 파일을 만들고 메모리 초기화 파일을 선택한 다음 확인을 클릭합니다.

여기에 사진 설명 삽입

  • (2) 비트 폭과 메모리 깊이를 설정하고 확인을 클릭하여 다음 파일을 생성합니다.

여기에 사진 설명 삽입
여기에 사진 설명 삽입

  • (3) 필요에 따라 메모리 값을 변경 한 후 파일을 클릭하고 다른 이름으로 저장하고 이름을 설정하고 .mif 파일을 프로젝트 폴더에 저장하면 .mif 파일 설정이 완료됩니다.

여기에 사진 설명 삽입
여기에 사진 설명 삽입


3. 시스템 메모리 내용 편집기 메모리보기 도구 사용

  • (1). 도구-> 시스템 메모리 내용 편집기

여기에 사진 설명 삽입

  • (2). 다음 인터페이스가 표시되면 읽기를 클릭하여 ROM의 데이터를 읽습니다.

여기에 사진 설명 삽입

  • (3) .ROM을 마우스 오른쪽 버튼으로 클릭하고 파일에서 데이터 가져 오기를 선택하십시오.

여기에 사진 설명 삽입

  • (4) 편집 한 .mif 파일을 선택하고 열기를 클릭합니다.

여기에 사진 설명 삽입

  • (5). 쓰기를 클릭하면 파일의 데이터가 ROM에 기록됩니다.

여기에 사진 설명 삽입

  • (6). 기록 된 데이터는 신호 tapII에 표시됩니다.

여기에 사진 설명 삽입


4. 신호 tapII 도구 사용

  • (1) 새 파일을 생성하려면 신호 탭 로직 분석기 파일을 클릭합니다.

여기에 사진 설명 삽입

  • (2) .clk 신호를 순서대로 추가하십시오.

여기에 사진 설명 삽입

  • (3). 순서대로 관찰 할 신호 추가

여기에 사진 설명 삽입

  • (4) 설정이 완료되면 파일을 클릭하고 이름과 경로를 설정 한 후 저장합니다.

여기에 사진 설명 삽입

  • (5) 설계에 따라 저장 영역의 깊이를 설정하고 .stp 파일을 생성합니다.

여기에 사진 설명 삽입

  • 로직 애널라이저는 샘플링 클럭이 샘플링 할 신호의 속도보다 높은지 확인합니다.
  • 샘플 깊이 :
    메모리 의 깊이입니다 . 캡처 된 데이터는 내부 메모리와 동일합니다. 연속 캡처에는 관찰 데이터가 필요합니다. 속도가 매우 빠르기 때문에 관찰 할 모든 데이터를 먼저 메모리에 저장 한 다음 메모리 JTAG 케이블을 통해 컴퓨터에 전송하여 실시간으로 표시합니다. 그렇지 않으면 JTAG 자체가 고속이 아니기 때문에 50MHz로 직접 샘플링 된 데이터를 전송할 수 없으므로이 저장 방법을 사용하여 속도를 줄입니다.

여기에 사진 설명 삽입

  • (6) 다음 순서로 로직 애널라이저를 실행합니다.

여기에 사진 설명 삽입

  • (7). 지속적인 실시간 탐지 데이터

여기에 사진 설명 삽입

  • (8) 실시간 데이터 형식을 선 그래프 표시로 설정하면 모양은 다음과 같습니다.

여기에 사진 설명 삽입
여기에 사진 설명 삽입


5. Verilog 코드

//----top---------------------------------------
module rom_top(

	input clk,
	input rst_n,
	output [7:0] q
);

	reg [7:0] addr;

rom uut(
		.address(addr),
		.clock(clk),
		.q(q)
	);

	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			addr <= 8'd0;
		else
			addr <= addr + 8'd1;
endmodule

//----testbench------------------------------
`timescale 1ns/1ns
`define clock_period 20

module tb_rom;
	reg clk;
	reg [7:0] addr;
	wire [7:0] q;

	rom uut(
		.address(addr),
		.clock(clk),
		.q(q)
	);
	integer i;
	initial clk = 1;
	always #(`clock_period/2) clk = ~clk;
	
	initial begin
		addr =8'd0;
		for(i=0;i<2550; i=i+1)begin
		#(`clock_period);
		addr = addr + 8'd1;
		end
		#(`clock_period*50);
		$stop;
	end
endmodule


6. Modelsim 시뮬레이션

  • 시뮬레이션 파형 디버깅
    신호를 마우스 오른쪽 버튼으로 클릭하고 형식-> 아날로그 (automatixc)를 선택한 다음 신호 값을 아날로그 값으로 변환합니다.여기에 사진 설명 삽입

  • 삼각형 파형

여기에 사진 설명 삽입

  • 사인파

여기에 사진 설명 삽입

4. FPGA 보드 레벨 검증

  • 파형은 삼각형에서 사인 모양으로 변환됩니다.

여기에 사진 설명 삽입

여기에 사진 설명 삽입


[참고] : 개인 학습 노트, 실수가 있으면 알려주세요. 공손 해요 ~~~


추천

출처blog.csdn.net/weixin_50722839/article/details/109960391