2014-12-20 12 views
-2

4 연산을 수행하는 ALU를 op 코드의 값에 따라 설계했으며, 프로젝트 사양에 따라야하는 하위 모듈의 조건부 호출에 generate를 사용했습니다.하지만 한 작업에서 다른 작업으로 이동하기 위해 매개 변수의 값을 어떻게 변경합니까 ?? 여기Verilog에서 매개 변수의 값을 변경하는 방법

코드 : 모듈을 인스턴스화 할 때

module ALU (A4, B4,cin4); 
input [7:0] A4, B4; 
input cin4; 
//input [1:0] opc; 
wire [7:0]out4; 
wire cout4; 
parameter opc=0; 
generate  
    case (opc) 
     0: alu_add u1(out4,cout4,A4,B4,cin4); //calling an alu_add module 
     1: alu_sub u2(out4,cout4,A4,B4,cin4); 
     2: alu_comp u3_1(B4,out4); 
     3: alu_xor u4 (A4,B4,out4); 
    endcase 
endgenerate 

답변

0

당신은 매개 변수의 값을 대체 할 수 있습니다. 예를 들어 :

ALU #(.opc(1)) i1(); 
ALU #(.opc(2)) i2(); 

IEEE Std 1800-2012에 절 "이름으로 23.10.2.2 매개 변수 값 할당"을 참조하십시오.

0

매개 변수는 상수를위한 것이며 따라서 시뮬레이션 중에 변경할 수 없습니다. 매개 변수는 인스턴스화 중에 재정의 될 수 있습니다.

내게 우려되는 점은 질문에서 call이라는 용어를 사용하는 것입니다. 생성은 상수를 기반으로 하드웨어를 생성하는 데 사용됩니다. 즉, 동적으로 하드웨어를 작성하고 제거하지 않습니다.

u1 - u4는 실제 하드웨어를 나타내는 인스턴스이며, 분당 작성한 것은 한 가지 작업 만 수행 할 수있는 ALU입니다. 코드는 구성 가능하며 사용자에게 4 가지 중 하나를 선택할 수 있지만 일단 인스턴스화되면 고정됩니다.

모든 4 개 개의 조작으로 사용할 수있는 작업을 일반적인 일반 ALU을하려면 필요한 ALU 즉의 출력을 선택해야합니다

module ALU (
    input [7:0] A4, 
    input [7:0] B4, 
    input cin4, 
    input [1:0] opc; 
); 

wire [7:0]out4, out4_0, out4_1, out4_2, out4_3; 
wire cout4 ,cout4_0, cout4_1; 

alu_add u1(out4_0,cout4_0,A4,B4,cin4); //calling an alu_add module 
alu_sub u2(out4_1,cout4_1,A4,B4,cin4); 
alu_comp u3_1(B4,out4_2); 
alu_xor u4 (A4,B4,out4_3); 

    always @* begin 
    case (opc) 
     0: out4 = out4_0; 
     1: out4 = out4_1; 
     2: out4 = out4_2; 
     3: out4 = out4_3; 
    endcase 
    case (opc) 
     0: cout4 = cout4_0; 
     1: cout4 = cout4_1; 
     default: cout4 = 'b0; 
    endcase 
    end 
endmodule 
+0

감사합니다,하지만 난 상태 안에 서브 모듈을 인스턴스화 할 필요가있다. 이것은 프로젝트 명세에서 중요한 부분이다. 방법이 있습니까? –

+0

@FaithRashed 런타임 조건 (런타임에 변경되는 조건) 내부? 아니 Verilog 그것을 할 수 없습니다. – Morgan

관련 문제