微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA verilog 中调用的task 的问题

FPGA verilog 中调用的task 的问题

时间:10-02 整理:3721RD 点击:

[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,一句话搞定

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top