当前位置: 首页 > news >正文

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状态机设计

状态空间定义

状态跳转(时序逻辑)

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

各个状态下的动作

相关文章:

Verilog(未完待续)

Verilog教程 这个教程写的很好&#xff0c;可以多看看。本篇还没整理完。 一、Verilog简介 什么是FPGA&#xff1f;一种可通过编程来修改其逻辑功能的数字集成电路&#xff08;芯片&#xff09; 与单片机的区别&#xff1f;对单片机编程并不改变其地电路的内部结构&#xff0…...

【Linux实践室】Linux初体验

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux 目录结构介绍2.2 &#x1f514;Linux …...

Flutter中高级JSON处理:使用json_serializable进行深入定制

Flutter中高级JSON处理 使用json_serializable库进行深入定制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/1363…...

华为OD技术面试案例4-2024年

个人情况&#xff1a;985本&#xff0c;目标院校非计算机专业&#xff0c;情况比较特殊&#xff0c;23年11月研究生退学&#xff0c;电子信息类专业。 初识od&#xff1a;10月底打算退学的时候在智联、BOSS上疯狂投硬件方面的岗位。投了大概一两天后有德科和HW的HR打电话给我介…...

【TestNG】(4) 重试机制与监听器的使用

在UI自动化测试用例执行过程中&#xff0c;经常会有很多不确定的因素导致用例执行失败&#xff0c;比如网络原因、环境问题等&#xff0c;所以我们有必要引入重试机制&#xff08;失败重跑&#xff09;&#xff0c;来提高测试用例成功率。 在不写代码的情况没有提供可配置方式…...

“智农”-高标准农田

高标准农田是指通过土地整治、土壤改良、水利设施、农电配套、机械化作业等措施&#xff0c;提升农田质量和生产能力&#xff0c;达到田块平整、集中连片、设施完善、节水高效、宜机作业、土壤肥沃、生态友好、抗灾能力强、与现代农业生产和经营方式相适应的旱涝保收、稳产高产…...

利用 lxml 库的XPath()方法在网页中快速查找元素

XPath() 函数是 lxml 库中 Element 对象的方法。在使用 lxml 库解析 HTML 或 XML 文档时&#xff0c;您可以通过创建 Element 对象来表示文档的元素&#xff0c;然后使用 Element 对象的 XPath() 方法来执行 XPath 表达式并选择相应的元素。 具体而言&#xff0c;XPath() 方法是…...

nginx---------------重写功能 防盗链 反向代理 (五)

一、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;重写功能(…...

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…...

分类问题经典算法 | 二分类问题 | Logistic回归:公式推导

目录 一. Logistic回归的思想1. 分类任务思想2. Logistic回归思想 二. Logistic回归算法&#xff1a;线性可分推导 一. Logistic回归的思想 1. 分类任务思想 分类问题通常可以分为二分类&#xff0c;多分类任务&#xff1b;而对于不同的分类任务&#xff0c;训练的主要目标是…...

redis实现分布式全局唯一id

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1 使用 Redis 计数器实现2.2 使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1 导入依赖配置3.2 配置yml文件3.3 序列化配置3.4 编写获取工具3.5 测试获取工具 四、运行结果 一、前言 在很…...

Sora引发安全新挑战

文章目录 前言一、如何看待Sora二、Sora加剧“深度伪造”忧虑三、Sora无法区分对错四、滥用导致的安全危机五、Sora面临的安全挑战总结前言 今年2月,美国人工智能巨头企业OpenAI再推行业爆款Sora,将之前ChatGPT以图文为主的生成式内容全面扩大到视频领域,引发了全球热议,这…...

Android 14.0 Launcher3定制化之桌面分页横线改成圆点显示功能实现

1.前言 在14.0的系统rom产品定制化开发中&#xff0c;在进行launcher3的定制化中&#xff0c;在双层改为单层的开发中&#xff0c;在原生的分页 是横线&#xff0c;而为了美观就采用了系统原来的另外一种分页方式&#xff0c;就是圆点比较美观&#xff0c;接下来就来分析下相关…...

SemiDrive E3 MCAL 开发系列(3)– Wdg 模块的使用

一、 概述 本文将会介绍 SemiDrive E3 MCAL Wdg 模块的基本配置&#xff0c;并且会结合实际操作的介绍&#xff0c;帮助新手快速了解并掌握这个模块的使用&#xff0c;文中的 MCAL 是基于 PTG3.0 的版本&#xff0c;开发板是官方的 E3640 网关板。 二、 Wdg 模块的主要配置 …...

AI推荐算法的演进之路

推荐算法 基于大数据和AI技术&#xff0c;提供全流程一站式推荐平台&#xff0c;协助企业构建个性化推荐应用&#xff0c;提升企业应用的点击率留存率和永久体验。目前&#xff0c;主要的推荐方法包括&#xff1a;基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐…...

Tomcat安装,配置文件、组件

一、Tomcat的基本功能 1.1.Tomcat是什么&#xff1f; Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&#xff0c;T…...

精读《React Hooks 最佳实践》

简介 React 16.8 于 2019.2 正式发布&#xff0c;这是一个能提升代码质量和开发效率的特性&#xff0c;笔者就抛砖引玉先列出一些实践点&#xff0c;希望得到大家进一步讨论。 然而需要理解的是&#xff0c;没有一个完美的最佳实践规范&#xff0c;对一个高效团队来说&#x…...

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库&#xff0c;其支持将一个对象进行按照 JSON XML HTML 等格式进行转换&#xff0c;并获取到结果字符串&#xff01; 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…...

基于PHP的在线英语学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的在线英语学习平台 一 介绍 此在线英语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为学生&#xff0c;教师和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/…...

基于微信小程序电影院订票选座系统 (后台JSP+JDBC+Mysql)答辩常规问题和如何回答(答辩指导)

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...