首页 > 其他分享 >09-Verilog-并发线程

09-Verilog-并发线程

时间:2023-02-11 18:22:05浏览次数:41  
标签:begin 09 end initial t0 并发 线程 Verilog

Verilog-线程

并发线程

verilog和C语言有一个最大的不同就是并发性

  • 并发--同时进行的过程
module tb_test;
  int a;
  initial begin
    a = 1;
    a = 2;
    a = 3;
  end
  
  initial begin
    A1
    #1
    //a = 1;
  end
  initial begin
    B1
    #1
    //a = 2;
    B2
  end
  initial begin
    C1
    #1
    C2
  end
  initial begin
    D1
    #1
    D2
  end
endmodule
  • initial begin end是并发的编程,在0时刻开始执行
  • 这里的四个initial begin就相当于上面图中的四个线程thread
  • initial是同时执行的,没有先后顺序
  • 如果两个initial在同一个时刻对于同一个变量a进行赋值,结果是不确定的,取决于两个线程谁先抢到a
module tb_test;
  int a;
  initial begin
    a = 1;   //t0
    a = 2;   //t0
    a = 3;   //t0 都是在t0时间点执行的,但是在t0这个时间点,从上到下执行
    #1;      //语句执行到a = 3得时候,下一条为延迟,程序会等待
  end
endmodule


  • 一个环境中有多个线程,会分为ready和wait状态的线程
  • ready状态就是当前状态还没有执行的线程,wait就是当前时刻下会被阻塞的线程,等待其他线程继续执行
  • 当正在执行的线程进入wait状态时,下一个ready状态的线程继续执行
module tb_test;
  int a ;
  initial begin 
      a = 1;        // 从to时刻开始执行a=1,a=2,a=3,这三条语句没执行完,这个线程处于ready状态
      a = 2;
      a = 3;
      #1
  end
  initial begin 
    #1            // t0时刻不执行任何操作,需要等待上面的线程在t0时刻的代码执行完毕之后,两个线程一起进行延迟1个时间单位 
  end             // 在t0时刻,这个线程处于wait状态

// 当第一线程执行完a=1,a=2,a=3三个语句之后,会从ready状态转变为wait状态,此时所有的线程都处于wait状态,进行下一个仿真周期
// 延迟1个时间单位

并发语句合集

  • initial 语句在整个仿真事件内只执行一次,initial语句都是并发的
  • always语句一直在执行,可以对于电路进行建模,always也是并发的
  • assign可以对于组合电路进行建模,assign语句都是并发的
  • begin ... end 内部语句从上到下依次执行
  • fork ... join 内部语句并发执行,同一时刻同时执行,与时间无关
int a,b,c;
fork
  statement 0;
  begin
    statement 1;
    statement 2;
  end
join

statement 3;

标签:begin,09,end,initial,t0,并发,线程,Verilog
From: https://www.cnblogs.com/Icer-newer/p/17111993.html

相关文章

  • verilog
    第一章绪论verilog--数字电路设计技术--ASIC/SOC芯片设计--协议pcieSATAUSB--系统知识(个人计算机,芯片组,网络连接,嵌入式系统,硬件和软件的互操作)第二章寄存器传输语言......
  • Java多线程07——JUC并发包03
    1线程的锁的synchronized、Lock、volatile区别1.1synchronized和volatile区别用法:volatile关键字解决的是变量在多个线程之间的可见性;synchronized关键字解决的是多......
  • [Java] 多线程系列之Fork/Join框架[转载]
    1工作原理1.1核心思想Fork/Join框架是Java7提供的一个用于并行执行任务的框架,核心思想就是把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果,其实......
  • 2023.02.09 闲话
    20230209没有来得及写。禁止无授权人员进入。如果你知道这是什么,密码是有关这件事的三个字母加8个数字。写的差不多了。下面是警示部分。啥都可以分块。多项式不......
  • [SA记录] P6095 [JSOI2015]串分割
    题目首先考虑到题目要求分割出的$k$个数中最大值尽量小,所以我们分割出的$k$个数的长度尽量相同。我们令$m=\lceil\frac{n}{k}\rceil$,那么这$k$个数中,有的长度为$m......
  • 07-verilog & sytem verilog
    数据类型二值逻辑变量bit不赋值的时候,变量初始默认为0x或z的值会转变为0bitvector--bit矢量bit[msb,lsb]variable_name=[initial_value]位宽:最高位为MSB......
  • redis 单线程? 多线程?
    redis单线程?多线程?没有锁的竞争,没有线程的上下文切换。主要的性能瓶颈是内存或者网络带宽而非CPU1.redis3.x版本,也就是大家口口相传的redis是单线程2.redis4.x版本,严......
  • C++多线程
    语言级别的多线程,优点是跨平台底层仍然是调用系统API(识别不同系统,调用不同的系统调用)创建线程头文件threadthread的构造函数:thread()noexcept//构造线程对象,不执行......
  • 线程同步
    一、为什么需要线程同步?1.对共享资源进行保护。这里的共享资源是指多个线程都会进行访问的资源。2.解决数据一致性问题。当一个线程可以修改的变量,其它的线程也可以读取......
  • Java多线程
    ​​Java多线程超详细!​​什么是线程?多线程?线程是一个程序内部的一条执行路径,我们之前启动程序执行后,main方法的执行其实就是一条单独的执行路径。多线程是指从软硬件上实......