【VerilogVCS仿真_2023.11.15】

HDL:硬件描述语言,并发,时序========RTL:寄存器传输级语言
Verilog和VHDL的区别:VHDL侧重于系统级描述——系统级设计人员所采用,Verilog侧重于模块行为的抽象描述——电路级设计人员

前端:系统级、算法级(c/matlab)、寄存器变换级(RTL Verilog/SV)
后端:逻辑门级、开关级、物理(版图)级

数字电路设计两个要素:线(wire)和器件(module)

RTL基本单元:寄存器、ALU、MUX等
电路的功能描述:算法状态机图、有限状态机、数据流图、控制流图

除endmodule、begin_end、fork_join外都要加分号
标识符只可以由字母、数字、下划线和$组成,开头必须是字母或下划线,是区分大小写的

数据类型

Verilog HDL19种中4个最基本的数据类型:Integer型(32位有符号整数)、parameter(符号常量)、reg型、wire型

常量

整数型常量:<位宽>'<进制><数字>
<数字>缺省十进制,32位

wire[31:0]a;//长度为32
wire[31] a;//长度为31,不建议

x表示不定值,z表示高阻值
最左边的x或z具有扩展性:8’bx1 =8’bxxxxxxx1
?是z的另一种表示符号,在case语句中使用

负数:在位宽前加一个减号
-8’d5 = 8’b1111_1011//5的补数(反码加1)

parameter常量的声明:module test # (parameter p=4’h1)
localparam和parameter的区别:parameter可做传递参数的接口

常用的三种变量:线网型,寄存器型,数组

线网型nets型:输出始终随输入的变化而变化的变量:wire,不能存值
表示以assign语句赋值的组合逻辑
缺省为wire型,位宽1bit

寄存器型register型:表示过程块(initial always task function)语句内的指定信号过程块中信号必须为reg型
reg生成触发器和组合逻辑,wire只能生成组合逻辑

数组型memory型:reg[n-1]存储器名[m-1;0];//m个位宽为n的存储单元
需指明赋值的存储单元rega[7:0]=0;//不合法 rega[7]=0;//合法

运算符

算术运算符(双目运算符):%取余:两侧均为整型,结果为第一个操作数的符号位;某一个为不定值x,结果为x
关系运算法(双目运算符):结果是逻辑值0、1、x,优先级低于算术运算符
逻辑运算符:&& ! ||,(a=3’bx0x && b=3’bx01) = (x && 1) = x非的优先级最高
位运算符:~按位取反 & | ^ ~/~同或,进行运算时位数少的高位自动补0
缩减运算符(单目运算符):& ~& | ~| ^ ~^,低位与第二位进行运算,直至最高位,结果缩减为1位二进制数 eg.b=|a;
移位运算符:用0补空位,左移扩充位数(乘以2n),右移数据丢失(除以2n)
位拼接符:{1’b0,xx……},{4{w}}={w,w,w,w},拼接时必须指明信号的位数,1默认为32位
等式运算符:(逐位相等结果为1,某些位为x或z结果为x) != =和!(case等式运算符,相应位完全一致结果为)xx;//x x===x;//1
条件运算符(三目运算符):信号=a?表达式1:表达式2;

运算符的优先级

在这里插入图片描述

连续赋值语句

assign语句,描述组合逻辑最常用的方法,不可出现在过程块中,并行的与位置顺序无关,与过程语句之间也是并行的

结构语句

在这里插入图片描述
不可综合的用在测试语句中

过程语句

always不断重复执行,直到仿真结束,initial只执行一次
always块中被赋值的只能是reg型,不加时序控制会导致仿真死锁(eg.always areg=~areg)
always@(*):电平触发,组合逻辑
如a=0等语句只能写在assign,always,initial赋值语句中,三者并行

块语句

begin_end

顺序执行语句,每条语句的延迟时间是相对于前一条语句的仿真时间而言的
begin:块名
块内声明语句;
语句;
end
存在块内声明语句(参数声明,reg变量声明,integer变量声明,real变量声明语句)时要加上块名

fork_join

并行执行语句,不可综合,用在测试文件中,时间排序在最后的语句执行结束或完成一个disable语句

条件语句

if-else语句

if(a)≠if(a==1)//当a为单比特时成立

case语句

每个值的位宽 必须相等,与控制表达式的位宽相同
在分支表达式中,?表示高阻态
按顺序判断,满足一个条件后执行就跳出case语句,故少用casex

casez,不匹配高阻态z的位
casex,不匹配高阻态z和不定值x的位
在这里插入图片描述
组合电路设计中,不加上else、default项,会生成隐含锁存器latch,q保持原值,加上后会生成选择器,故组合逻辑中必须要加上else、default项

循环语句

for语句

for(循环变量赋初值;循环执行条件;循环变量增值)执行语句

repeat语句

repeat(循环次数表达式)语句

while语句

while(循环执行条件表达式)执行语句
执行语句中必须有一条改变循环执行条件表达式的语句

forever语句

无条件连续执行forever后面的语句或语句块
必须要写在initial过程块中,不可综合,用在测试文件中
使用时块要加块名,然后用disable加块名,跳出循环

编译预处理语句

宏定义语句define 标志符(即宏名) 字符串(即宏内容)//没有分号 define IN a+b+c+d
使用方法:`IN

文件包含语句`include “文件名"或"文件绝对路径或相对编译文件的路径”//include后面一定要有空格

时间尺度语句`timescale

系统任务语句

显示和写任务:

$display(“a is %b”,a),二进制显示空位会显示零,十进制会空出位数,(%0b显示实际位数)自动换行
w r i t e 不会自动换行 write不会自动换行 %c或%C:ASCII字符,%s或%S:字符串,%t或%T:当前时间格式("%t", write不会自动换行time)
可以直接使用 t i m e , time, timedisplay($time,“%d”,a);//没有指定时间格式,按十进制显示
\n换行,\t制表符,\字符\

监控任务:

$monitor:连续监控指定的参数,参数发生变化打印
$monitoroff停止 $monitoron启动

文件输出任务:从文本文件中读取数据并将数据加载到存储器中

$readmemb读取二进制格式数
r e a d m e m h 十六进制格式: readmemh十六进制 格式: readmemh十六进制格式:readmemb(“<数据文件名>”,<存储器名>,<起始地址>,<结束地址>);//没有起始和结束地址则存储器从其最低位开始加载数据直到最高位

仿真时间函数

$time
$realtime
不同之处:返回64位整型时间/返回实型时间(带有小数)

随机函数random(伪随机)

rand=KaTeX parse error: Expected '}', got 'EOF' at end of input: …//-59~59 rand={rand}%60//0~59
在这里插入图片描述在这里插入图片描述

仿真控制任务

$finish(建议使用) $stop(只是暂停仿真)

阻塞赋值与非阻塞赋值

阻塞赋值立即改变,可综合的阻塞赋值操作不能设定有延迟(即使是零延迟,延迟后才赋值,不可综合)
非阻塞赋值在块语句结束后才赋值,只能对寄存器变量进行赋值,故只能用在initial和always块等过程块中,非阻塞赋值不允许用于连续赋值
always块建立组合逻辑模型时,用阻塞赋值
同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值,不要混用
赋值时不要使用#0延迟

任务和函数语句

task语句

任务定义:task<任务名>;
端口及数据类型声明语句;//不用声明数据类型,sv中默认为logic
其他语句;
endtask
任务调用:<任务名>(端口1,端口2……);//端口一一对应

多输入多输出
可包含定时控制语句 包含定时控制语句的任务是不可综合的(# @ wait)
任务的定义与调用必须在一个module中
可调用函数和任务函数
在任务定义结构内不能出现initial和always过程块
任务调用语句只能出现在过程块内

function语句

函数定义:function<返回值位宽或类型说明>函数名;//缺省返回1位reg型数据
端口声明;//至少一个输入参量,无输出(不可有输出或双向变量)
局部变量定义;
其他语句;//必须有一条赋值语句
endfunction
函数调用:<函数名>(端口)
函数在模块内部定义,通常在本模块中调用,也可以从其他模块调用
不可包含定时控制语句,可综合,每调用一次函数,相当于改变此电路的输入得到相应计算结果
可调用函数语句,不可任务函数

模块的调用

端口可以位置关联或名称关联

仿真:前(RTL)仿真,逻辑网表仿真,门级仿真和布线后仿真

tb文件中端口与输入端口连接为reg型,输出端口连接为wire型

inclule "xxx.v" timescale 1ns/1ps
可不写,files.f和Makefile文件已完成

时钟激励的产生

reg clk;
initial beginclk=0;
end
always #10 clk=~clk;
=====================
always begin#10 clk=0;#10 clk=1;
end
=====================
initial beginclk=0;forever #20 clk=~clk;
end

参数传递

module Decoder(A,F);
parameter W=1;
parameter P=1;
……
调用:Decode #(4,0) u_D2(a,b);//位置关联
Decode #(.W(4),.P(0)) u_D2(a,b);//位置关联

悬空端口

输入管脚悬空为高阻z,输出管脚悬空管脚废弃不用

VCS仿真mux2to1

源文件和tb文件代码,tb文件中输入为wire型,输出为reg型
在这里插入图片描述
将源文件、tb文件、Makefile、files.f放入一个mux2to1文件夹,进入文件夹运行make all
在这里插入图片描述

跑eda工具,执行命令make all,要和Makefile文件同级
在这里插入图片描述
点击向下小箭头显示波形

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区&#xff1a;先写一个.c文件如下&#xff1a; 我们执行一下这个程序时&…

【产品应用】一体化伺服电机在摆轮分拣机中的应用

随着物流和制造业的快速发展&#xff0c;分拣机的应用越来越广泛。摆轮分拣机作为一种常见的分拣设备&#xff0c;具有高效、准确、灵活等特点&#xff0c;被广泛应用于各类物流分拣场景。而一体化伺服电机在摆轮分拣机中的应用&#xff0c;为分拣机的性能提升和优化提供了新的…

专业视频剪辑利器Final Cut Pro for Mac,让你的创意无限发挥

在如今的数字时代&#xff0c;视频内容已经成为人们生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴&#xff0c;还是在工作中制作专业的营销视频&#xff0c;我们都希望能够以高质量、高效率地进行视频剪辑和制作。而Final Cut Pro for Mac作为一款专业级的视频剪辑软…

6.5 Windows驱动开发:内核枚举PspCidTable句柄表

在 Windows 操作系统内核中&#xff0c;PspCidTable 通常是与进程&#xff08;Process&#xff09;管理相关的数据结构之一。它与进程的标识和管理有关&#xff0c;每个进程都有一个唯一的标识符&#xff0c;称为进程 ID&#xff08;PID&#xff09;。与之相关的是客户端 ID&am…

【蓝桥杯软件赛 零基础备赛20周】第6周——栈

文章目录 1. 基本数据结构概述1.1 数据结构和算法的关系1.2 线性数据结构概述1.3 二叉树简介 2. 栈2.1 手写栈2.2 CSTL栈2.3 Java 栈2.4 Python栈 3 习题 1. 基本数据结构概述 很多计算机教材提到&#xff1a;程序 数据结构 算法。 “以数据结构为弓&#xff0c;以算法为箭”…

uniapp uview u-input在app(运行在安卓基座上)上不能动态控制type类型(显隐密码)

开发密码显隐功能时&#xff0c;在浏览器h5上功能是没问题的 <view class"login-item-input"><u-input:type"showPassWord ? password : text"style"background: #ecf0f8"placeholder"请输入密码"border"surround&quo…

麻吉POS集成:如何无代码开发实现电商平台和CRM系统的高效连接

麻吉POS集成的前沿技术&#xff1a;无代码开发 在竞争激烈的电商市场中&#xff0c;商家们急需一种高效且易于操作的技术手段来实现系统间的快速连接与集成。麻吉POS以其前沿的无代码开发技术&#xff0c;让这一需求成为可能。无代码开发是一种允许用户通过图形用户界面进行编…

LiteOS内存管理:TLSF算法

问题背景 TLSF算法主要是面向实时操作系统提出的&#xff0c;对于RTOS而言&#xff0c;执行时间的确定性是最根本的&#xff0c;然而传统的动态内存分配器&#xff08;DMA&#xff0c;Dynamic Memory Allocator&#xff09;存在两个主要问题&#xff1a; 最坏情况执行时间不确…

【LeetCode】栈和队列OJ题---C语言版

栈和队列OJ题 1.括号匹配问题&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路表述&#xff1a;&#xff08;3&#xff09;代码实现&#xff1a; 2.用队列实现栈&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路表述&…

Python学习路线 - Python语言基础入门 - 准备工作

Python学习路线 - Python语言基础入门 - 准备工作 初识PythonPython的优点 什么是编程语言Python环境安装Windows系统Python安装Python验证 MacOS系统Linux系统 第一个Python程序常见问题 Python解释器Python解释器概念Python解释器存放位置Python解释器运行".py"文件…

vue3请求代理proxy中pathRewrite失效

问题引入 在vue3配置请求代理proxy的时候pathRewrite失效。 有这样一个例子&#xff0c;作用是为了把所有以/api开头的请求代理到后端的路径和端口上&#xff0c;在vue.config.js配置文件中 设置了代理跨域和默认端口。但是重新运行之后发现端口是改了&#xff0c;但是路径仍然…

【工作生活】汽车ECU开发内容简介

目录 1. 目标 2. 要分享什么 3.1 行业知识 3.1.1车载行业知识&#xff1a; 3.1.2项目&#xff1a; 3.1.3开发测试工具&#xff1a; 3.2 硬件平台 3.3 基础知识 3.4 工作生活 3. 我们是谁 1. 目标 随着新能源汽车的快速崛起&#xff0c;汽车电子行业开始快速发展&…

Redis数据结构之跳表

跳表是一种有序的数据结构&#xff0c;它通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。其核心思想就是通过建立多级索引来实现空间换时间。 在Redis中&#xff0c;使用跳表作为Zset的一种底层实现之一&#xff0c;这也是跳表在Redis中的…

SpringBoot 集成 ChatGPT,实战附源码

1 前言 在本文中&#xff0c;我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序&#xff0c;能够利用 OpenAI ChatGPT API 生成对给定提示的响应。 您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语…

如何本地搭建个人hMailServer邮件服务并实现远程发送邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

VLAN间路由详细讲解

本次实验拓扑的主要概述以及设计到的相关技术 VLAN技术&#xff1a; VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直…

YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv&#xff0c;即空间和通道重构卷积&#xff0c;是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间&#xff08;形状、结构&#xff09;和通道&#xff08;色彩、深度&#xff09;信息&#xf…

数字图像处理(实践篇) 十六 基于分水岭算法的图像分割

目录 一 分水岭算法 二 利用OpenCV实现分水岭算法的过程 三 实践 一 分水岭算法 基于任何灰度图像都可以视为地形表面&#xff0c;其中高强度表示山峰和山丘&#xff0c;而低强度表示山谷。首先&#xff0c;开始用不同颜色的水&#xff08;标签&#xff09;填充每个孤立的山…

医院智能导诊小程序源码 智能导诊源码

医院智能导诊系统、AI智能导诊、现有的ai模型做医院智能导诊、智能就医引导系统、人工智能挂号、医院AI全流程智能导诊系统。 智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述…

flutter-一个可以输入的数字增减器

效果 参考文章 代码 在参考文章上边&#xff0c;主要是改了一下样式&#xff0c;逻辑也比较清楚&#xff0c;对左右两边添加增减方法。 我在此基础上加了_numcontroller 输入框的监听。 加了数字输入框的控制 keyboardType: TextInputType.number, //设置键盘为数字 inputF…