2010-12-01 844 views
8

我正試圖在FPGA上實現一個微控制器,並且我需要爲它的程序提供一個ROM。如果我使用$ readmemb,是否會正確合成到ROM?如果不是,那麼標準的做法是什麼?

回答

15

我會修改喬治的答案,說它取決於綜合工具$readmemb是否可綜合。

Altera的Recommended HDL Coding Styles指南包括例如10-31(10-38頁),這表明從$readmemb推斷一個ROM(下面再現):

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 

同樣,Xilinx公司的XST User Guide指出:

$readmemb$readmemh系統 任務可用於初始化塊 回憶。欲瞭解更多信息,請參見:

初始化RAM從外部文件 代碼示例

使用$readmemb爲 二進制和$readmemh十六進制 表示。爲避免XST與模擬器 行爲之間可能的差異,賽靈思建議您使用 這些系統中的索引參數 任務。請參閱以下編碼 示例。

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

+1

mrkj的答案是比我好得多。我已經刪除它。 – George 2011-02-15 11:31:50