# 02 初识Verilog HDL

news2024/11/21 2:31:25

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) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1000_0000)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd1000_0000) 
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end

endmodule 

一. 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 系统编译指令。

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

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

相关文章

设计模式 - 行为型模式考点篇:观察者模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 1.1、观察者模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 1.1、观察者模式 1.1.1、概述 观察者模式又称为 发布 - 订阅 模式.&#xff0c;就是让多个观察者对象同时监听同一个主题对象. 这个主题对象在变化的同…

详解一典型的反激式开关电源方案

理解一个单端反激式开关电源方案&#xff1a; 1、抛出问题&#xff1a; 如图&#xff0c;在某系统方案上看到下图所示的单端反激式开关电源方案。 2、解析问题&#xff1a; 2.1、乍一看&#xff1a; 典型的AC-DC电路&#xff0c;考虑了安规及过压过流保护&#xff0c;如&am…

黑马点评-06缓存雪崩问题(大量key失效)及其解决方案

缓存雪崩问题(大量key失效) 解决方案 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库给服务器带来巨大压力 当我们批量导入缓存数据的时候可以给不同的Key的TTL添加随机值,让其在不同时间段分批失效利用Redis集群提高服务的可用性 使…

用低代码轻松实现高效、易用的流程审批表单

在企业运营中&#xff0c;流程引擎表单的配置和使用是一个重要的环节。无论是发起人、审批人还是其他角色&#xff0c;他们在流程中所看到的表单内容可能会有所不同&#xff0c;因此我们需要根据不同的场景灵活选择和设计表单。每一个流程节点都需要一个表单&#xff0c;通过灵…

基于BES平台音乐信号处理之DRC算法实现

基于BES平台音乐信号处理之DRC算法实现 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;加我微信hezkz17, 本群提供音频技术答疑服务 1 DRC实现 drc.h 2 调用 audio_process.c 3 DRC动态范围控制算法在音乐信号处理中的位置 4 DRC具体细节源码 可参考…

C++QT-day4

#include <iostream> //运算符重载 using namespace std;class Person { // //全局函数实现运算符重载 // friend const Person operator(const Person &L,const Person &R); // //全局函数实现-运算符重载 // friend const Person operator-(const …

【LeetCode】——链式二叉树经典OJ题详解

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法头疼记&#xff1a;算法专栏…

PTE考试预览

目录 pte评分机制是对比 不同水平的人之后跟你匹配 前两次 两个听力题没有写 咯噔一下 无源65分 Headset Check 调试耳机听筒 Microphone zhigeiCheck 调试麦克风 麦克风测试话语 老师说她放在鼻梁骨那里声音很好 自我介绍 读完之后 &#xff0c;立马点next&#xf…

PostgreSQL安装错误:Problem running post-install step

问题描述 安装包&#xff1a;pgpostgresql-14.9-1-windows-x64 postgresql-16.0-1-windows-x64 采取措施 一、 首先安装的是16版本的程序&#xff0c;报错后卸载尝试安装14版本软件&#xff0c;依旧报错。 二、 网上搜索&#xff0c;发现该博客&#xff1a; PostgreSQL安…

基于YOLOv8模型的足球目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的足球目标检测系统可用于日常生活中检测与定位足球目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

.NET与C#未来大流行是必然趋势

python性能差、应用范围有限&#xff0c;虽然目前很流行 C门槛高 C语言只适合底层 java大势已去 c#似乎是综合实力最强的语言&#xff0c;而且开发调试都很简单&#xff0c;适合很多行业&#xff0c;开发成本低。

Web服务器概述及http协议

Web Server&#xff08;网页服务器&#xff09; 一个 Web Server 就是一个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;。其主要功能是通过 HTTP 协议与客户端&#xff08;通常是浏览器&#xff08;Brow…

远程发送剪切板,屏幕截图

使用场景 线上答题时一般有录屏&#xff0c;局域网内可发送内容到电脑上剪切板&#xff0c;电脑上直接CtrlV双机位看不到屏幕是可以远程截屏 下载 访问地址下载程序&#xff1a;https://gitee.com/guzhengchang/shared-clipboard/releases/tag/v0.2 双击前面下载的程序&am…

牛津大学海外学习:14天的知识与文化之旅

牛津——一个充满学术氛围与古老传统的城市&#xff0c;对于我这次14天的海外学习经验来说&#xff0c;这里每一个角落都隐藏着知识和历史的故事。作为中国的一名学生&#xff0c;能够在这里学习、生活&#xff0c;真是一次难得的机会。 我报名的是《人工智能》课程&#xff0…

嵌入式Linux裸机开发(五)中断管理

系列文章目录 文章目录 系列文章目录前言STM32 中断系统IMX6U中断控制8个中断GIC中断控制器GIC介绍中断IDGIC逻辑分块GIC协处理器 中断使能中断优先级 重点代码分析官方SDK函数start.S文件自行编写中断驱动文件 前言 最近在学习中发现&#xff0c;学Linux嵌入式不仅是对Linux的…

大型组网如何使用BFD提高可靠性

1.当前现网业务存在哪些问题&#xff1f; 2.BFD的工作机制讲解 3.BFD联动静态路由以及OSPF实战 --- BFD - 双向转发检测 - 通用标准 SLA --- 介质无关 协议无关 --- BFD基本原理 --- BFD应用场景配置方式 --- BFD结合OSPF --- BFD结合静态路由 跨网段…

MySQL 面试知识脑图 初高级知识点

脑图下载地址&#xff1a;https://mm.edrawsoft.cn/mobile-share/index.html?uuid18b10870122586-src&share_type1 sql_mode 基本语法及校验规则 ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作&#xff0c;如果在SELECT中的列&#xff0c;没有在GROUP BY中出现&#xff…

【计算机网络】第三章课后习题答案

习题目录&#xff1a; 【3-01】数据链路&#xff08;即逻辑链路&#xff09;与链路&#xff08;即物理链路&#xff09;有何区别&#xff1f;"链路接通了"与"数据链路接通了"的区别何在&#xff1f; 【3-02】数据链路层中的链路控制包括哪些功能&#xf…