FPGA verilog 中调用的task 的问题
[source lang="verilog"]
module process (clk,rst,ad,out);
input clk,rst;
input [15:0] ad;
output [15:0] out;
reg [15:0] memory_3,memory_2,memory_1;
reg clock,clkout;
reg [12:0] ii,jj,kk;
reg [15:0] adc_rms ;
wire remainder;
wire [15:0] RMS_adc_sqr;
wire [15:0] ad,data;
reg [2:0] stat;
reg [13:0] count;
reg [31:0] rms_adc_s2,rms_adc_s;
reg [15:0] RMS_adc;
reg wren;
reg [7:0] address;
parameter idle =3'b001,
start=3'b010,
ram =3'b011,
fsh =3'b100,
work =3'b101;
always@(negedge rst or posedge clk)
begin
if(!rst)
begin
count 4999 &&count memory_1 && memory_2>memory_3)
begin
address=0;
wren=1;
ram2(clk,wren,address,memory_1,adc_rms);
stat memory_1 &&memory_2>memory_3&&ii>4)
begin
jj =256)
begin
address=0;
wren=0;
rms_adc_s=ram2(clk,wren,address,ad,adc_rms);
rms_adc_s2 =jj)
begin
RMS_adc<=rms_adc_s2/(jj+1);
stat<=idle;
ii<=1;
kk<=0;
jj<=0;
rms_adc_s2<=0;
end
defaultstat<=idle;
endcase
end
end
assign out = RMS_adc;
task ram2;
input clk,wren,address,data;
output adc_rms;
begin
ram ram1( .address (address),
.q (adc_rms),
.clock (clk),
.wren (wren),
.data (data)
);
end
endtask
endmodule
[/source]
ram 是我调用的一个IP RAM-1PORT,因为不能在case里面调用,就把他放在了task 中,然后再task里面调用他,不知道这样写可以不,本人初学,谢谢各位了

1、task如果是组合逻辑的话,是可以综合的
2、调用IP,直接例化就可以,不能在task或者always模块中调用
自顶。
task不能综合,只能在testbench里边用,或者说与综合软件有关,有些软件不能综合,不建议使用task
谢谢2位的回答,直接例化后就好了,但是有个疑问,那task 和function 啥时候用呢?
这两个在实际工程项目里很少用到,一般仿真时用在testbench里
恩,twz说的是对的,task一般是用在tb中的,一般module不用task,function这些的。
恩恩,谢谢,好的
会用task,写testbench的时候,仿真各种总线简直6的飞起,我原来不会用task,模拟时序的时候一个字节的激励要写n多句话,用了task,一句话搞定
