// Code your testbench here
// or browse Examples
module dut(clk,rst_n,vld,rdy,data);
input clk;
input rst_n;
input vld;
output reg rdy;
output reg[31:0] data; // 注意要写reg这个数据类型哦,wire,line18会报错
bit[31:0] count;
always @(posedge clk) begin
if(rst_n == 0)begin
end
else begin
count ++;
data <= count; //line 18
//$display("dut data is %d",data);
if(count == 150)begin
$finish;
end
end
end
endmodule
module dut_assert(clk_sva,rst_n_sva,vld_sva,rdy_sva,data_sva);
input clk_sva,rst_n_sva,vld_sva;
input rdy_sva;
input reg[31:0] data_sva; //注意是input哦,不要写成output了,结合bind,要写成input。
//initial begin // 注意一开始一直没办法输出数据,只能输出一个x态,data sva is x,发现initial 用错了,initial只会被调用一次,所以应该修改为always ,while(1) 也不行,while1 不能用在module中。可以用在monitor sb灯class中
always @(posedge clk_sva)begin
@(posedge clk_sva);
//$display("data sva is %d",data_sva);
if(data_sva == 10)begin
$display("canli data_sva is %d",data_sva);
end
if(data_sva == 13)begin
$display("canli data_sva is %d",data_sva);
end
end
endmodule
bind dut dut_assert my_assert( // dut在前,sva在后,写反了就会报错
.clk_sva(clk), //变量是sva的变量在前,dut的变量名在后
.rst_n_sva(rst_n),// bind 全部变量 可以使用(.*)
.vld_sva(vld),
.rdy_sva(rdy),
.data_sva(data)
);
module test;
bit clk;
bit rst_n;
initial begin
#10 rst_n = 1;
forever begin
#1 clk = ~clk;
end
end
initial begin
$dumpfile("dump.vcd");
$dumpvars;
end
dut my_dut(.clk(clk),.rst_n(rst_n),.vld(),.rdy(),.data());
endmodule
systemVerilog中bind使用方法
最新推荐文章于 2024-04-09 20:01:20 发布