网站的平面设计图用ps做,seminar怎么读,网站推广优化技巧大全,网页设计教程ui01线程控制1.概述线程#xff0c;即独立运行的程序#xff1b;线程需要被触发执行#xff0c;可以结束或者不结束#xff1b;在module中的initial和always#xff0c;都可以看作独立的线程#xff0c;他们在仿真0时刻开始#xff0c;而选择结束或者不结束#xff1b;在… 01线程控制1.概述线程即独立运行的程序线程需要被触发执行可以结束或者不结束在module中的initial和always都可以看作独立的线程他们在仿真0时刻开始而选择结束或者不结束在硬件模块中都是always语句块所以可以看成是独立运行的线程而且会一直占用仿真资源因为他们不会结束验证环境需要initial语句块在仿真过程中验证环境中的对象可以创建和销毁故验证环境的资源是动态的验证环境中的initial语句块有两种方式begin……end或者fork……joinBegin……end中语句顺序执行而fork……join中语句并发执行与fork……join类似的并行语句有fork……join_any、fork……join_none;线程的执行轨迹是呈树状结构即任何线程都应该有父线程父线程可以开辟若干子线程父线程可以暂停或者终止子线程当子线程终止时父线程可以继续执行当父线程终止时其子线程都终止执行2.并行线程fork……join需要所有并行线程都结束才会继续执行fork……join_any其中任意一个线程结束就继续执行fork……join_none不等待子线程直接继续执行注意Fork……join_any和fork……join_none继续执行后其一些未完成的子线程仍将继续在后台执行如果要等待或者停止这些子线程可使用wait fork 或者disable forktask do_test; fork …… join_any fork …… join_none wait fork//等待所有子线程结束endtasktask get_first(output ubt adr); fork …… join_any disable fork;endtask3.时序控制SV可以通过延迟控制或者事件(event)等待来完成时序控制延迟控制即通过#来完成#100 clk2clk1事件(event)控制即通过来完成a clk1clk2 //等待事件(posedge clk)ab//边沿触发Wait语句可以与事件或者表达式结合使用Real AOR[]; Initial wait(AORsize()0) //wait语句完成电平触发02线程同步1.概述测试平台所有线程都需要同步并进行交换数据一个线程等待另一个线程2.事件event通过event声明一个event变量并且触发event变量可以由一端去触发再由另一端完成阻塞式的等待即可以用来控制多个线程之间的同步通过-来触发事件其他等待该事件的线程可以通过操作符或者wait()来检查事件触发状态来完成等待事件event done,blast; //声明两个独立的事件event done_toodone; //事件done赋值给done_tootask trigger(event ev); -ev; //触发ev事件endtask……fork done_too; //等待done_too #1 trigger(done); //触发done事件joinfork -blast; //触发blast事件 wait(blast.triggered); //电平触发等待joinwait_order() 可使得线程保持等待直到在参数列表中的事件event按照顺序从左往右依次完成wait_order(a,b,c);3.旗语(semaphore)旗语是一个互斥体使用旗语可以实现对同一资源的访问控制在创建旗语时会为其分配固定的钥匙数量使用旗语的进程必须先获得钥匙才可访问资源旗语的钥匙数量可以有多个等待旗语的进程也可以有多个旗语的等待队列是先进先出(FIFO)即先排队等待旗语的将优先得到钥匙旗语操作创建旗语semaphore sm//创建一个旗语smnew(1) //分配一个钥匙创建一个固定钥匙数量的旗语new从旗语获取一个或多个钥匙(阻塞型)get返回一个或多个钥匙put获取一个或多个钥匙而不被阻塞try_gettask send; sem.get(1) ///获取钥匙 …… sem.put(1); //处理完成时把钥匙返回endtask03线程通信1.信箱用于收发信息SV中信箱可以存放任何数据类型也可以从信箱中读取这些数据创建信箱new()将信息写入信箱put()写入信箱但不会阻塞try_put()获取信息get() 获取信息并取出数据 peek()获取信息不会取出数据从信箱获取数据但不会阻塞try_get()/try_peek()获取信箱信息数目num()2.信箱和队列区别信箱必须通过new()例化队列只需要声明信箱的存取方法put()和get()是阻塞方法不一定会立即返回队列的存取方法push_back和pop_front()是非阻塞方法会立即返回传递形式参数时如果是input方向则信箱类型传递的是句柄队列类型完成的是队列内容的拷贝3.总结event最小信息量的触发即单一的通知单元用来做事件的触发也可多个事件组合起来作线程之间的同步semaphore共享资源安全用于多线程间需要对某一公共资源做访问mailbpxSV类似FIFO在线程之间做数据通信或者内部数据缓存END往期相关(?猛戳可查看)SystemVerilogSystemVerilog两态数据类型SystemVerilog自定义、枚举、结构体类型SystemVerilog数组操作SystemVerilog数组类型SystemVerilog函数和任务SystemVerilog覆盖率$display(点个在看吧)