2014-05-12 1 views
0

나는 8 개의 함수 인 ralu 내에서 alu를 만들 필요가 있지만 "ralu"에 대한 동작 모델을 시뮬레이트하려고하면 X (출력)와 Z (입력)가 모두 생깁니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?두 모듈을 어떻게 연결합니까?

module alu(
     input [3:0] op1, 
     input [3:0] op2, 
     input [2:0] func, 
     output reg[3:0] out 
    ); 
[email protected](*) 
    case(func) 
    3'b000: out=op1&op2; // functia AND 
    3'b001: out=op1|op2; // OR 
    3'b010: out=~(op1&op2);// NAND 
    3'b011: out=~(op1|op2); //NOR 
    3'b100: out=op1^op2; // XOR 
    3'b101: out=op1~^op2; //XNOR 
    3'b110: out=op1+op2; 
    3'b111: out=op1-op2; 
    endcase 
endmodule 

module ralu(
     input [3:0] in, 
     input [2:0] func, 
     input clk, 
     input load, 
     output [3:0] out 
    ); 
reg [3:0] op1; 
reg [3:0] op2; 
[email protected](posedge clk) 
    if(load) op2<=in; 
    else op1<=in; 
endmodule 
+0

Z의 아무것도를 운전하지 의미합니다 (I 만 ALU를 시뮬레이션 할 때 잘 작동합니다). 이것은 X를 설명 할 수 있습니다. 'alu'를'ralu' 또는 테스트 벤치에 연결하는 방법을 보여주지 않으므로 진단하기가 어렵습니다. – Greg

+0

내 문제는 실제로 그 중 두 개를 연결하는 방법을 모르겠다. – user3629371

+0

[googling] (https://www.google.com/#q=verilog%20instance%20module)을 시도하거나 언어 참조 SystemVerilog [IEEE 1800-2012] (http://standards.ieee.org/getieee/1800/download/1800-2012.pdf)와 같은 매뉴얼 (LRM) § 23. _ 모듈과 계층 구조 _ – Greg

답변

0

당신은 ralualu의 선언을 놓치고, 즉 : 입력에

alu myALU(
    .op1(op1), 
    .op2(op2), 
    .func(func), 
    .out(out) 
); 
+0

나는 이것이 바보라고 확신한다. 질문,하지만 정확히 내가 이것을 추가해야합니까? – user3629371

+0

'@ (*)'는 최소한 Verilog 2001이 지원됨을 보여주기 때문에'alu myALU (. *);'입니다. – Greg

+0

@ user3629371 :'ralu' 모듈 정의 안에 있습니다. – Qiu