inflearn logo
강의

講義

知識共有

デジタル回路設計実務:Computer ArchitectureとSoCプロトコルDigital IP設計

コンピュータ構造のメモリ階層構造とVerilogによるSRAMのモデリング

SRAM 강의 TB 작성 후 waveform 확인시에 dout이 모두 don't care 처리 관련 질문드립니다.

解決済みの質問

103

akims

投稿した質問数 1

0

SRAM 기본 모델링 코드 작성후, RTL view통해서 확인시에 dout 값이 모두 xxxxxx로 처리가 되는데, TB 작성에도 문제가 없어보여 고쳐야할 부분이 있는지 문의드립니다.

 

image.png

 

 

image.png

 

컴퓨터-구조 verilog-hdl fpga 임베디드 amba

回答 5

0

samcoach

  • @(negedge clk) 에서 입력 세팅 → posedge clk에서 안정적으로 Write/Read 반영.

  • initial dout = 0;sram_model에 넣어 첫 출력이 x가 아니라 0으로 시작.

  • 쓰기 후 읽기에서 dout이 제대로 메모리 값('h10 + i)을 출력하게 됨.

    아래 코드로 확인해보시겠어요?

    module tb_sram;

parameter DEPTH = 8;

parameter WIDTH = 32;

parameter DEPTH_LOG = $clog2(DEPTH);

reg clk;

reg cs, we;

reg [DEPTH_LOG-1:0] ad;

reg [WIDTH-1:0] din;

wire [WIDTH-1:0] dout;

// 클럭 생성

initial begin

clk = 0;

forever #5 clk = ~clk; // 10ns period

end

// Stimulus

initial begin

cs = 0; we = 0; ad = 0; din = 0;

// --- Write Phase ---

for (int i = 0; i < DEPTH; i++) begin

@(negedge clk); // 클럭 하강 에지에서 세팅

cs <= 1;

we <= 1;

ad <= i;

din <= 'h10 + i;

end

// --- Read Phase ---

for (int i = 0; i < DEPTH; i++) begin

@(negedge clk); // 마찬가지로 하강 에지에서 세팅

cs <= 1;

we <= 0;

ad <= i;

end

// 시뮬레이션 종료

repeat (3) @(posedge clk);

$finish;

end

// DUT 연결

sram_model #(DEPTH, WIDTH) u_sram (

.clk (clk),

.cs (cs),

.we (we),

.ad (ad),

.din (din),

.dout(dout)

);

endmodule

 

0

akims

감사합니다. 말씀주신대로 수정을 하여도 동일하게 dout은 don't care처리가 발생하고 있습니다. 다시 한번 코드 점검을 했는데 빠진게 없는듯하여, 혹시 바쁘시겠지만 빠진 부분이 있는지 확인 한번 부탁드려도 될까요?

 

0

samcoach

input [DEPTH-1:0] ad 여기가 잘못되어있는듯한데,

input [DEPTH_LOG-1:0] ad

이게 우리가 의도하는것이니 이걸로 해보시겠어요?

0

akims

1) SRAM RTL Code

 

module sram_model #(

parameter DEPTH=8,

parameter WIDTH=32,

parameter DEPTH_log=$clog2(DEPTH)

)(

input clk,

input cs,we,

input [DEPTH-1:0] ad,

input [WIDTH-1:0] din,

output reg [WIDTH-1:0] dout

);

reg [WIDTH-1:0] mem[DEPTH-1:0];

initial begin /*초기화 시키기 위함*/

for( int i=0; i<DEPTH; i++) mem[i]=0;

end

always @(posedge clk)

if (cs&we) mem[ad] <=din;

else if (cs) dout<=mem[ad];

endmodule

 

 

2) tb_SRAM

module sram_model #(

parameter DEPTH=8,

parameter WIDTH=32,

parameter DEPTH_log=$clog2(DEPTH)

)(

input clk,

input cs,we,

input [DEPTH-1:0] ad,

input [WIDTH-1:0] din,

output reg [WIDTH-1:0] dout

);

reg [WIDTH-1:0] mem[DEPTH-1:0];

initial begin /*초기화 시키기 위함*/

for( int i=0; i<DEPTH; i++) mem[i]=0;

end

always @(posedge clk)

if (cs&we) mem[ad] <=din;

else if (cs) dout<=mem[ad];

endmodule

 

바쁘신와중에 확인해주셔서 감사드립니다.

 

0

samcoach

안녕하세요, 답변 남겨드립니다.

SRAM RTL 코드와 testbench 코드 모두 텍스트로 붙여넣어서 올려주실 수 있나요?

그대로 따라하셨겠지만, 혹시 잘못된 부분이 있나 확인해보고자 합니다.

강의 만료일 연장 신청

0

28

2

강의자료 pdf파일

0

87

2

수강기간변경

0

72

2

프로그램 종류

0

87

1

안녕하세요 강의 도중 궁금한 점 있어서 질문드립니다!

0

82

1

수강기간 변경관련

0

61

2

수강기간 만료

0

69

2

수강 연장 문의

0

68

2

I2C SCL_Synched, SDA_Synched 질문

0

81

1

no data path질문

0

101

3

SRAM 강의 modelsim 시뮬레이션에서 inner 메모리를 Objects 리스트에서 찾으려고 하는데 안보입니다.

0

86

2

DataMem 스펙 질문

0

51

1

Hamming Code 질문

0

63

1

W_CRC 값 질문하기

0

58

1

Precharge에 대한 질문

0

163

1

tpsram spec 질문

0

62

2

학습 관련 질문 있습니다!

0

85

2

[과제7] AXI 통신 프로토콜 설계하기 문의드립니다

0

92

2

SRAM Interface Behavior(Diagram) 질문

0

133

3

vivado와 quartus 프로그램의 systhesis 결과 차이에 대해 궁금한 점 있습니다

0

182

2

tool 질문

0

91

2

CDC 메타스태빌리티 질문

0

64

1

SRAM module RTL viewer 이상

0

93

2

slave와 master 시뮬레이션

0

65

2