Hier ist fsm dut mit Testbench.
Dieser fsm dut führt den Zustandsübergang 1 - 0 - 1 - 0 der Reihe nach durch.
Der Prüfstand überprüft, ob dut ordnungsgemäß funktioniert oder nicht.
Verilog-Modul-Code (dut):
module melay_fsm(o,clk,rst,i);
output o;
input i,clk,rst;
reg o;
reg [1:0]state;
// [1:0]state;
[email protected](posedge clk,posedge rst)
begin
if(rst)
begin
state <=2'b00;
end
else
begin
case(state)
2'b00:
begin
if(i)
state<=2'b01;
else
state<=2'b00;
end
2'b01:
begin
if(!i)
state<=2'b10;
else
state<=2'b01;
end
2'b10:
begin
if(i)
state<=2'b11;
else
state<=2'b00;
end
2'b11:
begin
if(!i)
state<=2'b00;
else
state<=2'b01;
end
endcase
end
end
[email protected](posedge clk,negedge rst)
begin
if(rst)
o<=1'b0;
else if(state==2'b11 && i==0)
o<=1'b1;
else
o<=1'b0;
end
endmodule
Systemverilog Modulcode (Testbench):
interface melay_intf(input bit clk);
logic o,rst,i;
wire clk;
clocking [email protected](posedge clk);
input o;
output i,rst;
endclocking
modport tes(clocking c1);
endinterface
module top;
bit clk;
always
#1 clk = ~clk;
melay_intf i1(clk);
melay_fsm a1(.o(i1.o),.clk(i1.clk),.rst(i1.rst),.i(i1.i));
melay_tes(i1);
endmodule
program melay_tes(melay_intf i1);
initial
#100 $finish;
initial
begin
i1.rst <= 0;
#4 i1.rst <= 1;
#4 i1.rst <= 0;
i1.i = 1;
#2 i1.i = 0;
#2 i1.i = 1;
#2 i1.i = 0;
#2 i1.i = 1;
#2 i1.i = 0;
repeat(10)
begin
i1.i = 1;
#2 i1.i = $urandom_range(0,1);
end
end
initial
$monitor("output = %d clk = %d rst = %d i = %d",i1.o,i1.clk,i1.rst,i1.i);
initial
begin
$dumpfile("mem.vcd");
$dumpvars();
end
endprogram
Wichtig ist hier zu notieren ist Verbindung von Signalen in Top-Modul .
melay_fsm a1 (.o (i1.o), clk (i1.clk), zuerst (i1.rst), i (i1.i));
Bitte beachten Sie richtig, wie ich Schnittstelle mit Testbench und dut verbinde. Bitte beachten Sie folgende Punkte.
Ich definiere Schnittstelle mit allen duts Signalen.
Ich nahm Instanz (i1) der Schnittstelle (melay_intf) im obersten Modul.
Ich nahm Instanz (a1) von dut (melay_fsm) im obersten Modul.
beobachtet Jetzt melay_fsm a1 (.o (i1.o) ,. clk (i1.clk) ,. rst (i1.rst) ,. i (i1.i))
All DUTs Signale sind mit der Schnittstelle verbunden.
Ich übergeben Instanz der Schnittstelle (i1) in Testbench. melay_tes (i1)
So kann Testbench auf Schnittstellensignale zugreifen und Schnittstellensignale werden mit duts Signalen verbunden.
Jetzt können Sie mit Hilfe der Schnittstelle auf duts Signale in Ihrem Prüfstand zugreifen.
Ich denke jetzt können Sie richtigen Fluss verstehen.
Bitte stellen Sie die Frage, wenn Sie irgendwelche Zweifel haben.
Hallo AndresM, Dies ist, wo meine Verwirrung ist, anstelle der Schnittstelle, die Sie haben, wenn die Schnittstelle wie folgt definiert ist: Schnittstelle simple_bus (Eingangslogik clk // Definieren Sie die Schnittstelle Eingangslogik req, Eingangslogik GNT , Eingangslogik [7: 0] Adr, Eingangslogikdaten, Eingangslogik [1: 0] -Modus, Ausgangslogikstart, Ausgang rdy); endinterface: simple_bus Dann wie sollte ich diese Schnittstelle anschließen? Ich konnte kein gutes Beispiel dafür finden. – justrajdeep
Ich habe einen Code in meine Antwort eingefügt, damit Sie sehen können, wie Sie Signale von einem Testfallprogramm steuern. Bitte schau es dir an - das sollte hoffentlich deine Fragen klären. – AndresM