【FPGA学习记录3-1】Verilog语法之Verilog的数据类型

这篇具有很好参考价值的文章主要介绍了【FPGA学习记录3-1】Verilog语法之Verilog的数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

本科时学过FPGA的相关课程,因此对于Verilog相关语法的学习重在回顾。

1.Verilog的数据类型

Verilog 最常用的 2 种数据类型就是线(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。

1.1wire类型

wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。
线类型可以由寄存器类型来赋值;

//以下为位宽为1的情况
wire flag;            //声明1bit位宽的线型变量data
reg	wr_load_r1, wr_load_r2;
wire flag1 = ~wr_load_r2 & wr_load_r1;
//当位宽大于1时
wire [23:0]  data;   //声明24bit位宽的线型变量data
1.2reg类型

寄存器用来表示存储单元,它会保持数据原有的值,直到被改写。寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。

//以下为位宽为1的情况
reg rd_addr;
reg	wr_addr;

reg rstn ;
initial begin
    rstn = 1'b0 ;
    #100 ;
    rstn = 1'b1 ;
end
//当位宽大于1时
reg [3:0]    counter ;    //声明4bit位宽的寄存器counter
1.3[X:0]和[0:X]的区别

不管是reg变量还是wire变量,A[X:0],A[X]是最高位,A[0]是最低位。B[0:X],B[0]是最高位,B[X]是最低位。
例如声明了两个8位的寄存器变量data1和data2,并对这两个寄存器变量赋值8‘b11110000。

reg [7:0] data1;
reg [0:7] data2;
reg [7:0] data;

data1 = 8'b00000000;
data2 = 8'b00000000;

data1 <= data;
data2 <= data;

这时
data1[7]=1, data1[6]=1, data1[5]=1, data1[4]=1, data1[3]=0, data1[2]=0, data1[1]=0, data1[0]=0;
data2[0]=1, data2[1]=1, data2[2]=1, data2[3]=1, data2[4]=0, data2[5]=0, data2[6]=0, data2[7]=0.
对于data1而言,data1[7]是最高位
对于data2而言,data2[0]是最高位

1.4parameter数据

parameter用来表示常量,用关键字 parameter 声明,只能赋值一次.

parameter      data_width = 10'd32 ;
parameter      i=1, j=2, k=3 ;
1.5一些骚操作
1.5.1花括号{}的使用

花括号{}的功能包括拼接和复制
拼接

wire [2:0] a;

在a的最高位再补一位填上1变成一个4位二进制串,那么我只需要用

{1’b1,a[2:0]}

就可以表示这个4位串了。其中最左边是最高位,最右边是最低位。如果a[2:0]=3’b011,{1’b1,a[2:0]}就等于4’b1011了。之所以要写1’b1而不是1,是因为在拼接运算符中,要求所有使用到的数和变量都要标明位数。

复制

{32{a[1]}}

其中32表示要把a[1]重复32次,并不是要拼接的内容,所以就不用指定位长了。比如a[1]=1,上面的描述就对应了一个长度为32,每一位都是1的二进制串。注意上面的表达式连同最外面的花括号是一个整体,意思就是说如果你想要把这个串嵌套在别的拼接运算符中时,最外面的花括号是不能删掉的

此外,关于我们的{32{a[1]}},其中重复的次数“32”可以替换成参数,即这个32可以替换成一个parameter类型但不能替换成一个wire类型,reg类型甚至integer类型。

1.5.2数据的截取

Verillog支持指定 bit 位后固定位宽的向量域选择访问。
[bit+: width] : 从起始 bit 位开始递增,位宽为 width
[bit-: width] : 从起始 bit 位开始递减,位宽为 width

//下面 2 种赋值是等效的
A = data1[31-: 8] ;
A = data1[31:24] ;

//下面 2 种赋值是等效的
B = data1[0+ : 8] ;
B = data1[0:7] ;

1.Verilog 数据类型
2.Verilog中拼接运算符的用法文章来源地址https://www.toymoban.com/news/detail-433704.html

到了这里,关于【FPGA学习记录3-1】Verilog语法之Verilog的数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA设计Verilog基础之数据类型的作用和特点、常量和变量的代码示例详解

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus 在Verilog中,有多种数据类型可供使用,包括位向量类型、整数类型、实数类型、布尔型、时间类型和字符串类型等。下面详细介绍Verilog的所

    2024年02月03日
    浏览(39)
  • FPGA | Verilog基础语法

    菜鸟教程连接 举例(\\\"//\\\"符号后的内容为注释文字): initial $dumpfile (“myfile.dump”); //指定VCD文件的名字为myfile.dump,仿真信息将记录到此文件 可以指定某一模块层次上的所有信号,也可以单独指定某一个信号。 典型语法为$dumpvar(level, module_name); 参数level为一个整数,用于指

    2024年02月05日
    浏览(49)
  • 【FPGA Verilog开发实战指南】初识Verilog HDL-基础语法

    就是用代码来描述硬件结构 语言有VHDL与Verilog HDL Verilog HDL 是从C语言来的,学的快 ###例子 也叫保留字,一般是小写 module 表示模块的开始 endmodule 模块的结束 模块名 一般与.v文件的名字一致 输入信号 input 输出信号 output 既做输入也做输出 inout 需要一些变量和参数对输

    2024年02月21日
    浏览(43)
  • Verilog语法学习——LV10_使用函数实现数据大小端转换

    题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page=1tab=Verilog篇topicId=301) 描述 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的

    2024年02月15日
    浏览(45)
  • 【FPGA入门】第一篇、Verilog基本语法常识

    目录 第一部分、不同的变量类型 1、wire和reg的区别  2、如何对变量进行赋值呢? 3、什么是阻塞?什么是非阻塞? 第二部分、变量位宽的定义 1、各种系统默认情况 2、变量位宽声明方式 3、表明位宽的情况下,赋值方式 4、两个模块之间例化,不定义变量直接用的方式 5、常

    2024年02月04日
    浏览(48)
  • Verilog语法学习——LV6_多功能数据处理器

    题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page=1tab=Verilog篇topicId=301) 描述 根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a,b为8bit有符号数,当select信号为0,输出a;当select信号为1,输出b;当select信号

    2024年02月15日
    浏览(36)
  • Verilog数据类型/常量/变量[学习笔记day3]

    1 数据类型 数据类型是用来表示数字电路中的 数据存储 和 传递单元 。 Verilog HDL中共有19种数据类型,其中 最基本的有4种 : 常:integer型 parameter型 变:reg型 wire型 其他:large, medium, scalared, small, time, tri, tri0, tri1, triand, trior, trireg, vectored, wand, wor等。 2 常量 在程序运行过程中

    2024年02月05日
    浏览(42)
  • 学习笔记1:认识Verilog中的数据类型与数字的表达方式

    写在前面:我对于verilog的学习只是足够编写一个简单的多周期cpu,对于verilog属于是浅浅的接触了一下了,其中可能会有一些写的不够准确的地方,欢迎指正讨论相互学习。 目录 数据类型 常量 整数的表示 X和Z 负数  下划线 参数类型-parameter  变量 wire  reg   最常用最基本

    2024年02月13日
    浏览(35)
  • 【FPGA】verilog基础语法与应用:位操作 / 模块调用——流水灯(跑马灯)

    今天的实验是计数器实验的升级,设计让8个LED灯以每个0.5s的速率循环闪烁 1 移位法实现 1.1 移位方法1 每个LED灯代表一位,共8位,亮为1,灭为0 如何实现这样的逻辑呢? 移位操作即可! 怎么样才能移位呢? 第一个状态需满足最低位为1,然后每次左移1个 源代码 仿真代码 功

    2024年01月16日
    浏览(47)
  • 01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

    目录 环境搭建和基础知识  什么是JRE: 什么是JDK: 基础数据类型  分支选择if else switch和c一毛一样 for和while循环还有数组基本和c一样 封装 函数调用、传参、命名规范、数组新命名规范 java输入Scanner scanner = new Scanner(System.in); 类的创建和使用以及封装修饰符  构造方法:含义、

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包