所以我要在代码中的某行周围添加代码块,但问题是当代码块更改范围时,要添加此代码,而从程序的其他部分看不到它声明的变量
问题是在这种情况下
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)}
不更改范围
答案 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