VHDL反转if以减少嵌套
对于C#,通常建议您反转VHDL反转if以减少嵌套,vhdl,readability,Vhdl,Readability,对于C#,通常建议您反转if语句以减少嵌套的if-语句的数量 例如,它建议使用以下代码: private void Foo() { 如果(某些条件) { //一些行动 } } 可转换为: private void Foo() { 如果(!someCondition)返回; //一些行动 } 有没有类似的方法可以用VHDL代码实现这一点?即使有可能,是否有充分的理由在VHDL中避免这种编码风格 我想知道是否有可能在VHDL中实现类似的功能 进程(时钟) 开始 如果(上升沿(时钟)),则 --一
if
语句以减少嵌套的if
-语句的数量
例如,它建议使用以下代码:
private void Foo()
{
如果(某些条件)
{
//一些行动
}
}
可转换为:
private void Foo()
{
如果(!someCondition)返回;
//一些行动
}
有没有类似的方法可以用VHDL代码实现这一点?即使有可能,是否有充分的理由在VHDL中避免这种编码风格
我想知道是否有可能在VHDL中实现类似的功能
进程(时钟)
开始
如果(上升沿(时钟)),则
--一些行动
如果结束;
结束过程;
变成
进程(时钟)
开始
如果(非上升沿(时钟)),则
返回;
如果结束;
--一些行动
结束过程;
您建议的策略称为提前返回,因为您提前从函数返回,
在到达终点之前。它可以在VHDL中完成,并且与其他语言一样有用,但缺点是它只能在子程序中使用。您不能从流程中“返回”
理论上,您可以将代码从流程内部移动到过程中,但这无助于实现您想要的目标。我建议您阅读第6.3节-并发过程调用语句
从Ashenden的设计师指南到VHDL,了解细节。简言之,在过程中如何使用wait语句有很多限制。当然,VHDL进程不会提前返回,因为您不会从进程返回 除了从子程序(过程或函数)提前返回外,还有类似的方法来帮助构造循环:
退出(终止循环)和下一步(终止当前迭代)
这些可以嵌入到示例中的if
语句中,但有一种更方便、可读的形式:
loop
...
exit when A = '1';
...
next when B = '1';
...
end loop;
重点是什么?(Resharper是否描述了您为什么要这样做?)
我对在VHDL语言中实现这一点的想法:
在可合成代码中,很有可能——无论你用什么诡计“优化”你的逻辑——如果结果是相同的功能,合成器(几乎)总是(以我的经验)找到逻辑等价性,这意味着对于相同的函数,它最终会得到与直接编写时相同的最佳逻辑。(欢迎反例!)
在tetsbench代码中,我想您可能可以使用相同的循环
从代码可读性的角度来看:可能会有好处,但如果您有那么多嵌套的if
s,那么您的整体结构可能需要重新思考…不要这样做
非上升沿(时钟)
不保证IEEE可合成逻辑标准可合成。如果你知道有什么工具可以合成这个,我很想知道
此外,您不会得到任何好处,因为(正如其他回复者所说,return
语句在流程中无效
试试看:尽管这种风格行不通,但这是一个合理的建议。
如果您想了解非传统的代码编写方法,最好的方法是编写、模拟和综合代码。通过实验,您将学到很多,并最终成为团队中最聪明的设计师。您不需要在VHDL中的if
语句中添加额外的括号。您可以将if(不上升沿(时钟))然后
转换为可读性更强的if(不上升沿(时钟))然后
。Resharper提出了提高可读性的建议。本文对此进行了讨论