我正在设计一个VHDL视频像素数据处理流水线,涉及多个步骤,包括乘法和除法. 我希望保持信号同步,以便我可以例如保持同步信号并在管道末端正确输出它以及经过几个处理阶段的操纵像
我希望保持信号同步,以便我可以例如保持同步信号并在管道末端正确输出它以及经过几个处理阶段的操纵像素数据.
我假设我想使用移位寄存器或某些东西来按正确的周期数来延迟信号,以便输出正确,但我正在寻找关于设计这种方法的好方法的建议,特别是作为不同信号的流水线级数随着我的设计发展,可能会有所不同.
好问题.我不知道一个完整的解决方案,但这里有两个部分策略……
互连组件……如果组件可以导出其值为其管道深度的泛型,那将是非常好的.不幸的是你不能,并且将端口专用于此似乎很愚蠢(虽然它可能是可行的;因为它将是一个整数常量,它将在合成中消失)
如果做不到这一点,请传入一个指示此模块预算的通用.如果无法满足预算,则在模块内部断言(严重性为FAILURE)…(此断言可在合成时检查,至少Xilinx XST处理类似的断言)
使预算成为一个硬数字,如果预算太大,则断言如果不等于实际管道深度,或者在模块内部添加管道阶段,并且仅在预算太小时断言.
这样就可以连接可预测的模块,顶级可以执行流水线算法来平衡事物(例如将计算的常量值传递给可编程的延迟线)
在一个组件中…我使用一个进程,寄存器表示为内部信号,其名称反映其管道阶段,exponent_1,exponent_2,exponent_3等.在此过程中,第一部分描述第一个周期的所有操作,第二部分描述第二个周期,依此类推.通常,“更容易”的路径可以逐字复制到下一个管道阶段,只是为了将它们与关键路径同步.这个过程相当有条理,易于维护.
我可能会将32位乘法分解为16 * 16块并管道部分产品添加.这个控件给出了USED给出比XST更好的结果……
我知道有些人更喜欢一个过程中的变量,并且我将它们用于管道阶段的中间结果,但是使用信号我可以按其自然顺序描述管道(由于推迟分配),而使用变量,我将不得不描述它向后!