verilog数据类型和数组

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

本文将讨论 verilog 中常用的数据类型,包括对数据表示、线网类型、变量类型和数组,分享一下使用方法和注意事项。

一、Verilog 中的数值表示

编写 verilog代码 时,经常需要在代码中表示数据值,可以将这些数据表示为2进制、8进制、10进制或16进制值。

特别是verilog中需要定义数据的位宽,因为verilog 本质上是在描述硬件电路。

语法:

<bits>'<representation><value> 

说明:

bits:位宽,可省略,则默认是32bit

representation:进制, b或B表示2进制,o或O表示8进制,d或D表示10进制,h或H表示16进制,可省略,则默认是十进制

value :具体数值

示例:

8'b1000_1000;    //2进制表示
4'o10;      //8进制表示
4'd8;       //10进制表示
4'h8;       //十六进制表示

每一个bit位不同值表示:

verilog 数组,FPGA,fpga开发,verilog,VHDL,fpga,fpga/cpld,Powered by 金山文档

二、Verilog 中的基本数据类型

verilog 中的基本数据类型可以分为两大类:线网类型(net)和变量类型(variable )

net类型用来对数字电路中的连接关系建模,无法存储数值,表示数据驱动路线。

variable类型用来对寄存器或触发器建模,可以存储数据。

1、Verilog 中的net类型

用来描述设计中不同组件之间的物理连接,net类型本身不能用于存储数据或驱动数据。

通常使用连续赋值(continuous assignment)语句来将数据驱动到线型(wire)上,如assign 语句。

verilog 中最常用的net类型就是wire类型。使用wire类型来声明设计中基本的点对点连接信号,顾名思义,它们大致相当于传统电路中的电线(wire英文原意)。

wire a;          //声明一个1位宽wire类型信号a
 
assign a = c;    //使用assign关键字来赋值
assign b = d;    //使用assign关键字来赋值

2、Verilog 中的变量类型

verilog 中使用变量类型来存储数据,可以一直保持这个值直到被再次赋值。

verilog中最常用的变量类型是reg类型,用于always语句块内,如下面的代码片段所示,实现了一个D触发器。

reg q;
//D触发器
always @(posedge clock)
  q <= d;
end

虽然reg 类型常被用来建模触发器,但在某些情况下,reg 类型也可用于在 verilog 中对组合逻辑进行建模。

reg q;
always @(*)
  q = d;
end

verilog 中最常用的数值数据类型是integer类型。但是,integer类型通常用于模块中的内部信号而不是端口。

注意:integer默认是32bit的有符号数。

integer a = 255;    //声明一个值为255的integer类型变量a

3、Verilog 中的有符号(Signed)和无符号数据(Unsigned)

Verilog-2001 标准引入了signed 和 unsigned关键字,在Verilog-2001标准发布之前,所有net类型和variable类型都只能用于存储无符号(Unsigned)数据类型。

默认情况下,integer类型是有符号的,而 reg 和 wire 类型都是无符号的。如果希望修改此默认行为,则需要使用这些关键字(signed 和 unsigned),在 verilog 代码中将变量类型声明为signed时,会是补码。

示例:

//声明无符号reg变量a、有符号reg变量b
reg [31:0] a;
reg signed [31:0] b;
 
//声明无符号wire变量a、有符号wire变量b
wire [31:0] a;
wire signed [31:0] b;
 
//声明无符号integer变量a、有符号integer变量b
integer unsigned a;
integer b;

4、Verilog 中的数组(Arrays )

在 verilog 中可以创建和使用Arrays(数组)类型,在FPGA中实际是使用LUT或BRAM来实现的。

(1)一维数组

语法:

<type> <size> <variable_name> <elements>; 

说明:

type表示数组元素的类型

size表示数据元素的位宽大小

variable_name表示数组名称

elements是表示数组的大小

示例:

//定义一个共有8个元素的数组example,每个元素的位宽为3位
wire [2:0] example [7:0];

可以使用带有数组下标的方括号来访问数组中的单个元素,如:

//将5赋值给数组example中的最后一个元素
assign example[7] = 3'h5;   

(2)多维数组

在Verilog-1995标准中,只能创建一维数组。verilog 2001 标准则可以创建多于一维的数组。为此,只需添加另一个字段来定义需要的元素数量。

语法:

<type> <size> <variable_name> <elements0> <elements1>; 

说明:

type表示数组元素的类型

size表示数据元素的位宽大小

variable_name表示数组名称

elements0是表示数组第一层的大小

elements1表示数组第二层的大小

示例:

wire [3:0] example2d [7:0][1:0];
//赋值操作
assign example2d [7][1] = 4'ha;
assign example2d [7][0] = 4'ha;

verilog数组还是挺好用的,可以用于简化写代码的逻辑,适用于循环复制的模块或代码。

genvar i;
wire [1:0] data_in [0:4];
wire [1:0] data_out [0:4];

generate
for(i = 0; i < 5; i = i + 1) begin: module_test
     mod_test u_mod_test(
        .clk(clk),
        .reset(reset),
        .data_in(data_in[i]),
        .data_out(data_out[i])
     );
end
endgenerate

integer j;
reg  [2:0] shift_add_index [0:8];

always@(posedge clk) begin
     shift_add_index[0] <= 'd2;
end

always@(posedge clk) begin
     for(j = 1; j < 9; j = j+1) begin
         shift_add_index[j] <= shift_add_index[j-1] + j;
     end
end

本文将不断定期更新中,点赞,收藏一下,不走丢哦

有任何问题,都可以在评论区和我交流哦

本文由FPGA入门到精通原创,公众号为“FPGA入门到精通”,github开源代码:“FPGA知识库

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。文章来源地址https://www.toymoban.com/news/detail-611451.html

到了这里,关于verilog数据类型和数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA开发——VHDL实现各类触发器

    小编最近在学习时序电路的VHDL设计,通过此文对触发器和VHDL相关知识进行总结,以便日后进行复习、查阅。本文首先回顾了各类触发器的基本知识包括特性方程、状态图等,最后通过VHDL来实现各类触发器。 在实际的数字系统中往往包含大量的存储单元,而且经常要求他们在

    2024年02月04日
    浏览(37)
  • 基于FPGA的高速数据采集ATA接口Verilog开发与Matlab

    基于FPGA的高速数据采集ATA接口Verilog开发与Matlab 摘要: 本文介绍了基于FPGA的高速数据采集ATA接口的Verilog开发与Matlab的应用。通过使用Verilog语言进行FPGA的硬件设计,实现了ATA接口的数据采集功能。同时,结合Matlab进行数据处理和分析,实现了对采集的数据进行实时处理和显

    2024年02月07日
    浏览(42)
  • 基于FPGA的3位二进制的乘法器VHDL代码Quartus 开发板

    名称:基于FPGA的3位二进制的乘法器VHDL代码Quartus  开发板(文末获取) 软件:Quartus 语言:VHDL 代码功能: 3位二进制的乘法器 该乘法器实现两个三位二进制的乘法,二极管LED2~LED0显示输入的被乘数,LED5~LED3显示乘数,数码管显示相应的十进制输入值和输出结果 本代码已在开

    2024年02月21日
    浏览(39)
  • 【FPGA/verilog -入门学习5】verilog中的genrate for 和for 以及数组的用法

    本文参考:verilog generate语法总结-CSDN博客 Verilog数组赋值_笔记大全_设计学院 在Verilog中, generate for 和 for 都是用于循环的结构,但是它们具有不同的应用场合和语义。 for 循环: for 循环主要用于行为描述(behavioral description),通常用于描述算法或数学运算。 for 循环在仿真

    2024年02月03日
    浏览(33)
  • 一起来做个CH347的项目(应用于FPGA、CPLD、MCU)

            国产CH347芯片自从出现在大众视野,就展开了很多讨论。四种工作模式,多接口可同时使用,如下表: 接口模式 接口功能 Mode-0 480Mbps高速USB转双UART(Baudrate最高9Mbps) Mode-1 480Mbps高速USB转UART+SPI+I2C(厂商驱动模式) Mode-2 480Mbps高速USB转UART+SPI+I2C(系统HID驱动模式)

    2024年02月09日
    浏览(28)
  • 基于FPGA的3位十进制密码锁VHDL代码Quartus DE2-115开发板

    名称:基于FPGA的3位十进制密码锁VHDL代码Quartus  DE2-115开发板(文末获取) 软件:Quartus 语言:VHDL 代码功能: 借助EDA工具和设计方法,学习硬件描述语言VHDL用编程的方法来设计电路,在QUARTUSⅡ软件环境中,基于EDA实验室的开发装置DE2-115,其FPGA芯片型号为EP4CE115F29C7,进行电

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

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

    2024年02月21日
    浏览(34)
  • FPGA实现 TCP/IP 协议栈 纯VHDL代码编写 提供数据回环工程源码和技术支持

    FPGA实现 TCP/IP 协议栈 服务器 纯VHDL代码编写 提供4套vivado工程源码和技术支持 没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上

    2024年02月16日
    浏览(36)
  • 基于FPGA的QPSK调制系统verilog开发

    目录 一、理论基础 二、核心程序 三、测试结果         正交相移键控(Quadrature Phase Shift Keying,QPSK)是一种数字调制方式。它分为绝对相移和相对相移两种。由于绝对相移方式存在相位模糊问题,所以在实际中主要采用相对移相方式DQPSK。QPSK是一种四进制相位调制,具有良

    2024年02月01日
    浏览(31)
  • 基于Verilog 语言开发的FPGA密码锁工程

    基于Verilog 语言开发的FPGA密码锁工程。 通过矩阵键盘输入按键值。 输入12修改密码,13清除密码,可以修改原来默认的密码,修改时首先要输入当前密码进行验证,正确后才能更新当前密码,否则修改不成功。 修改结束后按键15,确认修改成功。 也直接使用默认密码作为最终

    2024年02月10日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包