Verilog HDL

news2025/1/13 7:40:16

一、基础语法

1. 基础知识

(1)逻辑值

逻辑0:低电平。

逻辑1:高电平。

逻辑X:未知,可能是高电平,也可能是低电平。

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

(2)数字进制

十进制数10的表示:

二进制:4'b1010

十进制:4‘d10

十六进制:4’ha

若不指定位宽,默认32位位宽

若不指定位宽和进制,默认32位十进制

16‘b1001_1010_1010_1001 = 16'h9AA9

(3)标识符

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

是任意一组字母、数字、$符号和_(下划线)符号的组合,第一个字符必须是字母或者下划线,区分大小写。

推荐写法:普通内部信号建议全部小写,用下划线区分词。

sum、cpu_addr、clk_50、clk_cpu

2. 数据类型

Verilog中,三大数据类型:(1)寄存器;(2)线网;(3)参数。

(1)寄存器类型

寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器存储的值。

寄存器数据类型的关键字是reg,reg类型数据的默认初始值为不定值x

reg [31:0] delay_cnt;

reg            key_reg;

reg类型的数据只能在always语句和initial语句中被赋值。

时序逻辑中,寄存器对应为触发器;组合逻辑中,寄存器对应位硬件连线。

(2)线网类型

线网数据类型表示结构实体之间的物理连线,不能存储值。

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

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

线网数据类型包括wire和tri,常用的为wire

wire key_flag;

(3)参数类型

常量,用parameter定义。

parameter        H_SYNC = 11'd41;

parameter        H_BACK = 11'd2;

parameter        H_DISP = 11'd480;

参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。

采用标识符来代表一个常量可以提高程序的可读性和可维护性。

在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。

3. 运算符

 

除法只能整除

 

二、 程序框架

1. 注释

两种注释方式:和C语言相同//和/* */

2. 关键字

 

 

3. 程序框架

Verilog 的基本设计单元是“模块”

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

module block(a, b, c, d);
    input a, b;
    output c, d;

assign c = a | b;
assign d = a & b;

endmodule

每个Verilog程序包括4个主要的部分:(1)端口定义、(2)IO说明、(3)内部信号声明、(4)功能定义。

流水灯模块

`timescale 1ns / 1ps

module led(
    output reg[3:0] led,
    input   clk,
    input   rst_n
    );
    reg [31:0] cnt;
    reg [1:0]  led_on_number;
parameter CLOCK_FREQ = 50000000;
parameter COUNTER_MAX_CNT = CLOCK_FREQ/2-1;
    
    always @(posedge clk, negedge rst_n)begin
        if(!rst_n) begin
            cnt <= 31'd0;
            led_on_number <= 2'd0;
        end
        else begin
            cnt <= cnt + 1'b1;
            if(cnt == COUNTER_MAX_CNT) begin
                cnt <= 31'd0;
                led_on_number <= led_on_number + 1'b1;
            end
        end
    end
    
    always@(led_on_number) begin
        case(led_on_number)
            0:led<=4'b0001;
            1:led<=4'b0010;
            2:led<=4'b0100;
            3:led<=4'b1000;
        endcase
    end
endmodule

功能定义部分有三种方法:

1. assign语句:描述组合逻辑

2. always语句:描述组合/时序逻辑

3. 例化实例元件

上述三种逻辑功能是并行的。

在always块中,逻辑是顺序执行的;而多个always块之间是并行的。

模块的输入端可以是wire类型,也可以是reg类型;输出端必须是wire类型。

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

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

相关文章

读书笔记《深度学习与图像识别原理与实践 大白话讲解对小白易懂》2022-8-5

开始 目录前言1. 常见深度学习框架2. 图像分类算法2.1 传统类2.2 机器学习2.2.1 人工神经网络&#xff08;神经元&#xff09;2.2.2 卷积神经网络3. 目标检测算法3.1 分类定位&#xff08;单目标&#xff09;3.2 分类定位&#xff08;多目标&#xff0c;目标检测&#xff09;3.…

近端串扰NEXT和远端串扰的ADS仿真

目录 近端串扰NEXT和远端串扰FEXT 串扰仿真原理图 NEXT特征 减少NEXT的措施 FEXT特征 减少FEXT的措施 本文记录近阶段对近端串扰和远端串扰概念的理解。 经验法则&#xff1a;最大可容许串扰大约是信号摆幅的5%。 近端串扰NEXT和远端串扰FEXT 静态线上的靠近驱动源的一端…

CTF中常用的http知识点总结

目录 前提知识 请求头大全 响应头大全 请求方法大全 常见考点 从某ip访问 从某网站跳转 身份为admin才可以访问 从某某浏览器访问 靶场练习 [极客大挑战 2019]Http Become A Member 前提知识 请求头大全 Header解释示例Accept指定客户端可以接收的内容类型Accep…

逆向分析资料汇总

商务合作 2023年招聘 ​安全业务和软件业务(商务合作) 移动端漏洞或隐私合规检测 APP常见漏洞扫描器 ​移动端APP隐私合规检测 2023年逆向分析资料汇总 移动端漏洞/安全检测与隐私合规解决方案 Frida逆向分析基础 APP基于Frida脱壳 frida hook so导出或未导出函数的方法…

【写作能力提升】写作小白需要避免的五个写作误区和灵魂五问

“ 【写作能力提升】系列文章&#xff1a; 为什么建议你一定要学会写作? 手把手教你快速搞定4个职场写作场景 5种搭建⽂章架构的⽅法”免费赠送! ”一、前言 Hello&#xff0c;我是小木箱&#xff0c;今天主要分享的内容是: 写作小白需要避免的五个写作误区和灵魂五问。 二、 …

E. The Human Equation(前缀和与差分数组)

嘤&#xff0c;总算过了 题目大意&#xff1a;可以从一个序列中按照顺序&#xff08;可间断&#xff09;选出一堆数&#xff0c;选出的这些数可以做以下操作&#xff1a; 奇数位置&#xff0b;1&#xff0b;1&#xff0b;1&#xff0c;偶数位置−1- 1−1偶数位置&#xff0b;1…

微信小程序项目实例——食堂吃哪个

微信小程序项目实例——食堂吃哪个 文章目录微信小程序项目实例——食堂吃哪个一、项目展示二、操作流程和核心代码三、效果展示文末项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 这是一款娱乐性的小程序 目的是为了解决大学生吃饭的选择困难症 用户可以选择不…

51单片机的特殊功能寄存器(SFR)

阅读前提醒&#xff1a; 文中提到的8051指的是8051微控制器&#xff0c;即51单片机 在上一篇文章51单片机的存储结构中&#xff0c;提到8051微控制器的RAM被划分为通用寄存器、按位寻址寄存器、寄存器组、以及特殊功能寄存器。 这里讲一下特殊功能寄存器&#xff08;SFR&…

五金制造业ERP如何解决企业销售管理难题?

销售管理是五金制造企业管理中非常重要的一个环节&#xff0c;它决定着企业发展的提速和效益的提升。那么企业要如何才能做好销售管理呢&#xff1f;在这里五金制造业ERP系统就起到了重要作用。五金制造业常见的销售管理难题及解决方法&#xff1a;销售插单改单严重&#xff0c…

在不同环境下 Docker 的安装部署

本篇内容主要介绍了&#xff1a;Docker&#xff1a;不同环境下的安装部署&#xff0c;包括&#xff0c;Docker 在 Centos7 下的安装、Docker 在 MacOS 下的安装、Docker 在 Windows 下的安装、以及 Docker 服务相关基础命令&#xff01; 文章目录一、Docker 在 Centos7 下的安装…

使用Redhat OpenStack发放云主机

云管理员操作创建项目登录到OpenStack主界面&#xff0c;使用admin账户登录&#xff0c;创建项目虚拟内核&#xff1a;表明此项目可以使用的vCPU的数量实例&#xff1a;表明该项目最多可以运行的虚拟机数量注入的文件&#xff1a;表明最多可以向此数据中心存多少文件已注入文件…

react基础Day03-生命周期render props模式高阶组件原理揭秘

组件生命周期&#xff08;★★★&#xff09; 目标 说出组件生命周期对应的钩子函数钩子函数调用的时机 概述 意义&#xff1a;组件的生命周期有助于理解组件的运行方式&#xff0c;完成更复杂的组件功能、分析组件错误原因等 组件的生命周期&#xff1a; 组件从被创建到挂…

JVM学习(二):JVM监控及诊断工具-命令行篇

一、概述性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注。可能造成Java应用出现性能问题的因…

十二.自定义类型:结构体、联合、枚举

目录 一.结构体 1.结构体类型的基础知识 &#xff08;1&#xff09;结构的声明 &#xff08;2&#xff09;匿名结构体 &#xff08;3&#xff09;结构体变量的定义和初始化 &#xff08;4&#xff09;结构的自引用 &#xff08;5&#xff09;结构体传参 2.结构体内存对齐…

227. 基本计算器 II

227. 基本计算器 II题目算法设计&#xff1a;栈扩展&#xff1a;后缀表达式题目 传送门&#xff1a;https://leetcode.cn/problems/basic-calculator-ii/submissions/ 算法设计&#xff1a;栈 一个功能完备的计算器功能&#xff0c;有很多功能&#xff0c;我们需要从最简单的…

【CAD .NET】第一课 开发自己的CAD软件

开发自己的CAD软件(解析库私信我buy) 介绍 CAD .NET 为在 .NET 环境下开发解决方案的库。它支持 AutoCAD DWG、DXF、PLT 和其他 CAD 格式。它支持 AutoCAD DWG, DXF, PLT 和其他 CAD 格式。 该库可用于广泛领域: 处理所有项目阶段的工业图纸 监测和远程控制程序 数控(C…

ReactNative0.71正式版发布,Ts作为首要开发语言

时隔近4个月的时间&#xff0c;ReactNative带来了0.71版本的更新&#xff0c;这速度对比隔壁Flutter不得不说是真的有的慢。 这个版本的更新的内容还是比较重磅和突破性的&#xff0c;主要体现在如下几点&#xff1a; 编程语法默认改为TypeScript使用Flexbox Gap使布局更加简…

AlmaLinux 9部署JumpServer

JumpServer简介 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。 JumpServer 使用 Python 开发&#xff0c;配备了业界领先的 Web Terminal 方案&#xff0c;交互界面美观、用户体验好。 JumpServer 采纳分布式架构&#xff0c;支持多…

【C++11】—— 类的新功能

目录 一、移动构造和移动赋值的特点 二、类成员变量初始化 三、强制生成默认函数的关键字default 四、禁止生成默认函数的关键字delete 五、继承和多态中的fifinal与override关键字 一、移动构造和移动赋值的特点 默认成员函数 原来C类中&#xff0c;有6个默认成员函数&a…

Yolov8实例分割Tensorrt部署实战

目录 0 引言 1 生成onnx模型 2 onnx转为tensorrt的engine模型 3 Tensorrt推理 3.1 yolov8n-seg分割结果 3.2 yolov8s-seg分割结果 3.3 yolov8m-seg分割结果 3.4 yolov8l-seg分割结果 3.5 yolov8x-seg分割结果 0 引言 ultralytics在github发布了yolov8模型&#xff0c;…