내가 MEM하는 구조 읽을 포트를 구현하기 위해 노력하고있어 지정된 디폴트를 피하기하는 방법 :드릴링 : 오류를 WIRE
나는 조합val tag_read = TagType()
대신 순차적
의 사용class TagType() extends Bundle()
{
import Consts._
val valid = Bool()
val dirty = Bool()
val tag = UInt(width = ADDR_MSB - ADDR_LSB + 1)
}
object TagType
{
def apply() = new TagType()
}
val tag_read = TagType()
//val tag_read = Reg(TagType())
val tag_read_port = UInt(width = TagType().getWidth)
val tag_ram = Mem(UInt(width = TagType().getWidth), num_lines , seqRead = false)
when (tag_read) {
tag_read_port := tag_ram(line_no)
tag_read.toBits := tag_read_port
}
val tag_read = Reg(TagType())
오류가 발생합니다.
Cache.scala:39: error: NO DEFAULT SPECIFIED FOR WIRE: /*? in class cache.Cache*/ Chisel.Bool(width=1, connect to 0 inputs:()) in component class cache.Cache in class cache.TagType
Cache.scala:40: error: NO DEFAULT SPECIFIED FOR WIRE: /*? in class cache.Cache*/ Chisel.Bool(width=1, connect to 0 inputs:()) in component class cache.Cache in class cache.TagType
Cache.scala:41: error: NO DEFAULT SPECIFIED FOR WIRE: /*? in class cache.Cache*/ Chisel.UInt(width=28, connect to 0 inputs:()) in component class cache.Cache in class cache.TagType
이 오류 메시지의 의미는 무엇입니까?
두 번째 질문 :
이 가능, 라 SystemVerilog를 구조화 된 빨간색 포트를 가지고있다 즉 읽기 직접
tag_read.toBites := tag_ram(line_no)
대신
tag_read_port := tag_ram(line_no)
tag_read.toBits := tag_read_port
감사의!
의견을 보내 주셔서 감사합니다. 물론, 그것은 (...) 조건 일 때 실제로 유형 (...)에 대한 Bool 변수였습니다. 기본값을 초기화하기 위해 동반자 객체의 apply 메소드를 사용하는 것이 편리하다는 것을 알았습니다. –
작은 추가 라인 39/40/41은 TagType 클래스의 유효하고 더러운 태그 필드에 해당합니다. 감사합니다! –
개체의 apply 메서드를 사용하여 기본값을 초기화하는 것이 좋습니다. 그러나이 특별한 경우 Reg (TagType())는 TagType 유형의 레지스터를 만드는 반면 Reg (init = TagType))는 재설정 후 적절한 초기 값을 갖는 TagType 유형의 레지스터를 작성합니다. 나는이 객체 적용 기법을 사용하지 않는다는 것을 인정한다. 위의 구문은 틀릴 수도 있지만, 그 아이디어는 충분히 명확하다. – Chris