2016-12-07 1 views
2

내 설계에 Cocotb 검증 환경을 성공적으로 설정했으며 RTL (내 경우에는 VHDL)에서 작동하는 방식이 행복합니다.게이트 레벨 시뮬레이션에서 제네릭/매개 변수를 사용하는 코코트

내 디자인 제네릭을 사용하여, 나는 템플릿에 따라 (주로 RUN_TEST 및 모델의) 파이썬 코드의 여러 곳에서 이러한 제네릭의 값을 검색하고있다 :
my_generic = dut.GEN_NAME.value

게이트 레벨 시뮬레이션의 경우 불행히도 합성 설계에 제네릭이 더 이상 없기 때문에 gutnam.value가 존재하지 않습니다.

시뮬레이션 흐름 (Cocotb의 makefile)에서 매개 변수/제네릭 값을 가져 오는 방향으로 모두 이동해야합니까?

그렇다면 가장 깨끗한 방법은 무엇입니까? env 변수 사용?

에 구성을 전달

여러분의 도움과 조언에 감사드립니다 ...

+1

신디사이저의 출력이 RTL처럼 보이지 않는 경우가 종종 있습니다. 고전적인 방법은 랩퍼를 사용하는 것입니다. 인터페이스 (VHDL 케이스의 엔티티)가 원본 RTL처럼 보이는 더미 계층 구조에서 게이트 레벨 모델을 인스턴스화합니다. –

답변

2

을 (, BTW 난 ...이 측면은 시뮬레이터 의존하는 기대하지 않는 경우에도, 퀘 스타를 사용) 파이썬 Cocotb 코드가 가능할 수도 있지만 합성에 사용 된 동일한 값이 전달되도록해야하기 때문에 오류가 발생하기 쉽습니다.

또 다른 해결책은 내용 top_config.vhdl, 예를 들어, 별도의 파일에 저장되어있는 최상위 엔티티에 대한 구성 패키지를 가지고있다 : 여기에 정의

library ieee; 
use ieee.std_logic_1164.all; 

package top_config is 

    constant AA : positive := 5; 
    constant BB : integer := 10; 

end package top_config; 

상수, 다음의 기본 값으로 사용된다 최상위 엔티티의 제네릭 또는 최상위 엔티티에 직접 포함됩니다.

패키지

은 Cocotb 테스트 벤치 내에서 일부 파이썬 코드를 통해 지금 구문 분석 할 수 있습니다

from re import compile as re_compile 

constantRegExpStr = r"^\s*constant\s*" # keyword and spaces 
constantRegExpStr += r"(?P<name>\w+)"  # name fo constant 
constantRegExpStr += r"\s*:\s*"   # divider and spaces 
constantRegExpStr += r"(?P<type>\w+)"  # type name 
constantRegExpStr += r"\s*:=\s*"   # assignment and spaces 
constantRegExpStr += r"(?P<value>[0-9]+)" # value 
constantRegExpStr += r"\s*;"    # end of statement 

constantRegExp = re_compile(constantRegExpStr) 


with open("top_config.vhdl") as f: 
    for line in f.readlines(): 
     m = constantRegExp.match(line) 
     if m is not None: 
      print("constant '{0}' with value '{1}'".format(m.group('name'), m.group('value'))) 

대신 경기를 인쇄, 당신은 사전에 추가 또는 뭔가 다른 작업을 수행 할 수 있습니다.

+0

당신이 제공하는 솔루션은 의미가 있습니다. 그럼에도 불구하고 그것에 대해 질문이 있습니다. 내 최상위 수준에서 config 패키지를 사용하여 패키지의 가시성을 확보하는 것을 의미합니다. 나는 내가 디자인하는 톱 레벨이 디자인 최상위 레벨이 아니라면이 문제를 잠재적 인 문제로 예측한다. 이 경우 제 블록의 "상위 레벨"로 구동되는 제네릭 값과 제네릭을 구동 할 값에 대한 패키지의 내용간에 충돌이 없습니까? – user1654361

+0

이 설정 패키지는 합성에 사용하는 RTL 최상위 레벨에 포함되어야합니다. 게이트 레벨의 최상위 레벨은 패키지를 필요로하지 않으며, 어쨌든 generics가 없습니다. 아니면 뭔가 다른 것을 의미 했습니까? –

+0

죄송합니다, 제 설명이 명확하지 않았습니다. 내 질문/두려움은 내가 디자인 최고 수준 (예를 들어 계층 적 합성) 아래에서 일하고있는 경우입니다. 이 경우, 실제 최상위 레벨의 엘라브에서 발생할 수있는 잠재적 충돌이 두려워요. 즉 패키지와 인스턴스화에서 제공 한 제네릭 값 사이에서 제 블록을 인스턴스화합니다. 내 말을 들었 니? – user1654361

관련 문제