Выполнение операций записи и чтения с памятью в verilog? - PullRequest
0 голосов
/ 02 мая 2020

Невозможно прочитать из памяти

Здесь я выполняю первую операцию записи в память (сохранение в памяти), затем после выполнения операции чтения я взял temp1 для сохранения значения чтения из памяти, но Я получаю сообщение об ошибке "невозможно" прочитать из памяти

Я хочу вывод из temp1 после выполнения операции чтения в памяти

  module memory(clk,m_add,ead,ewr,mrd,temp1);

    input clk;
    input [7:0]m_add;
    input [7:0]ead;
    input ewr,mrd;

    output [7:0]temp1;

    reg [7:0] memr [0:255];
    reg [7:0]temp;

    always @(posedge clk)
    begin
      if(ewr==1)
      begin
        memr[ead] <= 8'b00001111;
      end 
      else if(mrd==1) 
      begin
        temp <= memr[m_add];
      end
    end

    assign temp1=temp;

  endmodule

  module tb();

    reg clk,mrd,ewr;
    reg [7:0]m_add;
    reg [7:0]ead;

    wire [7:0]temp1;

    memory m1(clk,m_add,ead,ewr,mrd,temp1);

    initial begin
      clk=0;
      #5 ewr=1;
      #5 ead=8'b00000001;
      #10 mrd=1;
      m_add=8'b00000001;

      #40 $stop;
    end

    always #5 clk=~clk;

  endmodule

Я хочу вывод из temp1

1 Ответ

1 голос
/ 02 мая 2020

В вашем тестовом стенде вы никогда не сделаете ewr сигнал 0. Поэтому вы никогда не передаете оператор if(ewr==1) в свой модуль. Вы можете переписать начальный блок своего тестового стенда как:

initial begin
    clk=0;
    #10 ewr=1; ead=8'b00000001;    // write operation
    #10 ewr=0;                     // bring ewr to 0
    #10 mrd=1; m_add=8'b00000001;  // read operation
    #10 mrd=0;                     // bring mrd to 0

    #40 $stop;
 end
...