凿子和何时块中的声明和变量作用域

时间:2019-06-02 12:32:06

标签: chisel rocket-chip

所以我要在代码中的某行周围添加代码块,但问题是当代码块更改范围时,要添加此代码,而从程序的其他部分看不到它声明的变量

问题是在这种情况下

  val (_, _, d_done, refill_cnt) = edge_out.count(tl_out.d)}

因此,他们是一种在when块内添加此行而不更改范围的方法

要点是在when块外声明它,然后分配值需要我知道它的类型 加上很多变数会变得很困难

我想要达到的目标

when (refill_addr <80000000.U){
 val (_, _, d_done, refill_cnt) = edge_out.count(tl_out.d)}

不更改范围

1 个答案:

答案 0 :(得分:1)

您好,谢谢您对Chisel和火箭芯片的兴趣!

您想要做的事情在Scala中是不可能的。这超出了Chisel作为嵌入式DSL的范围(双关语意)。

从根本上来说,目前尚不清楚是否有意义。 when块表示在该条件下发生连接。如果您能够编写类似的内容,那么当条件为false时,连接值将是什么?例如:

public class LineDraw : MonoBehaviour
{
    private LineRenderer lineRender;
    private float counter;
    private float dist;

    public Transform origin;
    public Transform destination;

    public float lineDrawSpeed = 10f;

    [System.Obsolete]
    void Start()
    {
        lineRender = GetComponent<LineRenderer>();
        lineRender.SetWidth(.01f, .01f);
    }

    // Update is called once per frame
    void Update()
    {
        // lineRender.useWorldSpace = true;

        lineRender.SetPosition(0, origin.position);
        dist = Vector3.Distance(origin.position, destination.position);
        if (counter < dist)
        {
            counter += .1f / lineDrawSpeed;
            float x = Mathf.Lerp(0, dist, counter);

            Vector3 pointA = origin.position;
            Vector3 pointB = destination.position;

            Vector3 pointAlongLine = Vector3.Normalize(pointB - pointA) + pointA;

            lineRender.SetPosition(1, pointAlongLine); 
        }
    }
}

when (value > 100.U) { val wire = 123.U } io.out := wire wire应该获得什么价值?

获得不知道类型的好处的另一种方法可能是使用带有相反条件的when条件,并提供所需的任何其他值

value <= 100.U