2017-10-10 2 views
3

아마도 쉽지만 Chisel에서 UInt() 값의 비트를 가져 오는 방법을 간단히 찾을 수는 없습니까?끌에서 UInt()의 크기를 가져 오는 방법은 무엇입니까?

내가 선언하여 크기를 설정하는 방법을 알고 :

val size = a.? 

또는 :

val size = width(a) 

val a = UInt(INPUT, 16) 

그러나 'A'의 크기를 얻기 위해 같은 속성이 있습니다

답변

3

몇 가지. 첫째, Chisel 2 의미론을 사용하는 것처럼 보입니다. 당신은 아마 당신이 빠른 대답은 당신이 좋아하는 폭을 얻을 수있다

val a = Input(UInt(16.W)) 

작성해야 의미 드릴링 3 의미를 사용한다 :

val theWidth = if(io.in0.widthKnown) io.in0.getWidth else -1 

또는 사용하여 일치

val theWidth = io.in0.widthOption match { 
    case Some(w) => w 
    case None => -1 // you decide what you want the unknown case to be. 
} 

당신 이제는 스칼라 변수의 너비 값이 입니다. 너비가 인 int 값은 if 원칙적으로 너비가 정의되지 않을 수 있으므로 일치 항목을 사용해야합니다.

더 긴 대답은 당신이 이것을하고 싶어하는 것에주의해야한다는 것입니다. theWidth 너비 추론이 사용되는 경우 회로 생성 시간에 계산됩니다 (너비에 대해 끌 유형을 묻는 경우 일반적으로 사용됩니다). 너비 추정은 회로 다음에 수행되기 때문에 볼 수 없습니다 정교하고 그것은 Firrtl 컴파일러에 의해 처리됩니다.

매개 변수를 알고 자하는 너비를 회로에 만들어서 widthOption 대신 사용할 수 있습니다. 뭔가.

class X(ioWidth: Int) extends Module { 
    val io = IO(new Bundle { 
    val in0 = Input(UInt(ioWidth.W)) 
    ... 
    }) 

    val reg = Reg(UInt((ioWidth * 2).W)) // using width parameter here. 
    ... 
} 
+0

감사합니다. chisel2는 오래된 프로젝트이기 때문에 사용하고 있습니다. 그러나 새로운 프로젝트에서 저는 지금 치즐 3을 사용하고 있습니다. – FabienM

관련 문제