2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊
錯在第18行:reg [3:0]i=1; 應(yīng)該分著寫:reg[31:0] i;begin之后寫i = 1;
function [31:0] factorial;
input[3:0] pram_n;
reg[3:0] i;//分開寫
begin
i = 1;
factorial=pram_n?1:0;
factorial=1;
for(i=2;i<=pram_n;i=i+1)
factorial=i*factorial;
end
endfunction
原因是:always @(posedge clk)表示時序邏輯,其中引用了function factorial;那么初始定義reg i跟給它賦值的工作。在時序上,只能經(jīng)兩個clk才能完成,一個clk用來初始化reg,另一個clk用于賦值。
另外,always的rst是組合邏輯,推薦規(guī)范寫法:
always @(posedge clk or negedge rst)
begin
if(!rst)
q<=0;
else
begin
q<=factorial(n);
end
end

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個贊
for語句中的i<=pram_n出錯,pram_n要求是一個常數(shù),否則不能編譯。你隨便改個常數(shù)試試就不會出現(xiàn)以上錯誤了。
添加回答
舉報