crazybird

【原创】vivado中端口参数计算之expr命令

1
阅读(3094)

    为了后面自定义IP封装的讲解,在本博文中稍微提一下TCL命令expr的运用。该命令expr是TCL中的内部命令,用于计算表达式,计算出来的结果既可用于定义端口位宽,也可用于其他功能的实现。expr的计算表达式如下所示:

expr arg ?arg arg ...?

    其中arg是变量,即操作对象。在这里,只列举两个端口位宽参数计算的例子以告诉自己有这样一件事存在。关于expr的详细内容可参考http://wiki.tcl.tk/583 。

    假设输入端口dina和dinb的位宽分别为C_DATA_WIDTH_1和C_DATA_WIDTH_2,输出端口dout的位宽为C_DATA_WIDTH_3。

    1、当实现乘法的功能时,C_DATA_WIDTH_3的值取决于下式计算结果:

expr {$C_DATA_WIDTH_1+$C_DATA_WIDTH_2}

    2、当实现加法的功能时,为了避免计算结果溢出,C_DATA_WIDTH_3的值等于C_DATA_WIDTH_1和C_DATA_WIDTH_2之间最大值加1,由下式计算结果决定:

expr {($C_DATA_WIDTH_1 > $C_DATA_WIDTH_2) ? $C_DATA_WIDTH_1 + 1 : $C_DATA_WIDTH_2 + 1}

    或者

expr {max($C_DATA_WIDTH_1,$C_DATA_WIDTH_2) + 1}