0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog基本语法之数据类型

jf_GctfwYN7 来源:IC修真院 2023-06-18 10:52 次阅读

数据类型及常量、变量

数据类型

数据类型是用来表示数字电路中的数据存储和传送单元

4种基本的数据类型

integer(整形)

parameter类型

reg

wire(线网)

常量

在程序运行的过程中,其值不允许被改变

包括:

数字(包括整形,x和z值,负数)

parameter常量(或称符号常量)

1. 整数型常量

二进制 (b/B)

十进制 (d/D)

十六进制 (h/H)

八进制 (o/O)

整常数的3种表达方式

<位宽>'<进制><数字> 完整的表达方式 8'11000101或 8'hc5
<进制><数字> 缺省位宽,有机器系统决定,至少32位 hc5
<数字> 缺省进制为十进制,位宽默认为32位 197
表达方式 说明 举例

注:位宽表示二进制时的宽度

2.x和z值

x表示不定值(8'b1001xxxx或8’h9x);

z表示高阻值(8'b1001zzzz或8’h9z);

每个字符代表的二进制的宽度取决于所用的进制;

当用二进制表示时,以表明位宽的数若用x或者z表示某些位,则只有在最左边的x或z具有扩展性例如:8'bzx = 8'bzzzz_zzzx 8'b1x = 8'b0000_001x

?是z的另一种表示符号,建议在case语句中使用?表示高阻态z。

casez (select)
    4'h???1: out=a;
    4'h??1?: out=b;
    4'h?1??: out=c;
    4'h1???: out=d;
endcase

3.负数

在位宽前边加一个负号,表示负数;

如:-8’d5 //5的补数 =8'11111011

负号不能放在位宽和进制之间,也不能放在进制和数字之间

4.parameter常量(符号常量)

用parameter来定义一个标示符,代表一个常量,称为符号常量

格式:

parameter 参数名1 = 表达式, 参数名2 = 表达式

parameter 参数型数据的确认符,后边的为赋值语句表

每个赋值语句的右边必须为常数表达式,且只能包含数字或先前定义过的符号常量:

parameter addrwidth =16; //合法

parameter addrwidth = addrwidth * 2 //非法

常用参数来定义延时时间和变量宽度

可用字符串表示的任何地方,都可用定义的参数来代替;

参数是本地的,其定义只在本模块有效;

在模块或实例例化时,可通过参数传递改变在被引用模块或实例中已定义的参数

localparam 符号常量

格式:

localparam 参数名1 = 表达式, 参数名2 = 表达式;

localparam 参数型数据的确认符,后边的为赋值语句表

parameter可作为在顶层模块中例化底层模块时传递参数的接口

localparam的作用域仅仅限于当前module,不能作为参数传递的接口;

实例:

module mod (out, ina, inb);
...
parameter cycle = 8, real_cinstant = 2.039;
...
endmodule 




module test;
...
mod #(6,3.19) mk(out,ain,bin); //对mod模块的实例引用及参数的传递
...
endmodule

变量

在程序运行过程中,其值可以改变的量,称为变量;

常用的有3种:

网络型(nets)

寄存器型(register)

数组(memory)

1.net型变量

输出始终随输入的变化二变化的变量(表示结构实体之间的物理连接)

常用的net变量为wire。

wire型变量

最常用的nets型变量,常用来表示以assign语句赋值的组合逻辑信号

模块中的输入/输出信号类型缺省为wire型

可用做任何方程式的输入,或“assign”语句和实例元件的输出。

2.register 型变量

对应具有状态保持作用的电路元件(如触发器,寄存器)

常用来表示过程块语句(initial always,task,function)内的指定信号

常用register型变量:

reg:常代表触发器

integer:32位带符号整数型变量

real:64位带符号实数型变量

time:无符号时间变量

register变量与net变量的根本区别:register变量要被明确的赋值,并且在被重新赋值前一直保持原值

register变量必须通过过程语句块赋值,不能使用assign语句块赋值

在过程语句块内赋值的每个信号必须定义成register型。

reg型变量

在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)

· reg与wire的区别:

//reg型变量既可以生成触发器,也可以生成组合逻辑
//wire型变量只能生成组合逻辑


//用reg变量生成组合逻辑


module rw1(a,b,out1,out2);
input   a,b;
output  out1, out2;
reg     out1;
wireout2;


assign out2 = a;   //连续赋值语句
always @(b)        //电平触发
       out1 <=~b;  //过程赋值语句
endmodule 


//用reg变量生成触发器


module rw2(clk,d,out1,out2);
input   clk,d;
output  out1, out2;
reg     out1;
wire    out2;


assign out2 = d & ~out1;   //连续赋值语句
always @(posedge clk)        //边沿触发
     begin
       out1 <= d;  //过程赋值语句
 end
endmodule 

· 边沿触发和电平触发的区别:

边沿触发:posedge定义为上升沿触发,只有在后面信号由低变高的时候才触发,negedge正好相反,为下降沿触发。

电平触发:当敏感信号发生变化是触发

3.memory型变量——数组

有若干个相同宽度的reg向量构成的数组

Verilog 通过reg型变量简历数组来对存储器建模

memory型变量可描述RAM,ROM和reg文件

memory型变量通过扩展reg型变量的地址范围来生成

reg [n-1:0] 存储器名[m-1:0]; 每个存储单元位宽为n,共有m个存储单元

例:

reg [n-1:0] rega; //一个n位的寄存器;

reg mema [n-1:0] ; //n个一位寄存器组成的存储器

赋值方式不同:

一个n位的寄存器可用一条赋值语句赋值,一个完整的存储器则不行,若要对某存储器中的存储单元进行读写操作,必须指明该单元在存储器中的地址!

例:

rega=0; //合法赋值语句

mema=0; // 非合法赋值语句

mema[8]=1;//合法赋值语句

mema[1023:0]=0; //合法赋值语句





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5281

    浏览量

    119746
  • ROM
    ROM
    +关注

    关注

    4

    文章

    549

    浏览量

    85608
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1353

    浏览量

    114411
  • 触发器
    +关注

    关注

    14

    文章

    1994

    浏览量

    60999
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8202

原文标题:IC学霸笔记 | Verilog基本语法之数据类型

文章出处:【微信号:IC修真院,微信公众号:IC修真院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    玩转SQLite7:基本语法数据类型

    前面几篇文章已经快速了解了SQLite的基本用法以及简单的Pyhton与C语言的API函数的使用。本篇再来全面介绍下SQLite的基本语法数据类型
    的头像 发表于 09-26 09:07 1685次阅读
    玩转SQLite7:基本<b class='flag-5'>语法</b>与<b class='flag-5'>数据类型</b>

    vhdl与verilog语法比较

    VHDL与verilog 的比较1vhdl语法要求严格 如赋值的数据类型必须一致, 左边为整数,右边必须也为整数, 左边为矢量右边必须也为矢量左右的数据的 位宽必须也一致,例如: li
    发表于 05-30 15:12

    【FPGA学习】Verilog HDL 语言的标识符和数据类型有哪些?

    例子:PieroPIERO / /与 Piero 不同。_a1_b2c00_68ABC$Verilog HDL 有两大类数据类型:• 线网类型,表示 Verilog HDL 结构化元件
    发表于 09-19 09:36

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型二上节介绍了wire,reg数据类型及其用法,并对变量定义中的向量的定义及使用做了说明。本节主要介绍其它几种类型。常用的有如下几种:整数integer
    发表于 08-06 09:21

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型Verilog语法中最基本的数据类型有 线网(wire),寄存器(reg)和整数(integer)三种
    发表于 08-10 14:01

    ARM数据类型有哪些?

    ARM数据类型有哪些?GNU ARM汇编语法格式是什么?
    发表于 11-30 06:09

    vhdl数据类型

    VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。VHDL中的数据类型可以分成四大类: 标量型(SCALAR TYPE):属单元素的最基本的数据类型,通常用于描述一个单值数据对象
    发表于 03-30 15:59 11次下载

    KEIL-MDK和STM32的数据类型-入门篇pdf资料下载

    数据类型-入门篇
    发表于 04-14 10:50 7次下载
    KEIL-MDK和STM32的<b class='flag-5'>数据类型</b>-<b class='flag-5'>之</b>入门篇pdf资料下载

    Struct结构数据类型

    Struct类型是一种由多个不同数据类型元素组成的数据结构,其元素可以是基本数据类型,也可以是Struct、数组等复杂数据类型以及PLC
    的头像 发表于 07-25 17:02 2902次阅读

    结构数据类型(Struct)及应用案例

    Struct数据类型使用非常灵活,随时可以使用,但是相对于PLC数据类型 (UDT) 有以下缺点,所以建议需要使用Struct类型时,可以使用PLC数据类型(UDT)代替。
    的头像 发表于 07-27 16:10 1709次阅读

    什么是数据类型转换

    常用的3种数据类型:1、Python数据类型第一种:字符串(str)。 2、Python数据类型第二种:整数(int)。 3、Python数据类型第三种:浮点数(float)。
    的头像 发表于 02-23 15:21 1716次阅读

    定义数据类型

    在运算之前我们必须首先定义出数据类型,定义出脚本支持的数据类型,这是运算的基础。 这一小节我们将定义出数据类型,在这里我们暂时定义四个数据类型:
    的头像 发表于 03-03 10:10 883次阅读

    Verilog中的基本数据类型

    本文将讨论 verilog 中常用的数据类型,包括对数据表示、线网类型、变量类型和数组,分享一下使用方法和注意事项。
    的头像 发表于 05-12 17:43 8190次阅读
    <b class='flag-5'>Verilog</b>中的基本<b class='flag-5'>数据类型</b>

    Verilog最常用的2种数据类型

    Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。
    的头像 发表于 05-29 16:27 2094次阅读
    <b class='flag-5'>Verilog</b>最常用的2种<b class='flag-5'>数据类型</b>

    plc数据类型怎么理解和应用

    PLC(可编程逻辑控制器)是一种工业自动化设备,用于控制机械和工业过程。在PLC编程中,数据类型是非常重要的概念,因为它决定了程序中数据的存储和处理方式。正确理解和应用PLC数据类型是编写有效、可靠
    的头像 发表于 12-19 11:39 3836次阅读