行为级建模
1、结构化过程语句
verilog有两种结构化过程语句: always initial
verilog本质上是并发的。
//声明初值//方法一
reg clk ;
initialclk = 1'b0 ;//方法二
reg clk = 1'b0 ;
2、过程赋值语句
阻塞赋值
非阻塞赋值
非阻塞赋值可以避免竞争:
第一种阻塞赋值会产生竞争的情况,a = b b = a 执行的先后取决与仿真器。
第二种非阻塞赋值避免了竞争,达到了 交换 a b 的效果。
//阻塞赋值
always@( posedge clk )begina = b ;end
always@( posedge clk )beginb = a ;end//非阻塞赋值
always@( posedge clk )begina <= b ;end
always@( posedge clk )beginb <= a ;end
3、时序控制
verilog提供三种时序控制方法:
基于延迟的时序控制、基于事件的时序控制、电平敏感的时序控制
基于延迟的时序控制
initialbeginx = 1'b0 ;#10x = 1'b1 ;end
基于事件的时序控制
常规事件控制、命名事件控制、or事件控制、电平敏感时序控制
//命名事件控制event received_data ;always@( posedge clk )beginif( last_data )begin->received_data ;endendalways@( received_data )begindata = ......... ;end
->received_data 表示事件的触发。关键词 event 表示 事件 。
电平敏感的时序控制
alwayswait(count_enable) #20 count = count + 1'b1 ;
当 count_enable为 1 的时候执行,为0的时候仿真会不执行后面的语句,会停顿下来。
4、条件语句
if( )beginend
else if( )beginend
elsebeginend
5、多支路语句
case casex casez
always@( posedge clk )begincase( {s1,s0} )2'd0: out = in1 ;2'd1: out = in2 ;2'd2: out = in3 ;2'd3: out = in4 ;default: out = in1 ;endcaseend
6、循环语句
while for repeat forever
//whilewhile( )beginend//forfor( ; ; )beginend//repeatrepeat(128) ;//循环128次//foreberinitialbeginforever #10 clk = ~clk ;end
7、顺序块和并行块
顺序块:语句按照顺序执行。
begin end
1、语句一条一条执行、
2、延迟 是相对于前面那条语句的完成时间。
并行块:所有语句一起执行。
fork join
块语句的命名:
always@( posedge clk )begin:xxxxxxxxend
块的禁用:disable
initialbegini = 0 ;begin: block1while( i < 16 )beginif( )begindisable block1 ;endendend end
8、生成块
genvar i ;generate for( i = 0 ;i < 100 ;i=i+1 )beginend
endgenerate
9、demo 交通信号灯
code:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2025/03/07 15:34:34
// Design Name:
// Module Name: sig_control
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//`define TURE 1'b1
`define FALSE 1'b0//延迟
`define Y2R_DELAY 3
`define R2G_DELAY 2module sig_control(output reg [1:0] hwy ,output reg [1:0] cntry ,input wire x ,input wire clk ,input wire rst_n );parameter RED = 2'd0 ;parameter YELLOW = 2'd1 ;parameter GREEN = 2'd2 ;//定义状态 HEW CNTRYparameter S0 = 3'd0 ;//green redparameter S1 = 3'd1 ;//yellow redparameter S2 = 3'd2 ;//red redparameter S3 = 3'd3 ;//red greenparameter S4 = 3'd4 ;// red yellowreg [2:0] state ;reg [2:0] next_state ;always@( posedge clk or negedge rst_n )beginif( rst_n == 0 )beginstate <= S0 ;endelsebeginstate <= next_state ;end endalways@(*)begincase( state )S0:beginif( x == 1 )beginnext_state = S1 ;endelsebeginnext_state = S0 ;endendS1:beginrepeat(`Y2R_DELAY) @(posedge clk) ;next_state = S2 ;endS2:beginrepeat(`R2G_DELAY) @(posedge clk) ;next_state = S3 ; endS3:beginif( x == 1 )beginnext_state = S3 ;endelsebeginnext_state = S4 ; endendS4:beginrepeat(`Y2R_DELAY) @( posedge clk ) ;next_state = S0 ;enddefault:beginnext_state = S0 ;endendcaseend always@( posedge clk )begincase( state )S0:beginhwy <= GREEN ;cntry <= RED ;endS1:beginhwy <= YELLOW ;cntry <= RED ;endS2:beginhwy <= RED ;cntry <= RED ;endS3:beginhwy <= RED ;cntry <= GREEN ;endS4:beginhwy <= RED ;cntry <= ~YELLOW ;enddefault:beginhwy <= GREEN ;cntry <= RED ;endendcase end endmodule
tb
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2025/03/07 15:35:01
// Design Name:
// Module Name: tb_sig_control
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module tb_sig_control();wire [1:0] MAIN_SIG ,CNTRY_SIG ;reg CAR_ON_CNTRY_RD ;reg clk,rst_n ;sig_control sig_control_inst(.hwy (MAIN_SIG) ,.cntry (CNTRY_SIG) ,.x (CAR_ON_CNTRY_RD) ,.clk (clk) ,.rst_n (rst_n));initialbegin:monitor$monitor($time,"Main_sig = %b Cntry_sig = %b CAR_ON_CNTRY_RD = %b ",MAIN_SIG,CNTRY_SIG,CAR_ON_CNTRY_RD ) ;endinitialbegin // clkclk = `TURE ;forever #5 clk = ~clk ;endinitial //rstbeginrst_n = 1'b0 ;repeat(5) @( posedge clk ) ;rst_n = 1'b1 ; endinitialbeginCAR_ON_CNTRY_RD = 1'b0 ;repeat (20) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b1 ;repeat (10) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b0 ;repeat (20) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b1 ;repeat (10) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b0 ;repeat (20) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b1 ;repeat (10) @( posedge clk ) ;CAR_ON_CNTRY_RD = 1'b0 ;repeat ( 10 ) @( posedge clk ) ;$stop ; endendmodule
相关文章:
行为级建模
1、结构化过程语句 verilog有两种结构化过程语句: always initial verilog本质上是并发的。 //声明初值//方法一 reg clk ; initialclk 1b0 ;//方法二 reg clk 1b0 ;2、过程赋值语句 阻塞赋值 非阻塞赋值 非阻塞赋值可以避免竞争:…...
linux安装java8 sdk,使用 tar.gz安装包手动安装
1. 下载 Java 8 SDK 首先,需要从 Oracle 的官方网站或 OpenJDK 的网站下载 Java 8 的 .tar.gz 文件。并上传到服务器 2. 解压 JDK 下载完成后,使用 tar 命令解压文件。打开服务器终端,然后使用以下命令: tar -xvzf jdk-8uXXX-…...
6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用
目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch, 简称 ES,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,res…...
【python爬虫】酷狗音乐爬取练习
注意:本次爬取的音乐仅有1分钟试听,仅作学习爬虫的原理,完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌,在请求里发现一段mp3文件,复制网址,确实是我们需要的url。 复制音频的…...
计算机视觉cv2入门之图像空域滤波(待补充)
空域滤波 空域滤波是指利用像素及像素领域组成的空间进行图像增强的方法。这里之所以用滤波这个词,是因为借助了频域里的概念。事实上空域滤波技术的效果与频域滤波技术的效果可以是等价的,而且有些原理和方法也常借助频域概念来解释。 原理和分类 空域滤波是在图…...
杂项知识笔记搜集
1.pygame pygame可以画出来图形界面,pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux ,是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出࿰…...
代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
108. 冗余连接 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…...
选择排序算法的SIMD优化
一、优化原理 将查找数组最小值索引的SIMD优化的函数嵌入选择排序主循环,优化最耗时的最小值查找环节,同时保留选择排序的交换逻辑。 二、关键改造步骤 1)最小值查找模块化 复用SIMD优化的 find_min_index_simd函数。 2)动态子数组处理 每次循环处理 arr[i..n-1] 子数…...
Java本地方法根据线上地址下载图片到本地然后返回本地可以访问的地址
【需求】A和B两台服务器,A是云服务器,B是本地服务器,A和B上部署了一模一样的springboot代码,代码分为前后端,其中在B上前端请求先请求B的后端然后B转发到A的后端,然后A返回给B,B再返回给B的前端…...
游戏引擎学习第149天
今日回顾与计划 在今天的直播中,我们将继续进行游戏的开发工作,目标是完成资产文件(pack file)的测试版本。目前,游戏的资源(如位图和声音文件)是直接从磁盘加载的,而我们正在将其转…...
SpringBoot Test详解
目录 spring-boot-starter-test 1、概述2、常用注解 2.1、配置类型的注解2.2、Mock类型的注解2.3、自动配置类型的注解2.4、启动测试类型的注解2.5、相似注解的区别和联系 3、SpringBootTest和Junit的使用 3.1、单元测试3.2、集成测试 4、MockMvc 4.1、简单示例4.2、自动配置4…...
PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!
PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)! 当我们成功接入大模型时,可以选中任意代码区域进行解答,共分为三个区域,分别是选中区域、提问区域以及回答区域,我…...
升级到碳纤维齿轮是否值得?
引言:当齿轮开始“减肥” 在F1赛车的变速箱里,一个齿轮的重量减轻100克,就能让圈速提升0.1秒; 在无人机旋翼传动系统中,轻量化齿轮可延长续航时间15%; 甚至在高端机械腕表中,碳纤维齿轮的引入…...
基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】
基于SpringBootVue的瑜伽课体验课预约系统 一、系统技术说明二、运行说明三、系统的演示四、系统的核心代码演示 一、系统技术说明 框架:SpringbootVue 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软…...
文章被检测出是AI写的怎么办?
随着人工智能技术的飞速发展,AI辅助写作工具逐渐普及,为学生、科研人员以及创作者带来了诸多便利。然而,随之而来的是对学术诚信和内容原创性的担忧。当文章被检测出是AI写作时,应该如何应对?本文将探讨这一问题&#…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14基础固定表头示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【英伟达AI论文】多模态大型语言模型的高效长视频理解
摘要:近年来,基于视频的多模态大型语言模型(Video-LLMs)通过将视频处理为图像帧序列,显著提升了视频理解能力。然而,许多现有方法在视觉主干网络中独立处理各帧,缺乏显式的时序建模,…...
[Lc10_hash] 总结 | 两数之和 | 字符重排 | 存在重复元素 i ii | 字母异位词分组
目录 1.介绍 2.两数之和 题解 3.面试题 01.02. 判定是否互为字符重排 题解 4.存在重复元素 题解 5.存在重复元素 II 题解 ⭕6.字母异位词分组 题解 1.介绍 哈希表是什么? 存储数据的容器前文:[C_] set | map | unordered_map 有什么用呢?…...
缓存之美:Guava Cache 相比于 Caffeine 差在哪里?
大家好,我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理,并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易,我们还是在开篇介绍它的原理: Guava Cache 通过分段(…...
小组件适配屏幕主题色
iOS 18 新增Home screen Tint Color(色调)选择,用户可以通过以下方式自定义主屏幕颜色,并且小组件,APP 图标也会跟随改颜色。 比如说意料之外的小组件(不兼容) 白色部分内部应该还有其他显示内…...
IO学习---->线程
1.创建两个线程,分支线程1拷贝文件的前一部分,分支线程2拷贝文件的后一部分 #include <head.h> sem_t sem; long half_size 0; // 全局变量,供所有线程共享void* product(void *arg) {FILE *src fopen("IO.text", "…...
个人记录,Unity资源解压和管理插件
就是经典的两个AssetStudio 和 Ripper 没有什么干货,就是记录一下,内容没有很详细 AssetStudio 说错了,AssetStudio比较出名(曾经),但好像堕落了 这个工具有个好处就是分类选择,(…...
Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。
當 Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。我對內容進行了補充和重新組織,希望能幫助你更高效地處理這類問題: 權限相關問題處理 檢查文件和目錄權限: 確保 WordPress 安裝目錄…...
Java反射与动态代理:框架设计的基石
一、反射机制深度解剖(Java 17新特性) 1. Class对象获取六大途径 // 1. 类名.class Class<?> clazz1 String.class; // 2. 对象.getClass() String str ""; Class<?> clazz2 str.getClass(); // 3. Class.forName(…...
day19-前端Web——Vue3+TS+ElementPlus
目录 1. Vue工程化1.1 介绍1.2 环境准备1.2.1 NodeJS安装双击安装包选择安装目录验证NodeJS环境变量配置npm的全局安装路径 1.3 Vue项目-创建1.4 Vue项目开发流程1.5 API风格1.6 案例 2. TS2.1 概述2.2 快速入门2.3 常用类型2.3.1 基础类型2.3.2 联合类型2.3.3 函数类型2.3.4 对…...
隐私保护在 Facebook 用户身份验证中的应用
在这个数字化的时代,个人隐私保护成为了公众关注的焦点。社交媒体巨头 Facebook 作为全球最大的社交平台之一,拥有数十亿用户,其在用户身份验证过程中对隐私保护的重视程度直接影响着用户的安全感和信任度。本文将探讨 Facebook 在用户身份验…...
【JavaWeb学习Day23】
Maven高级 分模块设计与开发 分模块设计:将一个大项目分成若干个子模块,方便项目的维护、扩展,也方便模块间的相互引用,资源共享。 策略: 1.策略一:按照功能模块拆分,比如:公共组…...
个人记录的一个插件,Unity-RuntimeMonitor
没有什么干货,仅仅是个人的记录 基于GUI做的一个工具:好处就是Monitor必须,Unity天然支持实时的Monitor;唯一不好处,就是默认字体太小了,layout居中,居右也是要自行设计的。 (下面文字是有一点点写错,但意思和功能就很牛逼了;并不是都按2 x shift,而是一个 shift 添…...
【NexLM 开源系列】如何封装多个大模型 API 调用
🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台ÿ…...
Git和GitHub基础教学
文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...
