Hi Tom, I believe Daniel is referring to sub-clause "4.9.6 Port connections". In that text you will find references to "implicit continuous assignment statements". Neil On 08/06/13 14:00, Alsop, Thomas R wrote: > Question for the sv-bc team from a UVM bug that I own. > > Daniel Mlynek filed this UVM Users Guide bug awhile ago. Looking more > closely at the code, I am not sure I agree with the fact that there is > any continuous assignment in here for the signal ‘sig_read’. I have > highlighted the relevant code below. According to the latest LRM clause > 10.4, all cases of sig_read appear to be “triggered” assignments. > Specifically the one that he calls continuous is the instantiation of > the dut, but in this case xbus_read is driven via an initial block and > within and always procedural block. These are both considered procedural > assignments. Am I missing something? > > http://www.eda.org/svdb/view.php?id=3605 > > Thanks, -Tom > > Below code show the problem in UBUS. > Variable sig_read is driven by both continous assignment in instance > port and procedural assignment via virtual interface. > Such code is not currently officialy blocked by LRM but it is at least > controversial. > Official example should not use such code pattern as good idea. > > interface iface; > logic clk; > logic sig_read; > endinterface > > module dut(input clk,output reg xbus_read); > initial xbus_read<=1'bz; > always @(posedge clk)begin > xbus_read<=1'bz; > $display("2: xbus_read<=1'bz"); > end > endmodule > > class C; > virtual iface vi; > function new(virtual iface i); > vi=i; > endfunction > function drive; > vi.sig_read<=1;* //procedural drive of sig_read* > $display("1: vi.sig_read<=1"); > endfunction > endclass > > module top; > iface iface_i(); > dut uut(iface_i.clk,iface_i.sig_read);* //dut instantation - continous > drive of sig_read* > C c =new(iface_i); > initial iface_i.clk=0; > always #5 iface_i.clk = ~ iface_i.clk; > initial begin > $display("START"); > $monitor($time,">>>>", iface_i.sig_read); > @(posedge iface_i.clk) > c.drive(); > @(posedge iface_i.clk); > #1; > $display("END"); > assert(iface_i.sig_read)else $fatal("fatal error"); > $finish; > end > > endmodule > > > -- > This message has been scanned for viruses and > dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is > believed to be clean. -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Tue Aug 6 16:14:31 2013
This archive was generated by hypermail 2.1.8 : Tue Aug 06 2013 - 16:14:38 PDT