我目前正在为我的暑期项目学习MyHDL。我很难理解其中的收益率表的作用。虽然MyHDL是基于python的,但它以一种特殊的方式使用了它的收益率语句。同样的链接是:http://www.myhdl.org/doc/current/manual/reference.html#myhdl.always
它声明: MyHDL生成器是标准的Python生成器,具有专用的产语句。在硬件描述语言中,等效语句称为灵敏度列表。在MyHDL生成器中,产额语句的一般格式是:产额子句,子句.当生成器执行statement语句时,它的执行将在这一点上暂停。同时,每个子句都是一个触发器对象,它定义了应该恢复生成器的条件。但是,不管子句的数量多少,每次调用once语句时,生成器都会完全恢复一次。这种情况发生在发生的第一个触发器上。
我无法理解它。谁能用简单的话解释一下吗?还是把我转到另一个消息来源?
如果你能帮忙我会很感激的。谢谢!
问候
发布于 2011-05-19 19:19:41
首先,也是最重要的一点:请记住,MyHDL实现是严格纯Python的。从这个意义上说,MyHDL和Python语句之间没有“区别”。
MyHDL确实是一种使用Python作为HDL的方法。部分地,这是通过在一个称为myhdl的纯Python包中实现一些特定于硬件设计的对象来完成的。例如,有一个myhdl.Simulation对象,它以适合硬件模拟的方式运行生成器。
另一部分是简单地以特定于硬件的方式解释某些Python特性。例如,硬件模块被建模为返回生成器的Python函数。另一个例子是,“产生”语句被解释为“等待”功能。
发布于 2011-05-19 05:27:14
MyHDL使用yield语句来传递条件列表,当其中一个条件是True时,这些条件将恢复生成器的执行。例如,当时钟从低到高(0到1)时,生成器可能产生条件clock.posedge --当时钟进行此转换时,生成器将被恢复。
为了模拟(粗略地)这是如何工作的,这里有一个Python生成器,当满足它的条件之一时(参数被3或7整除),这个生成器将被恢复:
def process():
j = 0
while True:
yield (lambda x: x % 3 == 0, lambda x: x % 7 == 0)
j += 1
print 'process j=', j
gen = process()
conds = next(gen)
for i in range(1, 11):
print 'i=', i
if any(cond(i) for cond in conds):
conds = next(gen)输出:
i= 1
i= 2
i= 3
process j= 1
i= 4
i= 5
i= 6
process j= 2
i= 7
process j= 3
i= 8
i= 9
process j= 4
i= 10Update -关于我使用的一些语法的更多细节:
我倾向于使用[next(gen, [default])]函数,因为它比调用gen.next()要灵活一些。例如,如果您传递default arg,当生成器耗尽时,它将返回default而不是StopIteration。
变量conds指向包含条件的元组。在本例中,它指向一个包含由元组返回的2 lambda匿名函数的process。
语法:
if any(cond(i) for cond in conds):
conds = next(gen)调用内建函数,传递给它一个在conds上循环并计算if cond(i) is True的生成器表达式。它是书写的缩写:
for cond in conds:
if cond(i):
conds = next(gen)
break发布于 2011-05-19 17:08:56
收益率语句用于创建生成器。反过来,这些发电机可以与仿真一起使用(.)对象在MyHDL中或具有转换器函数。换句话说,在MyHDL中,通过将描述硬件行为的所有生成器传递给模拟器来使用生成器。Simulation.run()函数将使用"next()“。
在MyHDL手册的RTL建模部分,http://www.myhdl.org/doc/current/manual/modeling.html#example是一些很好的例子,如何创建MyHDL生成器并在仿真中使用这些生成器。
https://stackoverflow.com/questions/6044930
复制相似问题