Является ли $ readmem синтезируемым в Verilog? - PullRequest
9 голосов
/ 01 декабря 2010

Я пытаюсь реализовать микроконтроллер на ПЛИС, и мне нужно дать ему ПЗУ для своей программы. Если я использую $ readmemb, будет ли он правильно синтезирован в ПЗУ? Если нет, то каков стандартный способ сделать это?

1 Ответ

18 голосов
/ 22 декабря 2010

Я бы исправил ответ Джорджа, сказав, что от инструмента синтеза зависит, можно ли синтезировать $readmemb.

Рекомендованные Altera рекомендуемые стили кодирования HDL содержат пример 10-31 (стр. 10-38), в котором показано ПЗУ, выведенное из $readmemb (воспроизведено ниже):

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 руководстве пользователя Xilinx говорится, что:

Система $readmemb и $readmemh задачи могут быть использованы для инициализации блока воспоминания. Для получения дополнительной информации см .:

Инициализация ОЗУ из внешнего файла Примеры кодирования

Используйте $readmemb для двоичный код и $readmemh для шестнадцатеричного представление. Чтобы избежать возможного разница между XST и симулятором Xilinx® рекомендует вам использовать параметры индекса в этих системах задачи. Смотрите следующую кодировку Пример.

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

...