2010-12-01 8 views
8

나는 FPGA에 마이크로 컨트롤러를 구현하려고하는데, 그 프로그램을 위해 ROM을 줄 필요가있다. $ readmemb을 사용하면 올바르게 ROM에 합성됩니까? 그렇지 않다면 표준 방법은 무엇입니까?

답변

15

$readmemb이 합성 가능한지 여부는 합성 도구에 달려 있다고 George의 답을 수정합니다. (아래 재생) $readmemb 추론 롬을 보여

Altera의 Recommended HDL Coding Styles 가이드는 예 10-31를 포함한다 (페이지 10-38) : 마찬가지로

module dual_port_rom (
    input [(addr_width-1):0] addr_a, addr_b, 
    input clk, 
    output reg [(data_width-1):0] q_a, q_b 
); 
    parameter data_width = 8; 
    parameter addr_width = 8; 
    reg [data_width-1:0] rom[2**addr_width-1:0]; 
    initial // Read the memory contents in the file 
      // dual_port_rom_init.txt. 
    begin 
     $readmemb("dual_port_rom_init.txt", rom); 
    end 
    always @ (posedge clk) 
    begin 
     q_a <= rom[addr_a]; 
     q_b <= rom[addr_b]; 
    end 
endmodule 

자일링스의 XST User Guide 상태 즉 :

$readmemb$readmemh 시스템 작업은 블록 메모리를 초기화하는 데 사용할 수 있습니다. 자세한 내용은 다음을 참조하십시오

진수 표현 이진 및 $readmemh에 대한 코딩 예

외부 파일에서 사용 $readmemb을 RAM을 초기화. XST와 시뮬레이터 동작간에 차이가 발생할 수 있으므로 작업에서 인덱스 매개 변수를 사용하는 것이 좋습니다. 다음 코드 예제를 참조하십시오.

$readmemb("rams_20c.data",ram, 0, 7);

+1

mrkj의 대답은 나보다 훨씬 낫다. 나는 그것을 제거했다. – George