Poniżej znajduje się mój ROM i mam wartości binarne w pliku .txt, ale nie jestem pewien, jak zainicjować ROM z tymi wartościami. Zrobiłem kilka badań, a wygląda na to, że plik Wszelkie pomocy / wyjaśnienie zostanie docenione!

module dual_port_rom (clk, addr_1, addr_2, data_1, data_2);
        
    input clk;
    input [7:0] addr_1;
    input [7:0] addr_2; //check address width!!! and also see how to fill -_-
    output [7:0] data_1;
    output [7:0] data_2;
    reg [7:0] rom [5122:0];
    reg [7:0] read_a1;
    reg [7:0] read_a2;
        
    always @(posedge clk) begin
        read_a1 <= addr_1;
        read_a2 <= addr_2;
    end
    
    assign data_1 = rom[read_a1];
    assign data_2 = rom[read_a2];
    
endmodule
0
tash7827 20 lipiec 2020, 18:13

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć $readmemb lub $readmemh, aby zainicjować zawartość ROM w Quartus. Spójrz na sekcję 1.4.2, Przykład 20 W zalecanym stylu kodowania HDL dla sugerowanego Verilog do zwalczania podwójnego przenoszonego ROM: https://www.intel.com/content/dam/www/programmable/us/pl/pdfs/ Literatura / UG / UG-QPP-Design-Recomance.pdf; W celach informacyjnych, w jaki sposób Twój kod będzie wyglądał:

module dual_port_rom (clk, addr_1, addr_2, data_1, data_2);

  input clk;
  input [7:0] addr_1;
  input [7:0] addr_2;
  output reg [7:0] data_1; // Can declare these as reg type directly rather than have an intermediate
  output reg [7:0] data_2;
  reg [7:0] rom [5122:0];

  // From the example, initialize the ROM with $readmemb; which is compatible with simulation making trying out the ROM easier
  initial begin
    $readmemb("init_file.txt", rom);
  end

  always @(posedge clk) begin
    data_1 <= rom[addr_1]; // Following the style from the example, the data should be put into a register once read from the ROM rather than the address. This shouldnt effect the timing of your system since you were putting the address into a register though
    data_2 <= rom[addr_2];
  end
endmodule

Upewnij się, że twój plik podąża za odpowiednim formatem dla wszystkich funkcji, możesz dowiedzieć się więcej tutaj: Jak zainicjować zawartość wywnioskowania Blokuj RAM (Bram) w Verilog

1
Unn 20 lipiec 2020, 15:33