09-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;
09-Verilog-并发线程的更多相关文章
- Java--Semaphore控制并发线程数量
package com; import java.util.concurrent.Semaphore; /** * Created by yangyu on 16/11/28. */ /** * Se ...
- 调整Tomcat的并发线程到5000+
调整Tomcat的并发线程数到5000+ 1. 调整server.xml的配置 先调整maxThreads的数值,在未调整任何参数之前,默认的并发线程可以达到40. 调整此项后可以达到1800左右. ...
- 使用CountDownLatch和CyclicBarrier处理并发线程
闲话不说,首先看一段代码: { IValueCallback remoteCallback = new IValueCallback.Stub() { <strong><span s ...
- Java 并发 线程同步
Java 并发 线程同步 @author ixenos 同步 1.异步线程本身包含了执行时需要的数据和方法,不需要外部提供的资源和方法,在执行时也不关心与其并发执行的其他线程的状态和行为 2.然而,大 ...
- Java 并发 线程的优先级
Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于 ...
- Java 并发 线程属性
Java 并发 线程属性 @author ixenos 线程优先级 1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程 2.默认情况下,一个线程继承它的父线程的优先级 当在一个运行的线 ...
- Java 并发 线程的生命周期
Java 并发 线程的生命周期 @author ixenos 线程的生命周期 线程状态: a) New 新建 b) Runnable 可运行 c) Running 运行 (调用 ...
- Java高并发 -- 线程池
Java高并发 -- 线程池 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 在使用线程池后,创建线程变成了从线程池里获得空闲线程,关闭线程变成了将线程归坏给线程池. ...
- Java高并发--线程安全策略
Java高并发--线程安全策略 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 不可变对象 发布不可变对象可保证线程安全. 实现不可变对象有哪些要注意的地方?比如JDK ...
- 根据CPU核心数确定线程池并发线程数
一.抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 第一派:<Java Concurrency in Practice>即&l ...
随机推荐
- windows 和 Linux 下 git status 结果不一致
解决该问题 运行一下命令即可 git config core.autocrlf true 解释 git config core.autocrlf true 这个命令是在任何支持的操作系统上都可以运行的 ...
- 什么是HuggingFace
一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub,提供了模型.数据集(文本|图像|音频|视频).类库(比如transformers|peft|a ...
- CANN 5.0硬核技术抢先看
摘要:2021年12月,CANN5.0版本也将与大家正式见面,通过软硬件协同优化,该版本将会实现训练性能再翻倍,凭实力展现AI领域的「中国速度」! 本文分享自华为云社区<CANN 5.0硬核技术 ...
- 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:GaussDB(D ...
- Linux上非root用户jdk环境变量配置
1.设置用户环境变量vi .bash_profile 或者是 vi ~/.bashrc 2.JAVA_HOME=/home/sgmm/jdk1.6.0_13 CLASSPATH=$JAVA_HOME/ ...
- 开心档之MySQL 创建数据库
MySQL 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 ...
- ipa如何安装到iphone
Sign In - Apple app管理中心: https://appstoreconnect.apple.com/ apple ID管理中心: Manage your Apple ID 工具只 ...
- 火山引擎DataLeap的Data Catalog系统公有云实践 (下)
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 Data Catalog公有云遇到的挑战 Data Catalog经历了一个从0到1在火山引擎公有云部署并逐步优化 ...
- bat cmd 无效参数/选项 - deleting
Window bat expdp 数据库定时任务逻辑备份数据库 定时删除N天前的旧文件 Linux shell crontab expdp 定时任务逻辑备份数据库 定时删除旧文件 错误配置 forfi ...
- cxf 动态调用 WebService No compiler detected, make sure you are running on top of a JDK instead of a JRE
WebService cxf No compiler detected, make sure you are running on top of a JDK instead of a JRE [202 ...