Systemverilog
数据类型

l 合并数组和非合并数组

1)合并数组:

存储方式是连续的,中间没有闲置空间。

例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。

表示方法:

数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】

Bit[3:0] [7:0] bytes ;

2)二维数组和合并数组识别:

合并数组: bit [3:0] [7:0] arrys; 大小在变量名前面放得,且降序

二维数组: int arrays[0:7] [0:3] ; 大小在变量名后面放得,可降序可升序

位宽在变量名前面,用于识别合并和非合并数组,位宽在后面,用于识别数组中元素个数。

3)非合并数组

一般仿真器存放数组元素时使用32bit的字边界,byte、shortint、int都放在一个字中。

非合并数组:字的地位存放变量,高位不用。

表示方法:

Bit [7:0] bytes;

   4)合并数组和非合并数组的选择(1)当需要以字节或字为单位对存储单元操作。(2)当需要等待数组中变化的,则必须使用合并数组。例如测试平台需要通过存储器数据的变化来唤醒,需要用到@,@只能用于标量或者合并数组。Bit[3:0] [7:0] barray[3]  ; 表示合并数组,合并数组中有3个元素,每个元素时8bit,4个元素可以组成合并数组可以使用barry[0]作敏感信号。

l 动态数组

随机事物不确定大小。

使用方法:数组在开始是空的,同时使用new[]来分配空间,在new[n]指定元素的个数。

Int dyn[];

Dyn = new[5]; //分配5个元素空间

      Dyn.delete() ;     //释放空间

l 队列

在队列中增加或删除元素比较方便。

l 关联数组

当你需要建立一个超大容量的数组。关联数组,存放稀疏矩阵中的值。

表示方法:

采用在方括号中放置数据类型的形式声明:

Bit[63:0] assoc[bit[63:0]];

l 常量:

1)Verilog 推荐使用文本宏。

好处:全局作用范围,且可以用于位段或类型定义

缺点:当需要局部常量时,可能引起冲突。

2)Parameter

作用范围仅限于单个module

3)Systemverilog:

参数可以在多个模块里共同使用,可以用typedef 代替单调乏味的宏。

过程语句

l 可以在for循环中定义变量,作用范围仅在循环内部

for(int i=0;i<10;i++)

array =i;

l 任务、函数及void函数

1) 区别:

Verilog中task 和function最重要的区别是:task可以消耗时间而函数不能。函数中不能使用#100的延时或@的阻塞语句,也不能调用任务;

Systemverilog中函数可以调用任务,但只能在fork joinnone生成的线程中。

2)使用:

如果有一个不消耗时间的systemverilog任务,应该把它定义成void函数;这样它可以被任何函数或任务调用。

从最大灵活性角度考虑,所有用于调用的子程序都应该被定义成函数而非任务,以便被任何其它任务或函数调用。(因为定义成任务,函数调用任务很有限制)

l 类静态变量

作用:

1)类的静态变量,可以被这个类的对象实例所共享。

当你想使用全局变量的时候,应该先想到创建一个类的静态变量

静态变量在声明的时候初始化。

2)

类的每一个实例都需要从同一个对象获取信息。

l 静态方法

作用:

当静态变量很多的时候,操作它们的代码是一个很大的程序,可以用在类中创建一个静态方法读写静态变量,但是静态方法不能读写非静态变量。

l ref高级的参数类型

Ref 参数传递为引用而不是复制。Ref比 input 、output、inout更好用。

Function void print_checksum(const ref bit [31:0] a[ ]);

1) 也可以不用ref进行数组参数传递,这时数组会被复制到堆栈区,代价很高。

2) 用带ref 进行数组参数传递,仅仅是引用,不需要复制;向子程序传递数组时,应尽量使用ref以获得最佳性能,如果不希望子程序改变数组的值,可以使用const ref。

3) Ref参数,用ref 传递变量;可以在任务里修改变量而且,修改结果对调用它的函数可见,相对于指针的功能。

l Return语句

增加了return语句。Task任务由于发现了错误而需要提前返回,如果不这样,那么任务中剩下的语句就必须被放到一个else条件语句中。体会下

Task load_array(int len. Ref int array[ ]);

If(len<0) begin

$display(“Bad len”);

Returun;

//任务中其它代码

endtask

l 局部数据存储 automatic作用

Verilog中由于任务中局部变量会使静态存储区,当在多个地方调用同一个任务时,不同线程之间会窜用这些局部变量。

Systemverilog中,module和program块中,缺省使用静态存储;如果想使用自动存储,需加入automatic关键词。

测试平台

l Interface

背景 :

一个信号可能连接几个设计层次,如果增加一个信号,必须在多个文件中定义和连接。接口可以解决这些问题。

好处:

如果希望在接口中增加一个信号,不需要改变其他模块,如TOP模块。

使用方法:

(1)接口中去掉信号的方向类型;

(2)DUT 和测试平台中,信号列表中采用接口名,例化一个名字

注意:

因为去掉了方向类型,接口中不需要考虑方向信号,简单的接口,可以看做

是一组双向信号的集合。这些信号使用logic[url=]类型[/url][d1] 。

双向信号为何可以使用logic呢?

这里的双向,只是概念上的双向,不想verilog中databus多驱动的双向。

双向信号如何做接口?

(1)仲裁器的简单接口

Interface arb_if( input bit clk);

 Logic [1:0] grant,request;Logic rst;

Endinterface

DUT 使用接口:

Module arb(arb_if arbif);

Always @(posedge arbif.clk or negedge arbif.rst)

endmodule

(2)DUT 不采用接口,测试平台中使用接口(推荐)

DUT 中源代码不需要修改,只需要再top中,将接口连接到端口上。

Module top;

   Bit clk;Always #2 clk =~clk;Arb_if arbif(clk);Arb_port al(.grant(arbif.grant),.request(arbif.grant),.rst(arbif.rst),.clk(arbif.clk));Test t1(arbif);

Endmodule

l Modport

背景:

端口的连接方式包含了方向信息,编译器依次来检查连续错误;接口使用无信号的连接方式。Modport将接口中信号分组并指定方向。

例子:

l 在总线设计中使用modport

并非接口中每个信号都必须连接。Data总线接口中就解决不了,个人觉得?

因为data是一个双驱动

l 时钟块

作用:

一旦定义了时钟块,测试平台就可以采用@arbif.cb等待时钟,而不需要描述确切的时钟信号和边沿,即使改变了时钟块中的时钟或边沿,也不需要修改测试代码

应用:

将测试平台中的信号,都放在clocking 中,并指定方向(以测试平台为参考的方向)。并且在modprot test(clocking cb,

最完整的接口:

Interface arb_if(input bit clk);

Logic[1:0] grant,request;

Logic rst;

Clocking cb @(posedge clk);

Output request;Input grant;

Endclocking

Modport test (clocking cb,

       Output rst);

Modport dut (input clk, request,rst,

       Output grant);

endinterface

变化:将request 和grant移动到时钟块中去了,test中没有使用了。

l 接口中的双向信号

Interface master_if(input bit clk); //在类中为了,不使用有符号数,常用bit[]定义变量

Wire [7:0] data;

Clocking cb@(posedge clk);

 Inout data;

Endclocking

Modport TEST(clocking cb);

endinterface

program test(master_if mif);

initial begin

mif.cb.data <= ‘z;

@mif.cb;

$display(mif.cb.data); //总线中读数据

@mif.cb;

Mif.cb.data <= 8’h5a; //驱动总线

@mif.cb;

Mif.cb.data <= ‘z; //释放总线

注:

(1)interface 列表中clk 采用的是input bit clk;为什么要用bit?

(2)时钟块 clocking cb 中,一般将testbench中需要的信号,方向指定在这里;

而在modprot 指定test信号方向的时候,采用clocking cb。

(3)interface中信号,不一定都用logic,也可采用wire(双驱动);systemverilog

中如果采用C代码的风格(参数列表中方向和类型写一起),必须采用logic类型

(4)现在的风格,DUT 没才用clocking cb ,测试平台和DUT的时钟如何统一?

l 激励时序

DUT和测试平台之间时序必须密切配合。

l 测试平台和设计间的竞争状态

好的风格:

使用非阻塞赋值可以减少竞争。

systemverilog验证中initial 中都采用<= 赋值,而等待延迟采用@arbif.cb等待一个周期来实现。

而verilog中采用的风格时,initial 中采用 =阻塞赋值,沿时可以采用#2,等实现。

因此时钟发生器,只能放在module 中,而不能放在program中

l Program中不能使用always块

测试平台可以使用initial 但不能使用always,使用always 模块不能正常工作。

原因:测试平台的执行过程是进过初始化、驱动和响应等步骤后结束仿真。

如果确实需要一个always块,可以使用initial forever 来完成。比如:在产生时钟时。

l 类中static变量

背景:

如果一个变量需要被其他对象所共享,如果没有OPP,就需要创建全局变量,这样会污染全局名字空间,导致你想定义局部变量,但变量对每个人都是可见的。

1)作用:

类中static变量,将被这个类的所有实例(对象)所共享,使用范围仅限于这个类。

例:class transaction;

    Static int count=0;Int id;

Endclass

Trasaction tr1,tr2;

Id不是静态变量,所以每个trasaction对象都有自己的id;count 是静态变量,所有对象只有一个count变量。

如何用?

当你打算创建一个全局变量的时候,首先考虑创建一个类的静态变量。

2)static变量的引用

句柄或类名加::

4) static 变量的初始化

static变量通常在声明时初始化。不能在构造函数中初始化,因为每一个新的对象都会调用构造函数。

l 静态句柄:

背景:当类的每一个对象,都需要从同一个对象(另一个类)中获取信息的时候。如果定义成非静态句柄,则每个对象都会有一份copy,造成内存浪费。

l 静态方法

背景:

当使用更多静态变量的时候,操作他们的代码会很长。

作用:

可以在类中创建一个静态方法用于读写静态变量。

注:systemverilog不允许,静态方法读写非静态变量。

l 类之外的方法

背景:解决类太长的问题。类最好控制在一页内,如果方法很都很长。

l This

背景:如果在类很深的底层作用域,却想引用类一级的对象。在构造函数中最常见。

作用:this指向类一级变量

l 如何做类,类做多大?

上限:类不能太大

当类中存在多处相同的代码,你需要将这段代码做成当前类的一个成员函数或父类的成员函数。

下限:类不能太小

类太小,增加了层次。

方法:如果一个小类只被例化了一次,可以将它合并到父类中去。

l 动态对象

概念区分:方法中修改对象 和修改句柄

修改对象——将对象的变量重新赋值。

修改句柄——在任务中new()对象。

1) 当你将对象传递给方法

背景:句柄,new()后变成对象,在将其作为参数传递给方法。

实质和作用:

传递的是句柄。这个方法可以读取对象中的值;也以改变对象中的值

2) 修改标量变量的值

背景:在方法的参数中,前面加ref;(用ref传递,ref传递的是变量的地址)。

作用:

方法可以修改变量的值,并将修改的值,传递给主程序。

引申:

方法可以改变对象,即使没有使用ref 修饰句柄。

因为传递的是句柄,句柄是地址。不要将句柄和对象混为一谈,如果传递的是对象,对象是单向的,那方法以外也不能传递回来。可以这样理解吧。

读写对象中的值:

例:

Task transmit(Transcation t);

 Cbbus.rx_data <= t.data;t.stats.startT  =  $time;     //在任务中,改变了对象

endtask

trancation t;

initilal beign

t = new();

t.addr = 42;

transmit(t);

end

既然传递的是句柄,那数据就没传过去,如何读取值?

答:主程序中new()创建了一个对象,而句柄是指向对象的指针,传递的是句柄,transmit中也指向了对象,所以transmit中可以读写对象。

3) 在任务中修改句柄

背景:

在方法中,参数为句柄,前面加ref。

作用:

可以在方法中new()对象,并将初始化放在方法中;在主程序中仅仅调用。

注意:正确的事物发生器,参数是带ref的句柄

Function void create(ref transaction tr)

Endfunction

方法的参数是句柄,句柄前有ref 和没ref的差别:

没ref,在方法中不能new()该句柄的对象,因为没ref,句柄是不能传递到主程序的; 有ref,可以在方法中new()该句柄的对象。

原因:没ref传递的是句柄,不能修改句柄,有ref,传递的是句柄的地址,可以修改句柄。

例子:

Function void create( Transcation tr)

tr = new(); 不正确

tr.addr = 42;

Endfunction

Transcation t;

Initial begin

Create(t);

$diasplay (t.addr);

End

l 程序中修改对象

背景:

应该在循环中,new()多个对象,而不是先new()对象再循环发送事物。

作用:

创建多个对象

正确产生器,创建多个对象:

Task generator (int n);

Transaction t;

Repeat(n) begin

t=new();

t.addr =$random();

transmit(t);

endtask

将new()放在循环内,这样创建了许多对象。

l 对象的复制

目的:防止对象的方法修改原始对象的值。或在一个发生器中保留约束。

分两种情况,类中不包含其他类的句柄和包含

方法:

1) 使用new复制一个对象——简易复制(shallow copy)

Transaction src,dst;

Src = new() //

dst = new src //复制

局限:

如果类中包含一个指向另外一个类的句柄,那么只有最高一级的对象被new复制,下层的对象都不会被复制。

会出现意想不到的错误。

当前类中变量和句柄被复制,这样两个对象,都有指向另外一个类的对象statistic(会带来意想不到的错误),但是statistic没有被复制。如果其中一个transaction对象,修改了statistic对象值,会影响到另一个transaction看到static的值。

2) 简单的复制函数

如何实现:

Copy函数一般放在类内部,函数名为该类的一个句柄,copy函数中new()对象。

局限:

类中不包含其他类。

3) 深层的复制函数 ——深层copy

目的:解决类中包含另外一个类,copy带来的问题。

实现:

在copy函数中,将调用另一个类的copy函数,赋值给该句柄;同时需要为statistic类和层次结构中每一个类增加一个copy()方法;copy函数的ID域也要保持一致,copy函数,copy本类,所以ID也要++.

Copy.stats = stats.copy();

Id =count++;

约束

l 约束块中,只能包含表达式,不能赋值。

1)dist权重分布

dist带有一个值的列表及相应的权重,中间用:= 或 :/分开。值或权重可以是常量或变量。权重的和不必是100.

:= 表示范围内,每一个值的权重是相同的;

:/ 表示范围内,权重要均匀分布

2)Inside

产生一个值的集合,在值的集合中取随机值时,机会相等。

3)在集合中使用数组

l 条件约束

Systemverilog支持两种关系操作 –>和if—else

—>可产生和case效果类似的语句块,可以用于枚举类型的表达式。

l 双向约束

l 控制多个约束块

作用:可以打开或关闭某个约束

可以使用内建的Handle.constraint.constraint_mode()打开或关闭。

l 内嵌约束

背景:很多测试只会在代码的一个地方随机化对象,但是约束越来越复杂时,

Systemverilog可以使用randomized with 来增加额外的约束,这和在类里增加的约束是等效的。

l Pre_randomize 和post_randomize函数

有时候需要再调用randomize()之前或之后立即执行一些操作。

随机化前:设置类里的一些非随机变量(如上下限、权重),

随机化后:计算数据的误差矫正值。

l 约束的技巧

1) 约束中使用变量

2) 使用非随机值

如果一套约束在已产生了几乎所有想要的激励向量,但还缺少几种。

可以使用rand_mode把这些变量设置为非随机变量。

l 数组约束

Systemverilog可以用foreach对数组中的每一个元素进行约束。

线程及线程间的通信

l 测试平台使用许多并发执行的线程。测试平台隶属于程序块。

Systemverilog引入两种新的创建线程的方法—fork…join_none和fork…join_any

1) 使用fork…join_none来产生线程

在调度其内部语句时,父线程继续执行。

2) 使用fork…join_any实现线程同步

在调度块内语句,当第一个语句执行完,父线程才继续执行。

l 动态线程

Systemverilog中可以动态创建线程。

用法:

fork…join_none放在了任务中,而不是包含两个线程。

原因:

主程序中有连个线程:发送和检测线程。但是不能同时启动,发送事物后,才能检测,否则还未产生数据,就开始检测;但是检测又不能阻塞下一次发送事物的线程。所以fork…join_none 放在了检测task 任务(后作用的线程中)中,

例:测试平台产生随机事物并发送到DUT中,DUT把事物返回到测试平台。测试平台必须等到事物完成,但同时不希望停止随机事物的发送。

Program automatic test(bus_ifc.Tbbus);

Task check_trans(Transaction tr);

Fork

 BeginWait(bus.cb.addr == tr.addr);End

Join_noe

Endtask

Initial begin

Repreat(10)  beginTr= new();Assert.(tr.randomize());//把事物发送到DUT中Transmit(tr);//等待DUT的回复Check_trans(tr);End

100;

End

endprogram

l 并发线程中务必使用自动变量来保持数值。

l #0 延迟,使得当前线程必须等到fork…join_none语句中产生的线程执行完后,才得以运行。

l 停止线程

1) 停止单个线程

使用fork ..join_any 后加disable。

3) 停止多个线程

Disable fork 能停止从当前线程中衍生出来得所有子线程。

应该使用fork ..join 把目标代码包含起来,以限制Disable fork的作用范围。

l 事件

背景:

Verilog中当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争就出现了。如果触发线程先于阻塞线程,则触发无效(触发是一个零宽度的脉冲)。

解决方法:

Systemverilog 引入了triggered()函数,用于检测某个事件是否已被触发过,包括正在触发。线程可以等待这个结果,而不用在@操作符上阻塞。

例子:

Event e1,e2;

Initial begin

 ->e1;@e2;

End

Initial begin

 ->e2;@e1;

End

上面的代码,假设先执行第一个块,再执行第二个块。第一个块会阻塞在@e2(阻塞先执行),直到e2触发,再运行(触发后执行);在执行第二个块时,会阻塞在@e1,但是e1已经触发(触发先执行,阻塞后执行,触发是个零宽度的脉冲,会错过第一个事件而锁住)

解决方法:用wait(e1.triggered())来代替阻塞@el,如果先触发,也可以执行。

l 等待多个事件

最好的办法是:采用线程计数器来等待多个线程。

l 旗语

Get()可以获取一个或多个钥匙,put()可以返回一个或多个钥匙。Try_get()获取一个旗语而不被阻塞。

l 信箱

背景:如何在两个线程中传递信息?考虑发生器需要创建很多事物并传递给驱动器的情况。

问题:如果使用发生器的线程去调用驱动器的任务。这样,发生器需要知道驱动器的层次化路径(类的层次化),降低了代码的可重用性;还迫使发生器和驱动器同一速率运行,当一个发生器需控制多个驱动器时会发生同步问题。

解决办法:把驱动器和发生器当成各个处理事物的对象,之间通过信道交换数据。信道允许驱动器和发生器异步操作;引入问题:你可能倾向于仅仅使用一个共享的数据或队列,但这样,编写实现线程间的读写和阻塞代码会很困难。解决办法:可以使用systemverilog中的信箱。把信箱看出一个具有源端和收端的FIFO.

操作:

1)信箱的容量可以指定,new(size),size限制信箱中的条目,size为0,或没指定,则信箱是无限大。

2)Put()放数据,get()可以移出数据。Peek()可以获取信箱中数据的copy而不移出。

3)信箱中可以放句柄,而不是对象。

漏洞:在循环外只创建一个对象,然后使用循环对对象随机化,信箱中是句柄,最终得到的是一个含有多个句柄的信箱,多个句柄都指向同一个对象。

解决办法:在循环中,创建多个对象。

l 异步线程间使用信箱

背景:

很多情况下,由信箱连接的两个线程应该步调一致,这样生产方 才不至于跑到消费方前。 好处:最好层的generator需要等待低层的数据发完后才能结束。测试平台能精确知道所有激励发出去的时间。

两种情况

两个线程同步,需要额外的握手信号。否则,出现生产方运行到结束,消费方还启动。

1) 信箱容量为1,两个线程同步

因阻塞,连个线程不需要握手信箱

3) 容量不为1,线程间同步

需要使用握手信号,以使producer不超前于consumer;如果consumer超前于prodecer会阻塞。

解决办法

1) 使用定容信箱和peek实现线程同步:(比较好)

消费方:consumer 使用信箱方法peek()获取信箱里的数据的copy而不将其移出,当consumer处理完数据后,便使用get()移出数据。

特点:信箱容量定义为1,不需要握手信号。

Calss consumer

  Repeat(n)beginMbx.peek(i);$display(“consumer:after get( )”,i);Mbx.get(i);End

endcalss

如果直接使用get()替代peek(),那么事务会被立刻移出,这样可能会在consumer完成事务前,producer生成新的数据。

-

2)使用信箱和事件实现线程同步

 使用边沿敏感的阻塞语句@handshake 代替电平触发wait(handshake.triggered())。因为:线程中任务run()使用循环,事件阻塞只能使用@handshake。

局限:如果遇到producer线程的阻塞和consumer线程的触发同时发生,则可能出现次序上的问题。

3)使用两个信箱实现线程同步

使用另一个信箱把consumer的完成信息发回给producer。

目的:在producer线程中,处理完事物后,用一个get()来阻塞。

特点:信箱容量大于1.

Maibox mbx,rtn;

Class prodecer

For(int i=0; i<4;i++) begin

….

Mbx.put(i);

Rtn.get(i);

End

Endclass

Class consumer

Repeat(3) begin

….

Mbx.get(i);

Rtn.put(-i);

End

Endclass

说明:信箱的构造函数中Mbx =new();Rtn =new(),信箱容量为无穷大。如何实现同步?

虽然信箱容量为无穷大,producer线程发完一个数据后遇到get()会阻塞,不能放入第二个数据;等到consumer得到第一个数据并且处理完后,通过另一个信箱返回一个数据,producer才继续放第二个数据。

因为get()得到数据后,将信箱中数据取出。表象:信箱容量定义为无穷大,但是实际上也是producer放一个数据,consumer取一个数据;然后producer再放第二个数据,依次类推。

这样确保producer不会超前于consumer线程,而将数据都写入信箱。

4) 其他的同步技术

通过变量或旗语阻塞也可以实现握手。事件是最简单的结构,其次是通过变量阻塞。旗语相当于第2个信箱,但是没有交换信息。Systemverilog中的信箱比其他技术要差,原因是无法在producer放入第一个事务时,让它阻塞。Producer一直比consumer提前一个事务的时间。

l Wait(handshake.triggered())和@handshake 使用范围

1) Wait(handshake.triggered()),用于等待一个事件;

2) 循环中等待事件,只能用@handshake

3) 两个线程的同步,一般任务run()使用循环,所以只能使用@handshake。

注意事项:

1) 在循环中,等待事件不能用Wait(handshake.triggered()),因为如果事件触发一次,wait()语句一直为真,进入不断的循环。下一次循环中,不会阻塞。

2) @handshake 如果触发事件,先于等待事件。会等不到事件,因为(事件触发,是一个零宽度的脉冲)

OPP的高级编程技巧

l 继承

背景:

为总线事务增加一个错误功能并带可变延时的复杂类。方法如下:

1) 使用合成,即在类中例化另一个类型的类。有时候很难将功能分成独立的部分。如果使用合成,则需要为正确和错误事务分别创建不同的类,正确类的测试平台需要重写以处理错误类的对象。

2)使用扩展类

作用:

当需要增加事务,而对现有的测试代码修改越少越好,。例如增加错误注入功能。

扩展类和类合成区别:

扩展类解决,增加新事务,使用类合成中,大量修改代码的麻烦。

如何使用:

扩展类共享基类的变量和子程序。

1)基本类中的方法,需标记为virtual,这样扩展类中才可以重新定义。扩展类中函数,和基类中函数名一样时,通过supper.函数名,调用基类中函数。Systemverilog中不允许supper.supper.new方式经行多层调用。

2)如果基类构造函数new()有参数,那么扩展类,必须有一个构造函数,并在构造函数的第一行调用基类的构造函数。

 Class baselFunction new(input  int var);this.var = var;endfunctionendclass

class extended extends basel

function new(input int var);super.new(var);endfunction

endclass

3)OPP规则指出:基类的句柄,也可以指向扩展类的对象。(好好体会)

l 蓝图模式

1)背景:一个简单的发生器,通过信箱将数据传递给驱动器。

class generator

mailbox gen2drv;

transaction tr;

function new(input mailbox gen2drv)

this.gen2drv = gen2drv;

endfunction

task run;

forever begin

   tr = new();assert(tr.randmize);gen2drv.put(tr);   //mail.put(x)

end

endtask

endclass        

存在问题:这个例子在循环内部创建事务对象,而不是在循环外部,避免了测试平台常见的错误。New()放在循环外部,错误原因是,mailbox中放入的是句柄,而不能是对象,所有的句柄都指向同一个对象。(1)任务Run创建了一个事物并立即随机化,意味着事务使用了默认的所有约束。要修改,必须要修改transaction类。(2)无法使用扩展

解决办法:将tr的创建和初始化分开,使用蓝图模式。

另一个问题:如果简单的把创建和初始化分开,而放在循环外部,而避免测试平台错误(P200),如何解决?蓝图模式如何解决

2)蓝图模式概念:

首先构建一个对象蓝图(金属模),然后修改它的约束,甚至可以用扩展对象替换它,随机化这个蓝图时,就得到想赋予的随机值;然后复制这个对象,将copy发给下游。

蓝图:是一个钩子,允许你改变发生器类的行为而无需修改其类代码。蓝图对象在一个地方构建(new()),在另一个地方(任务run)使用

3)P200与P221相对比分析:重要

蓝图模式,也就比new()在循环外地generator多了一个copy函数。问题(1)蓝图模式,new()在循环外,也只有一个对象,而mailbox中放入的只能是句柄,如何解决常见的平台错误?

因为copy,是对象的复制,而不是句柄的复制。这样蓝图模式只有一个句柄,但是随机化后,copy,相当于再循环中创建了许多对象。而测试平台常见错误的本质是,只创建了一个对象。这样就避免了问题。

(2)蓝图模式下,因为只有一个ID号,那么任务run循环中,下发了许多数据,这些只有一个ID号了?

因为copy是对象的复制,所以在copy中ID号也会增加。下发的每个数据,都有各自的ID号。

l 使用扩展的transaction

为了注入错误,需要将蓝图对象transaction变成Badtransaction(改变蓝图)。必须在环境的创建和运行阶段之间完成这个操作。注意:所有的badTr引用都在这一个文件中,这样就不需要改变environment类或generator类。

Env.build();

Begin

Badtr bad = new();

Env.gen.blueprint = bad;

End

Env.run

目的是:将一个对象取代另一个对象。New()后都是对象了,将对象赋值给对象,这是什么写法?不是复制呀?复制本质是将一个句柄指向一个对象。

解释:上述是句柄的复制,将扩展类句柄bad赋值给基类句柄blueprint,这样基类句柄指向扩展类对象,后面的代码调用的时候,就直接指向扩展类bad了,改变了蓝图。

l Env.new()和nev.build()区别

Env.new()仅仅new()函数

nev.build()是将各个模块new(),并传达一些参数,通过这些参数将环境的各个模块,连接起来。P213

l $cast 作类型向下转换

背景:基类句柄可以指向扩展类对象,不需要额外的代码; 扩展类句柄指向基类对象,一般情况下会出错,但有时候是可以的,前提是基类句柄指向了它的一个扩展类对象。

作用:扩展类句柄指向基类对象时,使用$cast()函数。在非法的情况下,不会编译报错,会返回了一个0.

$cast做任务使用时,systemverilog会在运行时,检查源对象类型和目的对象类型不匹配,会报错;

cast使函数返回0.

前面所述:基类句柄可以指向任何它的扩展类的对象、

1) 基类句柄指向扩展类对象——出现情况:修改蓝图,不改过多代码,增加功能

Transaction tr; //基类句柄

BadTr bad; //扩展类句柄

Bad = new();

Tr = bad; // 基类句柄指向扩展类对象

tr.display; //掉用的是扩展类的方法

2) 扩展类句柄指向基类对象——出现情况:基类virtual 方法copy函数,它的继承类中copy函数

将基类句柄赋值给扩展类句柄,使扩展类句柄指向基类对象,一般编译器会出错,不能运行,所以非常小心;只有基类句柄指向扩展类对象时,再将扩展类句柄指向基类对象时,不出错。为了检测基类句柄是否指向了扩展对象,并且不让编译器报错,可以使用$cast()函数检测。

当把扩展类句柄指向基类对象时,发生什么?

Tr= new();

Bad = tr; //扩展类句柄指向基类句柄

上述会发生错误,编译不会被通过。因为有些属性在基类中不存在;但是扩展类句柄指向基类句柄不总是非法的(见下面代码,是可以的),当基类句柄指向一个扩展类对象时是允许的。

   Transcation tr;BadTr bad,bad2;         Bad= new();Tr = bad;          //基类句柄指向扩展类对象$cast(bad2,tr);      //扩展类句柄指向基类对象

if(!$cast(bad2,tr);

 $display(“cannot assign tr to bad2”);

$display(bad2.bad_crc);

l 句柄类型和对象类型差异(书中翻译的不准,type of handdle 和 object)

个人理解:

Transaction tr; 句柄tr类型是transaction

句柄类型:关键字

对象类型:类中成员的类型差异

l 虚方法和多态

多态:多个程序使用一个共同的名字的现象。

多态解决问题:计算机建构面临的一个问题。让物理内存很小的情况下,让处理器能够对很大的地址空间寻址。针对这个问题引入了虚拟内存。

虚拟方法继承劣势:

基类使用了虚拟方法,扩展类也必须使用相同的“签名”,扩展类中虚拟子程序不能增加或删除参数,这意味着必须提前做好规划。

l 对象复制

1) 因为是virtual 函数,扩展类中copy方法也必须是transaction型的,

但是要copy的是badtr类型的,所以要new一个bad

带有copy 的事物基类。

Class transaction ;

Rand bit[31:0] src,dst,data[8];

Bit[31:0] crc;

Virtual function transaction copy ();

Copy   = new();Copy.src = s rc;Copy.dst = dst;Copy.data = data;Copy.crc  = crc;

Endfunction

Endclass

带有copy的扩展类

Calss badtr extends transaction

Rand bit bad_crc;

Virtual function badtr copy(); //错误

Virtual function transaction copy();

Badtr bad;

Bad = new();

Bad.src = src;

bad.dst = dst;

bad.data = data;

bad.crc = crc;

Bad.bad_crc = bad_crc;

Return bad;

Rendfunction

endclass

2)优化途径一,创建一个独立的函数copy_data,这样每个类只负责copy其局部变量,即扩展类中的copy函数用super.copy_data(tr),代替了基类中变量的复制。代码的重用性提高。P8.22

$cast(bad,tr); //扩展类句柄指向基类句柄

使用的情况: 因为virtual 函数,在继承中,虚拟函数必须和基类中名称和参数也一致。这样扩展类中copy_data函数参数仍然是transaction类型的tr,这样出现了参数是基类句柄,但是copy_data函数内要作的确实扩展类的成员,就要将基类句柄参数赋值给扩展类句柄,

要将扩展类badtr类型的数据返回,所以必须用$cast(bad,tr)。

2) 优化途径二,最好的。前面的copy子程序都会创建一个新对象,改进的一种方法就是指定复制对象的存放地址。

 Virtual function  transaction copy(transaction to =null);if(to == null)copy = new();elsecopy = to;copy_data(copy);endfunction

l 抽象类和纯虚方法

背景:验证的目标之一是创建多个项目共享的代码。

目的:systemverilog 有两种方法创建共享的基类:抽象类和纯虚方法

Virtual class (抽象类):可以被扩展但是不能被直接例化。

Pure virtual function(纯虚方法):没有实体的方法原型,相当于一个声明。

1) 由抽象类扩展而来的类,只有在所以的虚拟方法都有实体的时候才能被例化,

2) 纯虚方法只能在抽象类中定义。

3)抽象类中,纯虚方法是没实体的,非纯虚方法最好也不写实体。

l 回调

背景:测试平台目的:创建一个不做任何修改就能在所有测试中使用的验证环境。要做到这点的关键是测试平台使用钩子,(什么是钩子?)钩子作用,在不修改原始类的情况下注入新的代码。采用virtual 方法,也可以在扩展类中覆盖基类方法,但是需要重复原方法的所有代码,并且它的修改将传播到它的所有扩展类中。

作用:回调就是一个钩子,在不修改原始类的情况下注入新的代码。

实现:回调任务在顶层中创建,在最低级即驱动器中调用。这样驱动器不需要知道测试的任何信息,它只需要使用一个可以在测试中扩展的通用类。

1) 使用回调注入干扰

回调的一个常见用法就是注入干扰,例如引入一个错误或者延迟。下面测试平台使用回调对象,随机地丢弃数据包。

扩展类是如何作用的?在扩展的回调类中注入错误,如何在驱动器中作用的?

关键是数据队列的作用,驱动器中使用了,回调基类的数据队列

回调基类是抽象类,在扩展的回调类中加入错误注入,而drive驱动类中,是回调基类的数据队列,在环境中将扩展类句柄让入驱动器类,回调基类的数据队列中。

  begin // Create error injection callback

Driver_cbs_drop dcd = new();

env.drv.cbs.push_back(dcd); // Put into driver

end

与前面扩展类作用的差异?

前面代码,要使扩展类中增加代码,需要使基类句柄指向扩展类句柄。

l 驱动器类:

下面的代码如何解释

2)回调也可以想scoreboard 发送数据或收集功能覆盖率。

 优点:你可能想过将scoreboard和功能覆盖数据组置于一个事物处理器中,通过邮箱连接到测试平台中,这是一种笨拙的方法,原因如下:测试平台组件几乎都是被动和异步的,组件只有在测试平台给他数据的时候才被唤醒,而且不会主动地向下游事物处理器传递信息。麻烦:1)这样一个需要同时监视多个邮箱的事物处理器复杂了;2)你可能在多个地方采集数据,但是事物处理器设计用来处理单个数据源回调。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Bootstrap 模态框提交表单

    在模态框中使用form表单 之前在写项目的时候用到过模态框,当时一知半解就用了网上现成的,现在又学习Bootstrap菜鸟教程,对模态框有了更深的理解。我此次把表单加入模态框,代码很简单,必要的地方都做了注释。需要的CSS、jQuery和JS我也使用了CDN的链接,复制后可以直接…...

    2024/4/18 1:46:52
  2. 基于ssm的java web简单学生信息管理系统

    基于SSM的学生信息管理系统java学生信息管理系统java系统mysql数据库课设毕设 1.包含源程序,数据库脚本。代码和数据库脚本都有详细注释。 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善 开发环境:Eclipse ,MYSQL,JDK1.8,Tomcat 7 涉及技术点: MVC模式、SpringMv…...

    2024/4/20 9:06:40
  3. 微信小程序----返回上一页刷新或当前页刷新

    WXRUI体验二维码如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢! 声明 bug: 在onShow中执行this.onLoad(),会导致页面第一次加载的时候数组加载两次! 造成原因:页面加载先执行onLoad,再执行的onShow,就会出现在onLoad加载一次数据,…...

    2024/4/23 14:55:09
  4. 【181212】VC++ 电力学校学员管理系统(Access)源代码

    源码下载简介一套简单的电力学校学员管理系统(VC+Access2000),完成基本的学员资料输入、修改、删除、查找、分班等操作。可以顺利编译,首次运行要先运行一个附带的数据库配置程序,然后在运行本系统。源码下载地址:点击下载备用下载地址:点击下载...

    2024/4/18 1:46:26
  5. Form 表单提交 和 Ajax 表单提交 的一些区别

    自己一些心得体会:1:form 表单提交后进行后台处理程序,没有直接返回值,只能进行后台处理,Form标签里的所有数据全部提交到后台ajax 表单提交,是可以局部提交,具有ajax的所有属性。。。引用:上述两种提交方式的区别和适用场景说明 情况一:提交并刷新当前页面,或者提交…...

    2024/4/21 11:11:01
  6. K8s-系统初始化.01

    内容转载自:https://github.com/opsnull/follow-me-install-kubernetes-cluster/blob/master/01.%E7%B3%BB%E7%BB%9F%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F.md上一篇:K8s-组件版本和配置策略.00集群机器(本文使用华为云服务器,CentOS 7…...

    2024/4/18 1:48:50
  7. 简易成绩管理系统(C#实验报告+项目源代码)

    项目展示项目源码下载地址免费下载地址项目运行安装步骤项目源码包中明确说明...

    2024/4/18 1:47:43
  8. matlab小技巧与verilog小技巧

    文章目录0、背景1、代码注释快捷键2、拼接[ ]3、以二进制写入文件4、verilog的文件写入操作5、verilog的文件读取操作 0、背景 本篇文章是作者的一些经验,方便快速的查询,如果转载请务必备注,否则本作者将关闭CSDN的自己的所有文章! 1、代码注释快捷键 注释代码:选中代码,…...

    2024/4/20 8:24:43
  9. 谷歌帮:中国最牛的创业帮派

    【导读】随着郭去疾的兰亭集势提交IPO申请,谷歌背景的创业者也逐渐浮出水面:创新工场创始人李开复、小米联合创始人林斌、友盟创始人蒋凡、木瓜移动创始人沈思、聚美优品联合创始人戴雨森、涂鸦移动创始人王晔……据统计,谷歌中国至少贡献了20个互联网公司的创始人或CEO,而…...

    2024/4/20 5:37:27
  10. js 监听表单提交事件,防止表单重复提交

    调用时用提交按钮click 事件,监听提交后按钮变灰可将监听事件单写函数 如下 $(#btn).click(function() {var items = {inputemail : [{type:null, errMsg:zhffTip.langs.errTpl.noText.stringFormat(邮箱)}, {type:email, errMsg: zhffTip.langs.errTpl.shippingAddress.strin…...

    2024/4/24 9:25:52
  11. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--我眼中的FPGA 和Verilog HDL(一)...

    黑金动力社区:http://www.heijin.org 声明:本文为原创作品,版权归akuei2及黑金动力社区共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/从即日起,由akuei2为黑金开发板编写的Verilog教程开始连载了,在此对akuei2的辛勤劳作表示深深的敬意。同时,我们黑金动…...

    2024/4/27 0:23:53
  12. K8s下Nacos集群-填坑记

    部署信息 1、K8S 1.16 2、nacos docker images lastest 2019-11-26 3、安装方式:https://github.com/nacos-group/nacos-k8s.git下的 mysql-master-nfs.yaml mysql-slave-local.yaml nacos-pvc-nfs.yaml 根据实际情况修改上述3个yaml,mysql的主从部署pods没啥坑。坑在nacos-p…...

    2024/4/18 1:51:43
  13. 学生管理系统常见错误总结

    学生管理系统就算告一段落吧.在写代码调试的过程中遇到了各种问题,总结了一下 ①SQL注入 问题描述 : 在学生管理系统的登录窗口,用户名输入"or=" 这样就可以直接进入系统,这就是系统的一个漏洞 概念: 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或…...

    2024/4/18 1:50:38
  14. 【ThinkPHP5初体验(二)2】数据库输出,父表包含子表,子表包含父表

    一、外键约束通俗一点比喻就是,一个深水埔老大下面有很多小弟,小弟的流动性很强,但是也要有个人当自己打个,不然没有旗号(子表的外键必须存在),小弟的改派对原帮会的大哥没影响(子表可以改变不受约束),但是如果帮会大哥改变的话,下面的小弟溃不成军,因为老大没了,…...

    2024/4/14 15:53:49
  15. System Verilog视频学习笔记(1)- Device Under Test

    Device Under Test内容来自启芯-System Verilog视频============================================================== 目录结构: 1、一个例子 --------1.1 Router端口 --------1.2 Router描述 --------1.3 时序 2、代码结构 3、个人总结===================================…...

    2024/4/11 23:13:24
  16. (kubernetes)k8s入门、单机版安装、kuberctl指令、k8s服务实例。

    k8s中文文档k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档。me的环境操作系统:centos7 docker:1.12.6环境跟me的不一致?不要慌,基本大部分操作都是行的通的。还慌?那就直接用网页在线版的kubernets吧kubernets单机版安装部署kubernetes部署算是有一定门槛的。为了不…...

    2024/4/20 10:59:22
  17. delaycall.js 修改表单延迟自动提交的 jQuery / Zepto 插件

    delaycall.js delaycall 是一个 jQuery / Zepto 插件,用于在用户完成某项操作后,延迟指定秒数后自动调动指定函数。如用户输入完内容后,延迟1秒,自动提交表单。 GitHub Repository https://github.com/yzchen0o0/delaycall git@OSC Repository http://git.oschina.net/cyzs…...

    2024/4/20 16:40:02
  18. java swing学籍管理系统代码下载

    原文:javaswing学籍管理系统代码下载源代码下载地址:http://www.zuidaima.com/share/1857521563175936.htm...

    2024/4/18 1:55:32
  19. Verilog学习笔记(1)-流水灯大PK

    转载地址:http://www.eefocus.com/lishutong/blog/12-09/285005_2131f.html最近拿到一本关于可编程数字逻辑方面(Verilog)的书。看了一部分,感觉写的一般。书的前半部分是关于FPGA一些原理性知识和开发流程的简介,这部分我觉得写得还不错。后面写Verilog部分基础语法,基本就…...

    2024/4/20 3:14:39
  20. 如何查看提交了表单form里的那些信息

    按F12;找到开发者模式中菜单内的Network,点进去;3.点击【提交】按钮;4.会出现一个这个5.把鼠标放上去(红框内的是提交form内input的name,蓝框内是该input的值)...

    2024/4/20 15:23:07

最新文章

  1. 【Redis 开发】Redis持久化(RDB和AOF)

    Redis持久化 RDBAOFRDB和AOF的区别 RDB RDB全称Redis DataBase Backup file &#xff08;Redis数据备份文件&#xff09;&#xff0c;也被称为Redis数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘读取…...

    2024/4/27 23:16:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Web大并发集群部署之集群介绍

    一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…...

    2024/4/23 0:10:31
  4. PHP+python高校教务处工作管理系统q535p

    开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp/Laravel 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 运行环境:phpstudy/wamp/xammp等 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方…...

    2024/4/26 8:31:01
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57