ためになるホームページ お問い合わせ




TOP > Verilog > 値を返すシステムタスク
値を返すシステムタスク
通常、システムタスクは引数を受け取るが、引数を受け取らず値だけを返すシステムタスクがある。
$time シミュレーション時間を返す(64bit)
$stime シミュレーション時間を返す(32bit)
$random 乱数を返す(32bit)

$randomの記述の例
module testbench;
reg CLK;
reg RST;
wire [7:0]INA;
wire [15:0]XOUT;
reg START_FLAG;

parameter CK = 10;

initial begin
  #0   CLK = 0;
  #0   RST = 0;
  #50 RST = 1;
end

initial begin
  forever begin
    #(CK * 0.5) CLK = ~CLK;
  end
end
reg END_FLAG;

always @(END_FLAG) begin
  $finish;
end

reg [31:0] R_INA;
reg [31:0] CNT;

initial begin
  wait(!RST);
   START_FLAG = 1;
end

always @(posedge CLK) begin
  if (~RST) begin
    R_INA <= 0;
    CNT <= 0;
  end  else if (START_FLAG) begin
    R_INA <= $random;
    CNT <= CNT + 1'h1;
  end else begin
    R_INA <= R_INA;
    CNT <= CNT;
  end
  
end

always @(posedge CLK) begin
  if (CNT == 32)
    END_FLAG <= 1;
end

assign INA = R_INA[7:0];


initial begin
  $dumpfile("wave.vcd");
  $dumpvars(0, testbench);
  $monitor("time(%t) CLK = %b, RST = %b, CNT = %d", $time, CLK, RST, CNT);
end

TEST TEST(
          .CLK(CLK),
          .RST(RST),
          .INA(INA),
          .XOUT(XOUT)
          );




endmodule

module TEST(CLK, RST, INA, XOUT);
input CLK;
input RST;
input [7:0] INA;
output [15:0] XOUT;
reg [15:0] XOUT;

always @(posedge CLK) begin
  if (~RST)
    XOUT <= 16'h0;
  else
    XOUT <= {INA, 1'b0};
end

endmodule






Copyright 2007 ためになるホームページ All Rights Reserved.