问题描述
如果“max”是函数,则不支持以下编码:
c <= max(max(a,b),max(a,b));
示例不正确
模块测试(a,b,c,clk);
输入[3:0] a;
输入clk;
输入[3:0] b;
输出reg [3:0] c;
参数width_acc = 4;
永远@(posedge clk)
开始
c <= max(max(a,b),max(a,b));
结束
function [width_acc-1:0] max;
输入[width_acc-1:0] a;
输入[width_acc-1:0] b;
reg [width_acc-1:0] sub;
开始
sub = a -b;
if(!sub [width_acc – 1])
max = a;
其他
max = b;
结束
endfunction这样
endmodule
解决/修复方法
要解决此问题,请添加中间信号,如下面的更正代码所示:
正确的例子
模块测试(a,b,c,clk);
输入[3:0] a;
输入clk;
输入[3:0] b;
输出reg [3:0] c;
参数width_acc = 4;
wire [3:0] max_ab; // 添加
wire [3:0] max_cd; // 添加
assign max_ab = max(a,b); // 添加
assign max_cd = max(a,b); // 添加
永远@(posedge clk)
开始
c <= max(max_ab,max_cd); //改变了
结束
function [width_acc-1:0] max;
输入[width_acc-1:0] a;
输入[width_acc-1:0] b;
reg [width_acc-1:0] sub;
开始
sub = a -b;
if(!sub [width_acc – 1])
max = a;
其他
max = b;
结束
endfunction这样
endmodule
计划通过发布ISE 9.2i来解决这个问题。
没有回复内容