2011-11-25 6 views
2

내가 gtkwave를 사용하여 memory을 볼 수 없습니다 :메모리 파형을 보는 방법은 무엇입니까?

module internal_memory(
     output [31:0] hrdata, 
     input mem_enable, 
     input [31:0] haddr, 
     input [31:0] hwdata, 
     input hwrite, 
     input hreset, 
     input hclk 
    ); 
     reg [31:0] memory [0:1023]; // <-------------- can't find its waveform 
     reg [31:0] internal_hrdata; 

     always @(posedge hclk, hreset) begin 
      if (!hreset) begin 
       internal_hrdata <= 32'h0000_0000; 
      end 
      else begin 
       if (mem_enable) begin 
        if (hwrite) begin 
         memory[haddr] <= hwdata; 
        end 
        else begin 
         internal_hrdata <= memory[haddr]; 
        end 
       end 
      end 
     end 

     assign hrdata = internal_hrdata; 

    endmodule 

당신이 memory의 파형을 볼 수 무엇을 제안 할 수 있습니다?

또는 gtkwave 또는 임의의 .vcd/waveform 뷰어에 2 차원 배열을 표시하는 방법은 무엇입니까?

답변

3

먼저 메모리를 VCD 파일에 덤프해야합니다. 내가 익숙한 2 개의 시뮬레이터에는 메모리를 VCD에 덤핑하기위한 추가 시뮬레이션 옵션이 필요합니다. 아마 너도 마찬가지야.

+1

봐, 그럼 당신은 시뮬레이션하고있는 최고 수준의 노드를 덤프. –

+0

나는 icarus verilog를 사용하고 있습니다. 음, 이걸 알아 내야 할 것 같아요. 어쨌든 대답 주셔서 감사합니다. – e19293001

+0

Icarus Verilog의 문서를 읽었습니다. 슬프게도 도움이되지 않았습니다. – e19293001

8

나는 이것이 오래된 질문이라는 것을 알고 있지만, 최근 코스 최종 프로젝트를 위해 Icarus/GTKWave로 시뮬레이션 된 메모리를보고이 질문을 읽는 모든 이에 게 답변하고 싶습니다. 필자는 Icarus Verilog 이식성 노트 (출처 참조)에 대한 답을 찾을 수있었습니다.

module top; 
    reg [7:0] array [2:0]; 
    initial begin 
    $dumpvars(0, array[0], array[1]); 
    ... 
    end 
endmodule 

당신은 for 루프와 배열에있는 모든 셀을 덤핑 자동화 할 수 있습니다 :

이카루스, 당신은 당신이에서 명시 적으로보고 싶은 각 배열 단어 (메모리 위치)를 덤프 할 필요가

module top; 
    integer idx; // need integer for loop 
    reg [7:0] array [2:0]; 
    initial begin 
    for (idx = 0; idx < 2; idx = idx + 1) $dumpvars(0, array[idx]); 
    ... 
    end 
endmodule 

출처 : http://iverilog.wikia.com/wiki/Verilog_Portability_Notes (덤핑 배열 단어) "VCD"에 대한 시뮬레이터 문서에서

관련 문제