아마도 쉽지만 Chisel에서 UInt() 값의 비트를 가져 오는 방법을 간단히 찾을 수는 없습니까?끌에서 UInt()의 크기를 가져 오는 방법은 무엇입니까?
내가 선언하여 크기를 설정하는 방법을 알고 :
val size = a.?
또는 :
val size = width(a)
val a = UInt(INPUT, 16)
그러나 'A'의 크기를 얻기 위해 같은 속성이 있습니다
아마도 쉽지만 Chisel에서 UInt() 값의 비트를 가져 오는 방법을 간단히 찾을 수는 없습니까?끌에서 UInt()의 크기를 가져 오는 방법은 무엇입니까?
내가 선언하여 크기를 설정하는 방법을 알고 :
val size = a.?
또는 :
val size = width(a)
val a = UInt(INPUT, 16)
그러나 'A'의 크기를 얻기 위해 같은 속성이 있습니다
몇 가지. 첫째, 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.
...
}
감사합니다. chisel2는 오래된 프로젝트이기 때문에 사용하고 있습니다. 그러나 새로운 프로젝트에서 저는 지금 치즐 3을 사용하고 있습니다. – FabienM