Verilog基础语法(一)

2023-11-04

一、数据类型

在Verilog语言中主要有三大数据类型:寄存器数据类型、线网数据类型、参数数据类型

1、寄存器数据类型

关键字:reg,reg类型数据默认初始值为不定值X;需要注意的是reg类型的数据只能在always语句和initial语句中被赋值。

reg [31:0] delay_cnt;
reg        key;//默认位宽为1

    如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;如果该过程描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线;

2、线网数据类型

关键字:wire和tri;最常见的是wire类型

wire   key_flag;//默认位为1位(设计变量位宽与reg相同)

线网数据类型表示结构实体之间的物理连线;线网类型的变量不能存储值,它的值是由驱动它的元件所决定,能够驱动线网类型变量的元件有门、连续赋值语句、assign等。如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为Z。

3、参数数据类型

关键字:parameter;参数其实就是一个常量,可以一次定义多个参数,参数与参数之间需要用逗号隔开,且每个参数定义的右边必须是一个常数表达式。

parameter  SYS  =  4'd2;

参数类型的数据常用于定义状态机的状态、数据位宽和延迟大小等。采用标识符来代表一个常量可以提高代码的可读性和维护性。

二、运算符

1、算数运算符

+     加
-     减
*     乘
/     除(只能实现整除)
%     模除(求余)

2、关系运算符

>     大于
<     小于
<=    小于等于
>=    大于等于
==    等于
!=   不等于

3、逻辑运算符

!    非
&&    与 (a&&b 如果a和b都为1,结果才为1,表示真)
||    或(a||b 如果a或者b有一个为1,结果为1,表示真)

4、条件运算符

?:   a?b:c    (如果a为真,就选择b,否则选择c)

5、位运算符

~     取反
&     与(按位与)
|     或(按位或)
^     异或(按位异或)

6、移位运算符

>>      右移     a>>b   (将a右移b位)  
<<      左移     a<<b   (将a左移b位) 

7、拼接运算符

{}     {a,b}   将a和b拼接起来,作为一个新的信号

运算符的优先级:

(从高到低)

! ~
*  / %
+  -
<<  >>
<  <=  >  >=
==  !=  ====  !==
&
^  ^~
|
&&
||
?:

三、注释方式

Verilog中有两种注释方式 ,一种是//开头的语句,它表示以//开始到本行结束都属于注释语句;另一种是以“/*”开始,以“*/”结束,在两个符号之间的语句都是注释语句。这种注释方式与C语言相同。

四、常用的关键字

  1. module          模块开始定义
  2. input              输入端口定义
  3. output            输出端口定义
  4. inout              双向端口定义
  5. parameter     信号的参数定义
  6. wire               wire信号定义
  7. reg                reg信号定义
  8. always           产生reg信号语句的关键字
  9. assign            产生wire信号语句的关键字
  10. begin              语句的其实标志
  11. end                 语句的结束标志
  12. edge/posedge/negedge         时序电路的标志
  13. case                case语句起始标记
  14. default             case语句的默认分支标志
  15. endcase           case语句结束标记
  16. if                       if/else语句标记
  17. else                  if/else语句标记
  18. for                     for语句标记
  19. endmodule       模块结束定义

五、程序框架

Verilog基本的设计单元是模块(block);一个模块由两个部分组成,一部分描述端口,另一部分描述逻辑功能。

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

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

1、assign语句:描述组合逻辑电路

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

3、例化实例元件:如and#2 u1(q,a,b);

需要说明的是上述三种逻辑功能是并行的

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog基础语法(一) 的相关文章

  • 基于FPGA的频率计设计

    文章目录 写在前面 1 什么是频率计 2 测量方法与基本原理 3 待测信号如何输入FPGA 一 实验程序 1 RTL图 2 Verilog 参考设计 3 指派引脚 二 调试验证 输入不同频率的方波 写在前面 1 什么是频率计 频率计是一种专
  • SmartFusion从FPGA到ARM(四)——MSS_TIMER定时器的使用

    文章目录 1 定时器资源简介 2 MSS TIMER库函数简介 3 简单的周期性中断 4 自定义产生波形 5 64位定时器的使用 6 单次中断模式 系列教程 SmartFusion从FPGA到ARM系列教程 1 定时器资源简介 SmartF
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • Xilinx ISE系列教程(9):LabTools下载、安装、使用教程(独立的下载工具)

    文章目录 1 ISE Vivado LabTools简介 2 ISE 14 7 Lab Tools下载 安装 3 Vivado 2018 3 LabTools下载 安装 1 ISE Vivado LabTools简介 Xilinx LabT
  • FPGA同步复位和异步复位的区别以及设计处理

    FPGA复位信号的设计处理 同步复位 同步复位 同步复位信号跟触发器的时钟是同步的 只有在时钟的跳变沿到来之后才会生效 对应verilog代码如下 这种写法会被编译器综合成同步复位 always posedge clk begin if r
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • 【Xilinx】SynchronousInterruptHandler错误排查笔记

    SynchronousInterruptHandler错误排查笔记 一 ArmV8的异常处理 二 64位lscript ld的修改 三 asm vectors S的修改 四 SynchronousInterruptHandler函数解析 五
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • 【PIPE】流水线设计中的基本模块

    大概分成以下几节 1 概述及协议 2 valid forward valid超前 3 bubble collapse 消除气爆 4 input output skid 不知中文怎么说 5 pipe halt 流水停顿 6 idle pres
  • FPGA Lattice Diamond 开发环境搭建

    FPGA Lattice Diamond 开发环境搭建 Lattice Diamond 软件下载 在浏览器中输入 Lattice 的官网地址 http www latticesemi com 进入官网首页在上方选择产品系列选项 出现如下图所
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • Vivado 比特流消息:违反规​​则 (LUTLP-1) 组合循环

    我在串流时遇到问题 该项目旨在创建一个占空比为 1 2 的时钟 综合和实现过程中没有任何问题 我尝试了几种方法来解决它 但他们的表现并不好 module clock div clk clk out input clk output reg
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • 在 C 中操作 80 位数据类型

    我正在用 C 实现一些加密算法 其中涉及 80 位密钥 特定操作涉及将密钥旋转移位 x 个位数 我已经尝试过 long double 类型 如果我没记错的话 它是 80 位 但这不适用于位移运算符 我能想到的唯一替代方案是使用 10 个元素
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S

随机推荐

  • Unity UI上的物体跟随场景物体位置变化而变化(人物血条/称号)

    首先看下UI上物体的位置计算 UI上的物体 以下用 血条 代称 这个很简单 无非就是坐标转换 把人物的世界坐标转到屏幕坐标 代码如下 public Transform target public Transform hpSp public
  • Linux系统安装Java

    1 下载JDK 下载网址 https www oracle com technetwork java javase downloads index html 下拉 找到jdk8 使用Xshell远程连接虚拟机 2 先新建一个文件夹 目录是
  • oracle 分区表插入数据_Oracle数据库分区表整理笔记

    关键词 partition 分区subpartition 辅助分区已经存在的表没有方法可以直接转化为分区表 分区索引 一 分区表类型 1 范围分区 1 1 按指定要求划分 假设有一个CUSTOMER表 表中有数据200000行 我们将此表通
  • JS reduce 用法

    定义 reduce 方法接收一个函数作为累加器 数组中的每个值 从左到右 开始缩减 最终计算为一个值 语法 array reduce function total currentValue currentIndex arr initialV
  • HEVC对场编码的支持

    HEVC值得注意的是它没有提供专用于隔行视频的工具 而是将隔行视频的一帧看作两个独立的场 对各个场数据分别进行编码 简化了编码器的实现 这也是因为随着数字视频技术的快速发展 视频的隔行扫描方式日渐式微 https blog csdn net
  • vue+element-ui实现表格里嵌套表格

    效果图 点击某行数据展开另一个嵌套在里面的table 核心代码 从后台请求的数据格式 代码实现
  • table 表格合并

    table 表格合并 开发工具与关键技术 DW JavaScript 作者 刘东标 撰写时间 2019 03 14 div div span colspan和rowspan这两个属性用于创建特殊的表格 span span colspan用来
  • JAVA查搜索文件内容

    上周突然遇到了个要查找历史sql的中是否包含某个字段的问题 Everting虽然可以查找某个后缀的文件 可是并不能搜索文件内容 所以就花费一点功夫自己写一个了 使用起来还是非常方便 1 单文件查找内容 2 单文件夹下读取所有文件 并查找内容
  • 【时间序列预测算法】——ARIMA 算法介绍及代码实现

    基本概念 一阶差分 时间序列在t 与t 1 时刻函数值的差值 提升时序数据的平稳性 ARIMA算法对数据平稳性有要求 二阶差分 在一阶差分的基础上再做一次 一般时序数据最多做两阶 再多则预测意义不大 自回归模型 f t
  • Google Protocol Buffer持久化框架分析

    一 三大主流开源持久化框架介绍 1 1 Google Protocol Buffer protocol buffer是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了三种语言的实现 java c 和 pyt
  • The type or namespace name ‘MenuItemAttribute‘ could not be found类似报错处理方法

    类似报错主要是使用了UnityEditor相关的API 解决方法的话 只要将相关脚本放进Asset下的Editor文件夹之中即可 并不涉及其他的逻辑 只与UnityEditor相关 否则在打包的时候还可能会发生类似的报错
  • KEIL编译报错 Error: L6220E: Load region LR_IROM1 size (65552 bytes) exceeds limit (65536 bytes)……

    问题描述 STM32F103CBT6 KEIL编译报错 Error L6220E Load region LR IROM1 size 65552 bytes exceeds limit 65536 bytes Region contains
  • 7107小时时,加入创业公司(没有股份,当作经验吧)

    只是第一个项目是web项目 与vr无关 所以此项目耗费时间不计入1万小时之内 也不算是第五个项目 不过也算是里程碑 至少2017年有稳定项目来源了吧 主要也是学经验 以后如果开自己的公司的话 能有所借鉴 还是要努力的 才能多接触各方面 主要
  • windows 10 vs2017 x264的编译和使用测试

    做了一次更新 工具改成vs2019了 x264这个sdk非常棒 主页 x264 the best H 264 AVC encoder VideoLANhttps www videolan org developers x264 html 在
  • 01. Web漏洞靶场的搭建

    01 Web漏洞靶场的搭建 Web漏洞靶场的搭建 上 什么是Web安全 什么是Web Web是互联网的总称 全称为World Wide Web 缩写WWW 即全球广域网 也称为万维网 它是一种基于超文本和HTTP的 全球性的 动态交互的 跨
  • Vue3正式发布那么久了,你认识Pinia了吗?

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • StringBoot+Mybatis的增删改查(四)

    整体项目链接地址 StringBoot Mybatis的增删改查 一 StringBoot Mybatis的增删改查 二 StringBoot Mybatis的增删改查 三 StringBoot Mybatis的增删改查 四 StringB
  • vue练习,写游戏

  • 【异常问题】nvcc fatal : Unsupported gpu architecture ‘compute_86‘ 解决方案

    目录 异常问题 nvcc fatal Unsupported gpu architecture compute 86 解决方案 1 报错信息 2 系统环境 3 原因分析 4 解决方案 异常问题 nvcc fatal Unsupported
  • Verilog基础语法(一)

    一 数据类型 在Verilog语言中主要有三大数据类型 寄存器数据类型 线网数据类型 参数数据类型 1 寄存器数据类型 关键字 reg reg类型数据默认初始值为不定值X 需要注意的是reg类型的数据只能在always语句和initial语