2017-03-08 4 views
0

열거 형에서 비트 너비는 어떻게 유지합니까? 시스템 베로 로그의 열거 형에서 비트 너비 유지

다음 코드에서 예를 들어 : - 10

나는 또한 시도 내가 인쇄 인쇄 2 첫 번째 명령문으로 얻을 수있는 방법

typedef enum bit[2:0] { 
b1=2'b10, 
b2=3'b100 
}b; 


{// regular stuff module, initial begin etc.. 
b a1,a2; 
a1=b1; 
a2=b2; 

$display("b=%0d %b",$bits(a1),a1); **// prints 3, 010** 
$display("b=%0d %b",$bits(a2),a2); **// prints 3, 100** 
} 

는 다음 -

typedef enum { 

w1=2, 
w2=3 
}w; 

w wa1,wa2; 
int len,len2; 
bit [3:0] bb; 
{ 
bb=a1; 
len=w1; 
$display("b=%0d %b",$bits(bb[len:0]),wa1); 
enter code here 
bb=a2; len=w2; 
$display("b=%0d %b",$bits(bb[len:0]),wa2); 
} 

하는 문제을 (를) 컴파일했습니다.

변수/열거 형의 비트 너비를 보존하는 다른 기술도 환영합니다.

-------------- 원래의 질문에 후 편집은 -----------------

넣어 간단한 방법을 게시 이 질문은 ..

내가 비트 [31 : 0]가 있다고 가정하자.

나는 다음과 같은 기능을 달성해야합니다 -

function bit[] get(bit[31:0] a, int size) 
    return a[(size-1):0]; 

덕분에,

+1

은'enum'이 목적에 사용할 수 없습니다. –

답변

0

나는 당신이 당신이 enum에서 원하는 것을 할 수 있다고 생각하지 않습니다.

typedef enum [2:0] {...} b;을 쓰면 너비가 3 인 b이라는 유형이 정의됩니다.이 유형의 모든 값은 (반드시) 너비가 3입니다.이 문제를 생각하는 좋은 방법은

module mymod(input b myB, output o); 
... 
endmodule 

얼마나 넓은 myB해야한다, 예를 들어, 입력으로 b을? mymodb 유형의 인수를 허용하려면 충분히 커야합니다. 예를 들어,이 모듈을 b1 또는 b2 중 하나를 전달하고 작동하게하려면 그러나 모듈의 입력은 시뮬레이션/하드웨어가 실행될 때 동적으로 크기를 변경할 수 없습니다.

localparam b1 = 2'b10; 
localparam b2 = 3'b100; 

그러나 당신이 때 당신은 여전히 ​​비슷한 문제로 실행하겠습니다 :

그냥 독립적 인 폭이 일부라는 이름의 값을 가지고 싶다면, 당신은 예를 들어, localparam 사용하여 시도 할 수 있습니다, 당신은 쓸 수 있습니다 이것을 변수 a1a2에 할당하십시오. 이 시점에서, 그것은 단지 a1a2의 넓이의 문제 일뿐입니다.

0

글쎄, 당신은 enum을 사용하여 주장하는 경우 암시 적으로이를 달성 할 수 있습니다 : 그것은 모든 열거 값에 대해 동일한 비트 폭을 제공하기 때문에 내가 생각 $display("b=%0d %0b", $clog2(a1+1), a1); **// prints 2, 10** $display("b=%0d %0b", $clog2(a2+1), a2); **// prints 3, 100**