verilog 从入门到看得懂---verilog 的基本语法数据和运算

news2025/1/11 11:50:37

        笔者之前主要是使用c语言和matab 进行编程,从2024年年初开始接触verilog,通过了一周的学习,基本上对verilog 的语法有了基本认知。总统来说,verilog 的语法还是很简单的,主要难点是verilog是并行运行,并且强烈和硬件实际电路相关,在设计到的时候需要考虑时序问题和可综合问题。

时序问题:因为verilog 是基于硬件实现,在实现的时候要考虑到硬件电路的建立时间和稳定时间,所以会遇到锁存器。并且在多个并行的运算在耦合到一起时,需要考虑时序。

可综合:指的是是否可以生成对应的电路,如果一段程序无法生成对应的电路,那么这个程序可能只能进行仿真,最后实际无法在硬件上实际运行。

 

基本设计单元

对于c语言中一个最基本的设计单元称为函数

void functionname(parameter)

{

funtion description

}

对于verilog 基本设计单元则称为模块,结构也类似

module block(parameter)

block desription

endmodule

具体实例:

module test(a,b,c,d)

input a,b,c;// 可以在block 内部进行输入输出定义 这里没有指明为宽 则默认a,b,c,d 宽带为1bit

output d;

assign d=a|b|c; // 这里 是对输入的三个信号线 abc 进行按位求或,主要有一个问题高电平,则输出d为高电平

endmodule

如果输入输出的数据位宽不为1,可以按照如下方式进行定义

input [信号位宽-1:0] 端口名字1;

output[信号位宽-1:0] 输出端口名字;

inout[信号位宽-1:0]  端口名字;// 这个端口即是输入端口又是输出端口

数据定义

数字表现形式

数子常用的表现形式包括二进制十进制和十六进制,下面展示了用不同进制表示一个字为10

二进制  4'b1010;

十进制 4’d10;

十六进制 4‘hA;

如果直接写10,则默认是十进制。

对于负数则如下表示:

二进制  -4'b1010;

十进制 -4’d10;

十六进制 -4‘hA;

对于c编程中一个bit只能有两种情况 true或者false 也即 1或者0.但是对于实际电路中出了0或者1 还有另外两个值,使用x表示不定值,使用z/?代表高阻值

二进制  4'b101z;

十进制 4’dz;

十六进制 4‘hx;

另外一个让我感觉verilog 很贴心的是增加了_ 来对数据进行分隔,从而提高可读性,

32’b1111_1110_0001_1101_1011_0011_0101_1101,

希望其他语言中也早点支持这种分隔符,有的时候真是数的让人眼花缭乱。

数据类型

verilog 中一共有19个数据类型,其中最常用的为wire,reg,integer和parameter。

1. wire 数据类型 常用在表示以assign 关键字指定的组合逻辑信号,verilog 程序模块中输入和输出默认为wire 类型,wire 数据可以作为任何方程的输入,但是输出的时候需要用到assign

wire[3:0] b;

assign b=10;//定义了一个wire类型的b 并且给b赋值为10,注意 给wire 赋值的时候必须用assign。

2. reg型数据,register  是数据存储对象的抽象,通过赋值语句可以修改寄存器储存的数据,reg数据常和always 使用,

reg[3:0] b;

always* 

 b=10;

3. parameter 型数据是用来定义常量

module Test()

parameter b=7;// 定义了一个 参数 为7  这个参数可以通过上层的模块修改

........

endmodule

module Topfun()

Test #(10) testexample;//在这里实例化了Test 并且修改b=10

endmodule

运算符和表达式

verilog 中的运算符基本都和c语言中使用方法一致,唯有拼接运算符是一个新的。

reg [7:0] var1;
reg [15:0] var2;

wire [22:0] combined = {var1, var2};// 通过拼接运算符把var1和var2 合并到了一起

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

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

相关文章

【LabVIEW FPGA入门】插值、输出线性波形

概述 NI 的可重配置 I/O (RIO) 硬件使开发人员能够创建自定义硬件,以在坚固耐用、高性能和模块化架构中执行许多任务,而无需了解低级 EDA 工具或硬件设计。使用 RIO 硬件轻松实现的此类任务之一是模拟波形生成。本教程介绍了使用 CompactRIO 硬件和 LabV…

旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办

前提条件 电池需要20%(就是电池没有报废)且电脑接好电源,千万别断电,电脑会变成砖头的 解决办法 更新bios即可解决,去对应品牌官网下载最新的bios版本就行了 网上都是一些更新驱动啊

VS2019加QT5.14中Please assign a Qt installation in ‘Qt Project Settings‘.问题的解决

第一篇: 原文链接:https://blog.csdn.net/aoxuestudy/article/details/124312629 error:There’ no Qt version assigned to project mdi.vcxproj for configuration release/x64.Please assign a Qt installation in “Qt Project Settings”. 一、分…

数据分析 | Matplotlib

Matplotlib 是 Python 中常用的 2D 绘图库,它能轻松地将数据进行可视化,作出精美的图表。 绘制折线图: import matplotlib.pyplot as plt #时间 x[周一,周二,周三,周四,周五,周六,周日] #能量值 y[61,72,66,79,80,88,85] # 用来设置字体样式…

RunnerGo测试平台的安装和使用

文章适用于想RunnerGo入门的同学,本人主要是后端,这里做一个入门的学习记录。想深入适用RunnerGo的同学可以参考官网文档: https://wiki.runnergo.cn/docs/ 这里我测试的代码是之前搭建的一个前后端分离小demo,代码地址是https:/…

交流互动系统|基于springboot框架+ Mysql+Java+Tomcat的交流互动系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向,命名为Directi…

腾讯云服务器配置2核4G5M带宽是什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么?代表2核CPU、4G内存、5M公网带宽,这是一款轻量应用服务器,系统盘为60GB SSD云硬盘,活动页面 txybk.com/go/txy 活动打开如下图: 腾讯云2核4G5M服务器 如上图所示,这…

Linux 用户及用户组管理

目录 1——添加用户(useradd) 2——删除用户:userdel 3——修改用户:usermod 4——记住用户操作:history 5——查看用户信息:id 6——用户切换:su 问题1:遇到当前的用户不能使…

[蓝桥杯 2021 省 A] 左孩子右兄弟

一、问题描述 P8744 [蓝桥杯 2021 省 A] 左孩子右兄弟 二、问题简析 2.1 左孩子右兄弟 首先,我们要了解怎么通过“左孩子右兄弟”表示法将多叉树转化为二叉树:对于一棵多叉树,一个父节点有多个子节点,将第一个子节点作为父节点…

警惕MKP勒索病毒,您需要知道的预防和恢复方法。

引言: 在网络世界中,.mkp勒索病毒是一股威胁不可小觑的黑暗势力。它以其毒辣的加密手段威胁着我们的数据安全。本文将深入介绍.mkp勒索病毒,揭示如何恢复被其加密的数据文件,并分享一些预防措施,助您在数字世界中安全…

Linux:网络相关概念的认识

文章目录 基本认知数据跨网络传输初识ip地址 端口号端口号的理解 本篇是基于前面对于网络的基本框架搭建,进而进行相关概念的进一步理解,为后续准备 基本认知 那么首先总结一下一些基本的相关结论性的信息 对于任何协议来说,它本身都应该拥…

Langchain-chatchat+ChatGlm3-6b部署

我的环境 台式机 内存:16GB 显卡:GTX1060-6G 1. 基础环境准备 1.1. 安装anaconda,创建环境python版本3.11 conda create -n chatglm3 python3.11 conda activate chatglm3 1.2. 搭建cuda环境 # 查看cuda版本,版本是CUDA V…

如何订阅Midjourney

Midjourney介绍 Midjourney作为目前AI绘画领域效果卓越且备受青睐的工具,对于新用户而言,可能无法享受到免费试用的机会。因此,为了持续利用这款软件进行绘画创作,用户需要购买会员资格并开通订阅服务。那么,关于midj…

Redis数据存储的细节

原文章地址 : 深入学习Redis(1):Redis内存模型 - 编程迷思 - 博客园 (cnblogs.com) 1.概述 关于Redis数据存储的细节,涉及到内存分配器(如jemalloc)、简单动态字符串(SDS)、5种对象…

Python入门(三)

序列 序列是有顺序的数据集合。序列包含的一个数据被称为元素,序列可以由一个或多个元素组成,也是可以没有任何元素的空序列。 序列的类型 元组(定值表):一旦建立,各个元素不可再更变,所以一…

建设IAM/IDM统一身份管理,实现系统之间的单点登录(SSO)

企业实施身份管理的现状: 1.身份存储分散,不能统一供应诸多应用系统,企业用户信息常常存在于多个系统,如HR系统有一套用户信息,OA系统也有一套用户信息,身份存储不集中,不能统一地为诸多应用系…

ChatGPT :确定性AI源自于确定性数据

ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…

clickhouse学习笔记01(小滴课堂)

老王经历-数据库架构演变历史 你是否能分清OLTP和OLAP系统 急速掌握-数据库里面行存储和列式存储 新一代列式存储ClickHouse介绍和应用场景说明 Linux服务器容器化部署ClickHouse实战 记得要在安全组里配置开放端口号。 到这我们就安装完了。 简单使用: 创建你的第…

C语言基础练习——Day10

目录 选择题 编程题 不用加减乘除做加法 找到所有数组中消失的数字 选择题 1、求函数返回值,传入-1,则在64位机器上函数返回 int func(int x) {int count 0;while (x){count;x x&(x - 1);//与运算}return count; } A 死循环B 64C 32D 16 答案&…