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

# 02 初识Verilog HDL

02 初识Verilog HDL

对于Verilog的语言的学习,我认为没必要一开始就从头到尾认真的学习这个语言,把这个语言所有细节都搞清楚也不现实,我们能够看懂当前FPGA的代码的程度就可以了,随着学习FPGA深度的增加,再不断的去查阅不会的Verilog的语法。例如下面这个流水灯的程序,请带着能够看懂这段代码的目的去开始Verilog的入门学习吧!
module flow_led(input               sys_clk  , input               sys_rst_n, output  reg  [3:0]  led    );//reg define
reg [23:0] counter;//*****************************************************
//**                    main code
//***************************************************** always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)counter <= 24'd0;else if (counter < 24'd1000_0000)counter <= counter + 1'b1;elsecounter <= 24'd0;
endalways @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)led <= 4'b0001;else if(counter == 24'd1000_0000) led[3:0] <= {led[2:0],led[3]};elseled <= led;
endendmodule 

一. Verilog 简介

Verilog 是一种硬件描述语言,FPGA 开发主要有两种语言,Verilog 和 VHDL。 而 Verilog 更加容易上手, Verilog 是在 C 语言的基础上发展出来的。其语法也和 C 语言更加的接近,入门更加的简单,也是目前最多使用的。

特点:

1. 语法自由,易学易用。2.代码简单。3.发展速度快。3.适合算法级,门级设计。

二. Verilog 基础语法

1.逻辑值

(1) 0:低电平

(2) 1:高电平

(3) z : 高阻态

(4) x:未知状态

2. 关键字

module endmodule input outpt inout

2.2 变量

Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg)。

wire : 直接的连接,会被映射成真实的物理连接,表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。

**reg:**某一时间点状态的保持,会被映射成物理寄存器,用来表示存储单元,它会保持数据原有的值,直到被改写

reg [3:0]      counter ;    //声明4bit位宽的寄存器counter
wire [32-1:0]  gpio_data;   //声明32bit位宽的线型变量gpio_data

2.3 参数

二者之间有区别和联系,使用到再详细结介绍。

parameter:

localparam:

2.4 常量

表示格式 :[换算成二进制后的总长度]'[数制进制符号][与数值进制符号对应的数值]

8’d171: 位宽为 8,十进制的 171.

直接写 100,就表示 32’d100,模式是 10 进制 32 位宽,这是 verliog 中默认的。

3.赋值方式

Verliog 中的赋值方式有两种 阻塞赋值非阻塞赋值

阻塞赋值

a=1;b=2;

顺序执行,当执行完 a=1,才去执行 b=2;

非阻塞赋值

a<=1;b<=2;

两条语句是同时执行的。

4.常用的语句

过程结构语句有 2 种,initial 与 always 语句。它们是行为级建模的 2 种基本语句。

一个模块中可以包含多个 initial 和 always 语句,但 2 种语句不能嵌套使用。

这些语句在模块间并行执行,与其在模块的前后顺序没有关系。

但是 initial 语句或 always 语句内部可以理解为是顺序执行的(非阻塞赋值除外)。

每个 initial 语句或 always 语句都会产生一个独立的控制流,执行时间都是从 0 时刻开始。

4.1 always

4.2 initial

只在仿真文件中使用,不可综合的。

4.2 if else

和 c 语言中的使用一致。

if():
else():

4.3 case

在 c 语言的基础上,在结束的时候需要添加一个 endcase

case() <> : 语句1;<> : 语句2;default :
endcase 

4.4 assign( 全加器)

4.5 @(事件控制)

语句执行的条件是信号的值发生特定的变化。

关键字 posedge ​指信号发生边沿正向跳变,negedge ​指信号发生负向边沿跳变,未指明跳变方向时,则 2 种情况的。

5. 常用的运算符

基础的运算符的使用和 c 语言中大概相同,使用到的时候如果不会,自己复习一下就好,这里说明不常见的运算符,但在 Verliog 中经常使用到的。

5.1 位拼接运算符 {}

d = { a, b, c} // 将 a,b,c按顺序拼接成了d,注意的是a,b,c,d的宽度一定要符合。

5.2 条件运算符 ? :

也就是 c 语言中的三目运算符。

表达式1?表达式2:表达式3

如果表达式 1 为真,就执行 2,否则执行 3.

6. 系统函数

verliog 中系统预定义一些函数,完成特殊的功能,以下就是经常使用到的一些系统函数。

·timescale 1ns/1ns    //时间尺度预编译指令 时间单位/时间精度
$display("%d",1);       //用于输出,类似c语言中的print
$write("\n",1);            //用于输出,和display一样,但是display可以自动换行,wirte需要换行符
#1                               //表示延时的时间
$stop;                        //暂停仿真
$finish;                      //结束仿真
$time;                       //返回64位的当前时间

以反引号 ` 开始的某些标识符是 Verilog 系统编译指令。

相关文章:

# 02 初识Verilog HDL

02 初识Verilog HDL ‍ 对于Verilog的语言的学习&#xff0c;我认为没必要一开始就从头到尾认真的学习这个语言&#xff0c;把这个语言所有细节都搞清楚也不现实&#xff0c;我们能够看懂当前FPGA的代码的程度就可以了&#xff0c;随着学习FPGA深度的增加&#xff0c;再不断的…...

使用 Eziriz .NET Reactor 对c#程序加密

我目前测试过好几个c#加密软件。效果很多时候是加密后程序执行错误&#xff0c;或者字段找不到的现象 遇到这个加密软件用了一段时间都很正常&#xff0c;分享一下使用流程 破解版本自行百度。有钱的支持正版&#xff0c;我用的是 Eziriz .NET Reactor 6.8.0 第一步 安装 Ezi…...

Restclient-cpp库介绍和实际应用:爬取www.sohu.com

概述 Restclient-cpp是一个用C编写的简单而优雅的RESTful客户端库&#xff0c;它可以方便地发送HTTP请求和处理响应。它基于libcurl和jsoncpp&#xff0c;支持GET, POST, PUT, PATCH, DELETE, HEAD等方法&#xff0c;以及自定义HTTP头部&#xff0c;超时设置&#xff0c;代理服…...

提升市场调研和竞品分析效率:利用Appium实现App数据爬取

市场调研和竞品分析通常需要获取大量的数据&#xff0c;而手动收集这些数据往往耗时且容易出错。而利用Appium框架&#xff0c;我们可以轻松地实现自动化的App数据爬取&#xff0c;这种方法不仅可以节省时间和人力成本&#xff0c;还可以提高数据的准确性和一致性。 Appium是一…...

【Git笔记】之Git重命名详解

目录 一、Git重命名文件 二、Git重命名origin 三、Git重命名分支 四、Git重命名远程分支 五、Git重命名作者 六、Git clone重命名 七、Git重命名仓库 八、Git重命名文件夹后出现两个代码 九、Git重命名文件名 Git是一个非常流行的版本控制工具&#xff0c;它可以帮助程…...

201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

目录 ★ 工作队列介绍代码演示测试注意点1&#xff1a;注意点2&#xff1a; ★ 工作队列介绍 工作队列&#xff1a; 就是让多个消费者竞争消费同一个消息队列的消息&#xff0c;相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…...

了解三层架构:表示层、业务逻辑层、数据访问层

目录 背景&#xff1a; 三层架构 什么是三层: 分层的目的&#xff1a; 三层的结构关系​编辑 三层表现形式:​编辑 三层的优缺点&#xff1a; 总结: 背景&#xff1a; 三层架构是一种软件设计模式&#xff0c;可称为客户端-服务器-架构&#xff0c;把各个功能模块划分…...

三相空气开关

一、三相空开的作用 三相空气开关对任意一相出现过载或短路&#xff0c;均起到保护作用。 二、三相空气开关原理图&#xff1a; 1、老式空气开关 1)、短路时&#xff0c;电磁脱钩器工作 2)、过载时&#xff0c;发热元件引起双金属片弯曲&#xff0c;使脱钩器工作 3)、测试按…...

uniapp 单位rpx ,设计稿尺寸px处理方式

1.使用postcss-px2rpx 插件做全局的单位转换 npm install postcss-px2rpx -D npm 安装 2.postcss.config.js修改 module.exports {plugins: {postcss-px2rpx: {// 设计稿宽度&#xff0c;默认750designWidth: 750,// 需要转换的最小像素值&#xff0c;默认1pxminPixelValue: 1…...

@所有燃气企业,城燃企业数字化转型重点抓住的八个关键点

关键词&#xff1a;智慧燃气、燃气数字化、设备设施数字化 数字化转型是用信息技术全面重塑企业经营管理模式&#xff0c;是企业发展模式的变革创新&#xff0c;是企业从工业经济时代迈向数字经济时代的必然选择。加快推进企业数字化转型&#xff0c;打造数字时代企业业务运行…...

大数据学习(4)-hive表操作

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…...

第二证券:汇金增持有望催化银行板块 白酒企稳信号凸显

昨日&#xff0c;两市股指盘中震动上扬&#xff0c;创业板指、科创50指数一度涨超1%&#xff0c;但沪指午后涨幅逐渐回落。到收盘&#xff0c;沪指涨0.12%报3078.96点&#xff0c;深成指涨0.35%报10084.89点&#xff0c;创业板指涨0.8%报2003.9点&#xff0c;科创50指数涨1.29%…...

Kubernetes使用OkHttp客户端进行网络负载均衡

在一次内部Java服务审计中&#xff0c;我们发现一些请求没有在Kubernetes&#xff08;K8s&#xff09;网络上正确地实现负载均衡。导致我们深入研究的问题是HTTP 5xx错误率的急剧上升&#xff0c;由于CPU使用率非常高&#xff0c;垃圾收集事件的数量很多以及超时&#xff0c;但…...

oracle设置自增ID

CREATE SEQUENCE 序列名 START WITH 1 INCREMENT BY 1 MINVALUE 1 ORDER NOCYCLE; //CREATE SEQUENCE “QMS”.“Untitled” MINVALUE 1 INCREMENT BY 1 START WITH 1 ORDER NOCACHE 创建触发器&#xff1a; create or replace trigger 触发器名 before insert on “表名” fo…...

ubuntu22.04设置中文

安装了中文语言包。 sudo apt-get install language-pack-zh-hans将系统的默认语言设置为中文 sudo update-locale LANGzh_CN.UTF-8添加环境 /etc/profile 最后中添加 export LANGzh_CN.utf8 export LC_CTYPE"zh_CN.utf8"可以在~/.bashrc文件后面也加上...

Java中 创建不可变集合

常规写法 以往我们创建一些不可变集合的时候&#xff0c;通常是这样写的&#xff1a; // 不可变的Set Set<String> set new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set Collections.unmodifiableSet(set); //…...

options.css 内容优化2 --chatPGT

问&#xff1a; options.css 内容优化,功能列表的li,设置成点击按钮的样式&#xff0c;需要有鼠标经过高亮&#xff0c;选中时按钮背景颜色和未选中时的背景色需要有肉眼可见的色差 gpt: 为了使左侧功能列表的每个 <li> 元素看起来像按钮&#xff0c;并且在鼠标经过时…...

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片&#xff0c;内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器&#xff0c;而且本芯片可以通过检测信号频率 和主时钟频…...

Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习

本期为TechBeat人工智能社区第536期线上Talk&#xff01; 北京时间10月11日(周三)20:00&#xff0c;弗吉尼亚理工大学博士生—徐智阳、沈莹的Talk已准时在TechBeat人工智能社区开播&#xff01; 他们与大家分享的主题是: “通过多模态指令集微调提升VLM的零样本学习”&#xff…...

PLC编程速成(二)

目录 操作符 什么是操作符&#xff1f; 变量表&#xff08;数据类型&#xff09; 常用的类型&#xff1a; 变量表图 设置复位指令 如何重复双线圈与解决复双线圈问题&#xff1f; 解决复双线圈 ​编辑 重复双线圈 置复位指令&#xff08;有置位就存在复位&#xff09;…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...