Verilog(未完待续)

Verilog教程

这个教程写的很好,可以多看看。本篇还没整理完。

一、Verilog简介

什么是FPGA?一种可通过编程来修改其逻辑功能的数字集成电路(芯片)

与单片机的区别?对单片机编程并不改变其地电路的内部结构,只是根据要求实现的功能来编写运行的程序(指令)。举例:单片机就两个uart,但是我想用4个uart,单片机就没办法了。

什么是HDL?(hardware description language)硬件描述语言,用于描述数字电路结构和功能的语言。

Verilog和C的区别?Verilog硬件描述语言,在编译下载到FPGA之后,会生成电路,所以Verilog是并行运行的。C语言软件编程语言,编译下载到单片机之后,是存储器中的一组指令。而单片机处理软件指令需要取指、译码、执行,这个过程是串行执行的。


二、Verilog基础语法

2.1基础知识

2.1.1逻辑值

0:低电平,GND。

1:高电平,VCC。

X:未知,高或低。

Z:高阻态,外部没有激励信号,是一个悬空状态。

2.1.2数字进制格式

二进制(b)、八进制(o)、十进制(d)、十六进制(h)

2.1.3标识符

用于定义模块名、端口名、信号名。

字母、数字、$符号、_下划线。第一个字符必须是字母或者下划线。

严格区分大小写。

不建议大小写混合使用。

普通内部信号建议全部小写。

2.2数据类型

2.2.1寄存器类型reg

数据存储单元,默认初始值是不定值x。未写位宽的时候默认32位

reg类型数据只能在always和initial中赋值。

如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器。

如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线。

2.2.2线网类型wire、tri

线网类型便是结构实体之间的物理连线。不能存储值,它的值由驱动的元件所决定。

驱动线网类型变量的元件有门、连续赋值语句、assign等。

如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻态。

2.2.3参数类型parameter

常量,类似#define。可以一次定义多个参数,参数与参数之间需要用逗号隔开。每个参数定义的右边必须是一个常数表达式。

#

1.参数的传递

模块定义的时候传入参数,模块实例化的时候传入参数。

2.时序仿真中的延时

//延时2.5个时间单位后执行sys_clk_i信号的翻转
always #2.5 sys_clk_i = ~sys_clk_i;

2.3运算符

算数运算符:+、-、*、/、%

关系运算符:>、<、<=、>=、==、!=

逻辑运算符:!、&&、||

条件操作符:?:

位运算符:~、&、|、^

移位运算符:<<、>>;注意:左移位宽要增加、右移位宽不变。

拼接运算符:{}。{a,b[3:0]}

2.3.1优先级

2.4编译指令

1.`define, `undef

2.`include

3.`timescale

用于定义时延、仿真的单位和精度

`timescale      time_unit / time_precision
  • time_unit 表示时间单位,time_precision 表示时间精度,
  • 单位 s(秒),ms(毫秒),us(微妙),ns(纳秒),ps(皮秒)和 fs(飞秒)。
  • 时间单位≥时间精度
  • 编译过程中,`timescale会影响后面的模块中的时延值。直到遇到另一个`timescale或者`resetall。
  • 没有默认的`timescale,没有指定的情况下,会继承前面编译模块的`timescale参数,可能导致设计出错。
  • 一个设计多个模块都有`timescale时,时延单位不受影响,但是时延精度会换算成最小时延精度
  • 如果有并行子模块,子模块间的 `timescale 并不会相互影响。
  • 时间精度设置是会影响仿真时间的。时间精度越小,仿真时占用内存越多,实际使用的仿真时间就越长。所以如果没有必要,应尽量将时间精度设置的大一些。
  • 如果延时时间的最小位数小于时间精度,将会四舍五入。例如时间单位为10ns,精度为1ns,#1.04表示延时1.04个时间单位=1.04x10ns=10.4ns,但精度无法表示0.1ns,#1.04≈10ns

4.`default_nettype

5.`resetall

6.`celldefine, `endcelldefine

7.`unconnected_drive, `nounconnected_drive


三、程序框架

3.1Verilog注释

//、/**/、

3.2Verilog关键字

3.3Verilog程序框架

模块的结构

一个模块由两部分组成:一部分描述接口,一部分描述逻辑功能。

端口定义、IO说明、内部信号声明、功能定义。

模块的调用


四、高级知识点

4.1结构语句

1. initial

只执行一次。

常用于测试文件的编写,用来产生仿真测试信号(激励信号),或者用于对存储器变量赋初值。

2. always

一直不断地重复活动。

但是只有和一定的时间控制结合在一起才有作用。

always时间控制可以是沿触发或者电平触发。敏感列表

沿触发:

多个信号中间要用or连接。(posedge,negedge)

电平触发:(*)

4.2赋值语句

1.阻塞赋值(与C语言一样)

b = a;

描述组合逻辑时,用阻塞赋值。

2.非阻塞赋值(并行同时赋值)

b <= a;

只能用于对寄存器类型的变量进行赋值,只能用于initial和always中。

描述时序逻辑时,用非阻塞赋值。

注意:在同一个always块中不要既用非阻塞赋值又要阻塞赋值,不允许在多个always块中对同一个变量进行赋值。

组合逻辑

任意时刻输出仅仅取决于该时刻的输入,与电路原来的状态无关。

时序逻辑

任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态。或者说还与之前的输入有关,因此时序逻辑必须具备记忆功能。

4.3条件语句

条件语句必须在过程块(initial、always)中使用。

if-else

0,x,z按假处理。

if和else后面可以用begin end包含多个语句。

case

位宽必须相等。

casez,不用考虑表达式中的高阻值。

casex,不用考虑高阻值z和不定值x。

4.4函数

4.5任务

  • 任务的输入输出可以没有或者多个,且端口声明可以为 inout 型
  • 不能出现initial和always过程块。但可以包含其他时序控制,如延时语句。
  • 任务可以调用函数和任务。
  • 任务可以作为一条单独的语句出现语句块中。

4.5.1 任务声明

任务在模块中任意位置定义,并在模块内任意位置引用,作用范围也局限于此模块。

模块内子程序出现下面任意一个条件时,则必须使用任务而不能使用函数

  • 1)子程序中包含时序控制逻辑,例如延迟,事件控制等
  • 2)没有输入变量
  • 3)没有输出或输出端的数量大于 1

对 output 信号赋值时也不要用关键字 assign。为避免时序错乱,建议 output 信号采用阻塞赋值。

task       task_id ;port_declaration ;procedural_statement ;
endtask
task xor_oper_iner(input [N-1:0]   numa,input [N-1:0]   numb,output [N-1:0]  numco  ) ; #3  numco       = numa ^ numb ;
endtask

4.5.2 任务调用

task_id(input1, input2, …,outpu1, output2, …);

输入端连接的模块内信号可以是 wire 型,也可以是 reg 型。输出端连接的模块内信号要求一定是 reg 型

4.6状态机

4.6.1状态机概念FSM

在有限个状态之间按一定规律转换的时序电路

4.6.2状态机模型

状态寄存器由一组触发器组成,用来记忆状态机当前所处的状态,状态的改变只发生在时钟的跳变沿。

4.6.3状态机设计

状态空间定义

状态跳转(时序逻辑)

下个状态判断(组合逻辑)

各个状态下的动作

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

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

相关文章

Parallel Computing - 一文讲懂并行计算

目录 Throughput/LatencySerial ComputingParallel ComputingTypes of parallel computersSimple 4-width SIMDAmdahls lawTypes of parallelism**Data Parallel Model**Task parallel PartitioningDomain DecompositionFunctional Decomposition CommunicationsExample that d…

java调用chatgpt接口,实现专属于自己的人工智能助手

文章目录 前言导包基本说明请求参数响应参数创建请求和响应的VO类 代码编写使用最后说明 前言 今天突然突发奇想&#xff0c;就想要用java来调用chatget的接口&#xff0c;实现自己的聊天机器人&#xff0c;但是网上找文章&#xff0c;属实是少的可怜(可能是不让发吧)。找到了…

ESP32 web 对接华为云平台--MQTT协议

文章目录 前言一、MQTT协议二、如何使用MQTT协议对接华为云1.注册华为云账号2.设备接入中创建资源空间3.如何连接4.通过MQTT.fx工具做初步对接4.1 设置连接信息4.2 连接平台 5.查看平台设备信息 三. 设备测对接平台1.ESP测引入MQTT库2.编码2.1前端编码修改2.2 后端接口修改 3.M…

element-plus+vue3表单含图片(可预览)(线上图片)

一、要实现的效果&#xff1a; 二、如果期间出现这样的效果&#xff08;表格穿透过来了&#xff09;&#xff0c;加上了这行代码就可以了&#xff1a; preview-teleported“true” 如果仅测试用&#xff0c;建议使用线上图片链接的形式&#xff0c;免得本地地址不生效&#xf…

yolov9从头开始训练

yolov9从头开始训练 一、准备数据集 数据集相关文件存放布局如下 yolov9-datasets ├── train │ ├── images │ │ ├── image.jpg │ │ ├── │ └── labels │ ├── image.txt │ ├── ├── valid │ ├── images │ │ ├── image.jpg │ │ ├─…

吴恩达deeplearning.ai:模型选择交叉验证测试集的训练方法

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 在上一节中&#xff0c;我们了解了如何利用测试集来评估模型性能。今天我们来进一步完善这个想法&#xff0c;让你使用该技术自动选择一个更好的模型。 文章目录 模型选择交叉验证 Cross Va…

SpringBoot 框架(上)

SpringBoot SpringBoot概述依赖管理自动配置SpringBoot 注解使用ConfigurationImport(value {Cat.class,Dog.class})ImportResource(locations "classpath:beans.xml") yaml 标记语言概述基本语法数据类型字面量对象数组 使用细节 Rest 风格请求处理概述注意事项 接…

vue2 开发记录

el-select 如何修改选择项的样式/el-select-dropdown__item 文字上下显示 测试代码 <div stylemargin-left: 100px><!-- 测试代码--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

AVT Prosilica GC Vision Cameras 相机视觉说明使用安装。具体详情内容可参看PDF目录内容。

AVT Prosilica GC Vision Cameras 相机视觉说明使用安装。具体详情内容可参看PDF目录内容。

TikTok矩阵系统功能怎么写?常用源代码是什么?

TikTok矩阵系统的功能是如何编写的?又有哪些常用的源代码支撑这些功能呢?本文将通过五段源代码的分享&#xff0c;为大家揭开TikTok矩阵系统的神秘面纱。 一、TikTok矩阵系统的核心功能 TikTok的矩阵系统涵盖了多个核心功能&#xff0c;包括但不限于用户管理、内容分发、推…

【接口测试】HTTP协议介绍

目录 介绍 HTTP状态码 HTTP报文 请求方法 HTTP版本 HTTP标头 通用标头 请求标头 响应标头 get 编码 post 编码 RESTful风格 HTTPS 绝大多数的Web服务接口都是基于HTTP协议进行通信的&#xff0c;包括RESTful API和SOAP等。了解HTTP协议可以帮助测试人员理解接口的…

【多线程】CAS详解

目录 &#x1f334;什么是 CAS&#x1f338;CAS 伪代码 &#x1f38d;CAS 是怎么实现的&#x1f340;CAS 有哪些应⽤&#x1f338;实现原子类&#x1f338;实现自旋锁 &#x1f333;CAS 的 ABA 问题&#x1f338;**什么是 ABA 问题**&#xff1f;&#x1f338;ABA 问题引来的 B…

智慧城市建设的新里程碑:公共服务电子支付大屏

随着科技的飞速发展&#xff0c;我们的生活正在经历前所未有的变革。电子支付的出现&#xff0c;无疑是这场变革中的一大亮点&#xff0c;它不仅改变了我们日常的支付方式&#xff0c;更成为智慧城市建设的重要一环&#xff0c;为公众提供了更加便捷、高效的服务体验。 在以前&…

政府采购标书制作的要点解析

导语&#xff1a;政府采购是政府为满足公共利益&#xff0c;按照法定程序和标准&#xff0c;通过招标、竞争性谈判等方式&#xff0c;购买商品、工程和服务的行为。标书作为政府采购活动中的重要文件&#xff0c;其制作质量直接影响到项目的顺利进行。本文将围绕政府采购标书制…

二路归并排序的算法设计和复杂度分析and周记

数据结构实验报告 实验目的: 通过本次实验&#xff0c;了解算法复杂度的分析方法&#xff0c;掌握递归算法时间复杂度的递推计算过程。 实验内容&#xff1a; 二路归并排序的算法设计和复杂度分析 实验过程&#xff1a; 1.算法设计 第一步&#xff0c;首先要将数组进行…

【网站项目】314学生二手书籍交易平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

JVM相关面试题(2024大厂高频面试题系列)

一、JVM的组成 1、JVM由哪些部分组成&#xff0c;运行流程是什么&#xff1f; 回答&#xff1a;在JVM中共有四大部分&#xff0c;分别是Class Loader&#xff08;类加载器&#xff09;、Runtime Data Area&#xff08;运行时数据区&#xff0c;内存分区&#xff09;、Execut…

MyBatis的补充用法

说明&#xff1a;之前介绍过MyBatis的用法&#xff0c;像 用注解和Mapper.xml操作数据库、在Mapper.xml里写动态SQL。最近在一次用MyBatis批量更新数据库对象的场景中&#xff0c;意识到对MyBatis的一些标签用法不太熟悉&#xff0c;所以去 MyBatis官网 看了一些文档&#xff0…

php httpfs链接hdfs

一.代码&#xff08;有bug&#xff09; GitHub - michaelbutler/php-WebHDFS: A PHP client for WebHDFS 二.调用代码 1.代码1.代码 require_once(../webhdfs/src/org/apache/hadoop/WebHDFS.php);require_once(../webhdfs/src/org/apache/hadoop/tools/Curl.php); require_o…

什么是人才储备?如何做人才储备?

很多小伙伴都会有企业面试被拒的情况&#xff0c;然后HR会告诉你&#xff0c;虽然没有录用你&#xff0c;但是你进入了他们的人才储备库&#xff0c;那么这个储备库有什么作用和特点呢&#xff1f;我们如何应用人才测评系统完善人才储备库呢&#xff1f; 人才储备一般有以下三…