2011-04-19 2 views
1

내 설계 코드 블록 및 testbench 컴파일,하지만 내가 올바른 출력을 얻지 못한다면 시뮬레이션 할 때. 아무도 내 코드에서 내가 잘못 될 수 있다고 말할 수 있습니까? 여기 Verilog에서 시뮬레이션 오류

는 테스트 벤치 코드입니다 :

module testbench; 
reg [511:0]FROM_LS; 
reg CLK; 
reg [63:0]TO_IF_ID; 

initial 
begin 
    CLK= 0; 
    TO_IF_ID[63:0]=63'b0; 
    FROM_LS[511:480]= 32'b00011_00000_00100_01100_11100_10111_01; 
    FROM_LS[479:448]=32'b00_11000_00100_01111_11111_00011_10000; 
end 
always 
begin 
    #10 CLK= ~ CLK; 
    //FROM_LS[511:448]= ~ FROM_LS[511:448]; 
    $display("FROM_LS= %b", FROM_LS); 
    $display("TO_IF_ID= %b", TO_IF_ID); 
end 
endmodule 

을 여기에 디자인 블록에 대한 코드입니다

module inst_line_buffer(input wire [511:0]from_LS, 
        input wire clk, 
        output reg [63:0]to_if_id); 
parameter mem_size=16; 
integer k;  
reg [31:0] ilb[0:mem_size-1]; 

initial 
begin 
    for (k = 0; k < mem_size ; k = k + 1) 
    begin 
    ilb[k] = 32'b00; 
    //$display ("ilb= %b",ilb[k]); 
    end 
end 
always @(posedge clk) 
    begin 
    ilb[0]= from_LS[511:480]; 
    ilb[1]= from_LS[479:448]; 
    ilb[2]= from_LS[447:416]; 
    ilb[3]= from_LS[415:384]; 
    ilb[4]= from_LS[383:352]; 
    ilb[5]= from_LS[351:320]; 
    ilb[6]= from_LS[319:288]; 
    ilb[7]= from_LS[287:256]; 
    ilb[8]= from_LS[255:224]; 
    ilb[9]= from_LS[223:192]; 
    ilb[10]= from_LS[191:160]; 
    ilb[11]= from_LS[159:128]; 
    ilb[12]= from_LS[127:96]; 
    ilb[13]= from_LS[95:64]; 
    ilb[14]= from_LS[63:32]; 
    ilb[15]= from_LS[31:00]; 
    to_if_id [63:32]= ilb[0]; 
    to_if_id [31:0]= ilb[1]; 
    $display("ilb= %b", ilb[1]); 
    end 
endmodule 

내가 TO_IF_ID의 값이 0001100000001000110011100101110100110000010001111111110001110000 될하지만 난 것을 기대 해요; 모두 0 이군. 누구든지 나를 도울 수 있습니까?

+1

제공된 코드에서 inst_line_buffer는 인스턴스화되지 않습니다. – Andy

+0

@andy : 위 코드에서 inst_line_buffer를 다음과 같이 인스턴스화했습니다. inst_line_buffer ilb (FROM_LS, CLK, TO_IF_ID); 오류가 발생했습니다 : 오류 : (vsim-3053) C : /Modeltech_pe_edu_10.0a/examples/tstbnch.v (5) : 잘못된 출력 또는 입력 포트 "포트 'to_if_id'에 대한 연결. # Region :/testbench/ilb # 디자인을로드하는 중 오류가 발생했습니다. – kinirashmi

+0

은 내 답변에서 한 것처럼 인스턴스화하고 reg/wire에 대한 내 의견에주의를 기울이십시오. – toolic

답변

1

testbench 모듈에서 시뮬레이션을 실행하면 initial 블록에서 시간 0에 한 번만 값을 할당했기 때문에 TO_IF_ID은 항상 0입니다. 값을 변경하려면 어떻게 든 구동해야합니다.

Andy는 의견에서 지적했듯이, 아마도 inst_line_buffer 모듈을 테스트 벤치에서 인스턴스화하려고했을 것입니다. Verilog는 당신을 위해 마술처럼 이것을하지 않습니다. 그러나 TO_IF_IDreg 대신 wire으로 지정하고 initial 블록에서 제거해야합니다.

module testbench; 
reg [511:0]FROM_LS; 
reg CLK; 
wire [63:0]TO_IF_ID; 

inst_line_buffer inst_line_buffer (
    .from_LS (FROM_LS), 
    .clk  (CLK), 
    .to_if_id (TO_IF_ID) 
); 

initial begin 
    CLK= 0; 
    FROM_LS[511:480]= 32'b00011_00000_00100_01100_11100_10111_01; 
    FROM_LS[479:448]=32'b00_11000_00100_01111_11111_00011_10000; 
    #500 $finish; 
end 
always 
begin 
    #10 CLK= ~ CLK; 
    //FROM_LS[511:448]= ~ FROM_LS[511:448]; 
    $display("FROM_LS= %b", FROM_LS); 
    $display("TO_IF_ID= %b", TO_IF_ID); 
end 
endmodule 
+1

도와 주셔서 감사합니다. – kinirashmi

관련 문제