欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章

Verilog中总共有十九种数据类型,我们先介绍四个最基本的数据类型,他们是:

reg型、wire型、integer型、parameter型

1 常量

  1.1 数字integer

    整数:b二进制   d十进制   h十六进制   o八进制

      表达方式:<位宽=default><进制=d><数字>

      Eg. 8‘b10100100,2'h0a3,3'o455,4’d2435

      注意,当仅有位宽被忽略时,即'b, 'd, 'o'等形式,数据默认位宽为当前机器的字节宽度,常为32位

    X与Z值:x代表不定值,z代表高阻值

      可以用于定义当前进制数的1位(如h下可表达1位十六进制数)。

    负数:位宽前加减号

    下划线:分割数的表达,提高可读性,无意义

  1.2 参数parameter

    定义一个标识符代表一个常量,即标识符形式的常量。提高可读性。格式如下:

    parameter para1=3'b010, para2=4'd1432,...,paran=2'h6a;
    parameter ave_delay = (r+f)/2;

    常用于定义延迟时间和变量宽度,以及改变在被引用模块或实例中已定义的参数。如:

       module Decode(A,F);
        parameter Width=, Polarity=;
         ...
      endmodule

      module Top;
        wire[:] A4;
        wire[:] A5;
        wire[:] F16;
        wire[:] F32;
        Decode #(,) D1(A4,F16);//w=4,p=0
        Decode #() D2(A5,F32);//w=5
      endmodule

    在实例时使用 #() 的方式来更改引用模块参数

2 变量

  2.1 net(default)

  网络数据类型net表示结构实体(如门)之间的物理连接,它不能储存值,而且必须受到驱动器的驱动。如无驱动器连接,则呈现高阻Z态。

    wire(default)

    单门驱动或连续赋值语句驱动的网络型数据。

    常用来表示以assign关键字指定的组合逻辑信号。

    tri

    多驱动器驱动的网络型数据。

    (多驱动源下,若无定义逻辑强度,逻辑值会发生冲突产生不确定值X)

     wire [n-:] name1, name2, ... , namei;
    wire [n:] name1, name2, ... , namei;
    wire name;

  2.2 register

  寄存器是数据储存单元的抽象,通过赋值语句可以改变寄存器储存的值,作用与改变触发器储存的值相当。

  常用来表示always块内的指定信号,代表触发器。

  always块中被赋值的每一个信号都必须定义成reg型

  reg被赋值如同一组触发器存储单元的值被改变。

     reg [n-:] name1, name2, ... , namei;
    reg [n:] name1, name2, ... , namei;
    reg rega;

  默认初始值为x。可以赋正负值,但当该reg是一个表达式中的操作数时,被作为无符号数处理。

  reg型只表示被定义的信号将用在always块内,虽常为寄存器、触发器的输出,但并非总是如此。

  2.3 memory

  Verilog通过建立reg型变量的数组来对存储器进行建模,描述RAM/ROM型存储器和reg文件。

  Verilog中不存在多维数组,memory型数据通过扩展reg型数据的地址范围来生成。

     reg [n-:] mem1[m-:];

     reg [n-:] mem2[m:];

     reg [:] mem[:];   //定义了一个名为mem 的存储器,该存储器拥有 256个 数据位宽为8 存储器,地址范围是从0到255​

     reg [n-:] rega;      // rega 是一个n位的寄存器
    rega = ;       // rega 可以由一个赋值语句赋值
    reg mema[n-:]; // mema 是一个由n个1位寄存器单元构成的存储器
    mema[] = ;
    mema[] = ;
    ...
    mema[n-] = ; // mema 必须一个一个单元地赋值

  如果想对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。

3 基本运算符号
  按操作数个数: 有单目、双目、三目运算符,分别可带一个、两个、三个操作数。

  按功能:

    1) 算术运算符+、-、×、/、%

       加、减、乘、除、求余

       整数除法结果值略去小数部分,取模运算符号位采用模运算式中第一个操作数的符号位。

    2) 赋值运算符=、<=

       同一个always块中,只能全使用阻塞赋值或全使用非阻塞赋值。

      * 非阻塞赋值<=:当前语句的执行不会阻塞下一语句的执行。

      在块语句结束时才完成赋值操作,块内的赋值语句同时赋值

      可以看作两个步骤的过程:

        赋值时刻开始时,计算非阻塞赋值右操作数表达式。

        赋值时刻结束时,更新非阻塞赋值左操作数。

     reg a=, b=, c=, d=;
    always @(posedge clk)
    {
    a <= b;
    b <= c;
    c <= d;
    }

      并行,电路实现往往与触发沿有关,常被综合成时序逻辑电路。

      * 阻塞赋值=:完成当前语句后才能做下一句的操作

      在该语句结束时就完成赋值操作,块内的阻塞赋值语句顺序执行

      顺序执行,一般不能设定有延迟,常被综合成组合逻辑电路。

    3)关系运算符>、<、>=、<=

    4)逻辑运算符&&、||、!

      &&和 || 是双目运算符,优先级低于算术运算符

      ! 是单目运算符,优先级高于算术运算符

     (a>b) && (x>y) 相当于 a>b && x>y
    (a==b) || (x==y) 相当于 a==b || x==y
    (!a) || (a>b) 相当于 !a || a>b

    5)条件运算符 ? :

    6)位运算符~、|、^、&、^~

      取反、或、异或、与、同或

       // 除相应双目位运算外还可用作单目运算符缩减运算

     reg [:] A = ;
    reg B;
    B = &A;
    // 相当于B = 0 & 1 & 0 & 1
    // 即将A的所有位进行位运算

    7)移位运算符<<、>>

      a>>n;   // 将操作数a右移n位,去尾,缩小
      a<<n;   // 将操作数a左移n位,补0  ,放大

    8)拼接运算符{ }

      把两个/多个信号的某些位拼接起来运算。

      a = 'b0;
     b = 'b11101100;
     c = 'b1;      //用法1
     r = {a, b[:], c, 'b101};
     //此时r = 0 1100 1 101      //用法2
     r = {{a}};
     //此时r = 0000
     //嵌套用法
     r = {b[:], {{c,a}}};
     //此时r = 111 101010

易混知识点:

位运算符:按位进行运算,原来的操作数有几位,结果就有几位,若2个操作数位数不同,则位短的数据左端会自动补0

逻辑运算符:如果操作数是多位的,则将操作数看作整体,若操作数中每一位都是0值,则为逻辑0值,若操作数中有1,则为逻辑1值

4 块语句

  4.1 顺序块

    块内语句顺序执行,上一条语句行完毕后,下一条语句才能执行

    每条语句的延迟时间是相对于前一条语句的仿真时间而言的(也就是说,顺序块内一条语句的延迟时间是指从前一条语句仿真完毕到当前语句仿真完毕的间隔)

    直到最后一条语句执行完,程序流程控制才跳出该语句块。

     begin
     语句1;
     语句2;
    end ​    begin:block_name
    assignments;
     语句1;
     语句2;
    end

  4.2 并行块

    1)块内语句同时执行,程序流程控制一进入到该并行块,块内语句则开始同时并行地执行,

    2)块内每条语句的延迟时间是相对于程序流程控制进入到块内的仿真时间的(也就是说,并行块内一条语句的延迟时间是指从程序流程控制进入到块内到该条语句执行完毕的间隔;这个延迟时间是用来给赋值语句提供执行时序的),

    3)当按延迟时间的时序中排在最后的语句执行完毕或一个disable语句执行时,程序流程控制跳出该程序块。

       fork
       语句1;
       语句2;
      join ​      fork:块名
       assignments;
       语句1;
       语句2;
      end

  4.3 生成块

  generate生成块的本质是使用循环内的一条语句来代替多条重复的Verilog语句,简化用户的编程
    用法:
    1. generate 语法有 generate for 、genreate if 和 generate case 三种
    2. generate for 语句必须有 genvar 关键字定义 for 的变量
    3. for 的内容必须加 begin 和 end
    4. 必须给 for 语段起个名字

 . generate for例子:
generate
genvar i; //generate 8 samll fifo for in_data[i] 8X72
for(i=; i<NUM_QUEUES; i=i+)
begin: in_arb_queues //NUM_QUEUES = 8
small_fifo
#( .WIDTH(DATA_WIDTH+CTRL_WIDTH), .MAX_DEPTH_BITS())
in_arb_fifo
(// Outputs
.dout ({fifo_out_ctrl[i], fifo_out_data[i]}),
.full (),
.nearly_full (nearly_full[i]),
.prog_full (),
.empty (empty[i]),
// Inputs
.din ({in_ctrl[i], in_data[i]}),
.wr_en (in_wr[i]),
.rd_en (rd_en[i]),
.reset (reset),
.clk (clk));
end // block: in_arb_queues
endgenerate .generate if例子:
generate
if (REG_WIDTH == WRITE_WIDTH)
begin : new_data_a_generation
assign new_data_a = merge_update ? merge_wr_data : held_wr_data_a;
end
else begin
assign new_data_a = merge_update ?
{{(REG_WIDTH - WRITE_WIDTH - ){merge_wr_data_sign}}, merge_wr_data} :
{{(REG_WIDTH - WRITE_WIDTH){held_wr_data_sign_a}}, held_wr_data_a};
end
endgenerate .generate还可以进行多个assign赋值!
module anytest_v(
input clk,
input[:] datain,
output[:] dataout,
output finish
); wire[:] mem[:];
wire[*-:] xxx;
//reg[7:0] i; generate
genvar i;
for(i=;i<=;i=i+)
begin :wiertech
assign mem[i]= 'b0;
end
endgenerate endmodule

【FPGA篇章三】FPGA常用语句:Verilog基本语法要素的更多相关文章

  1. 【数据库】 SQL 常用语句之系统语法

    [数据库] SQL 常用语句之系统语法 1. 获取取数据库服务器上所有数据库的名字 SELECT name FROM master.dbo.sysdatabases 2. 获取取数据库服务器上所有非系 ...

  2. FPGA学习笔记(四)——Verilog基本语法

    ###### [该随笔部分内容转载自小梅哥] ######### 组合逻辑:    多路选择器.加法器.译码器.乘法器 时序逻辑:    计数器.分频器.定时器.移位寄存器 一.Verilog文件的基 ...

  3. sql server常用函数、常用语句

    一.常用函数 1.字符串函数 : charindex(':','abc:123')    --寻找一个字符在一段字符串中起始的位置 len('zhangsan')   --获取一段字符串的长度 lef ...

  4. 使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值

    使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值. 当前仅总结使用EN5339芯片的方案 Vout = Ra*0.6/Rb + 0.6 芯片手册推荐Ra取348K,则 3.3V时,取R ...

  5. 【FPGA篇章一】FPGA工作原理:详细介绍FPGA实现编程逻辑的机理

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA(Field Programmable Gate Array),即现场可编程逻辑门阵列,它是作为专用集成电路(ASIC)领域中一种半 ...

  6. MySQL 常用语句 (汇集)

    原文地址:MySql常用语句作者:wuyanle 一.mysql常用语句 创建,删除和最基本查询: 显示数据库  mysql->show databases; 创建数据库  mysql-> ...

  7. JavaScript快速入门(三)——JavaScript语句

    JavaScript基本语句 基本概述 JavaScript是脚本语言,从上到下解释执行,最小单位为语句或语句块,每个语句以分号结尾,每个语句块以右大括号结尾. JavaScript可以将多条语句或语 ...

  8. FPGA+ARM or FPGA+DSP?

    网上有人说.现在的FPGA,ARM功能已经强大到无需DSP协助处理了,未来DSP会不会消声灭迹?是DSP取代FPGA和ARM,还是ARM,FPGA取代DSP呢?担心好不容易学精了DSP,结果DSP变成 ...

  9. MySQL 常用语句大全

    MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...

随机推荐

  1. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings

    Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...

  2. 如何用python批量生成真实的手机号码

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Python测试社区 1目 标 场 景 平时在工作过程中,偶尔会需要大 ...

  3. python超实用的30 个简短的代码片段(二)

    Python是目前最流行的语言之一,它在数据科学.机器学习.web开发.脚本编写.自动化方面被许多人广泛使用. 它的简单和易用性造就了它如此流行的原因. 如果你正在阅读本文,那么你或多或少已经使用过P ...

  4. A Bug's Life POJ - 2492 (种类或带权并查集)

    这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做. 题目大意:输入x,y表示x和y交配,然后判断是否有同性恋. 1 带权并查集: 我们可以用边的权值来表示一种 ...

  5. I - Fill The Bag codeforces 1303D

    题解:注意这里的数组a中的元素,全部都是2的整数幂.然后有二进制可以拼成任意数.只要一堆2的整数幂的和大于x,x也是2的整数幂,那么那一堆2的整数幂一定可以组成x. 思路:位运算,对每一位,如果该位置 ...

  6. Python - 和我聊Python节目最新一期介绍 - 257期:使用超级电脑,Python,射电天文学知识来探索银河系

    今天,给大家简单介绍和我聊Python的最新一期节目,第257期:使用超级电脑,Python,射电天文学知识来探索银河系. 听着标题就觉得高大上,是的,我也是这么认为的.这次请的嘉宾来头很大,来自国际 ...

  7. Linux安装PHP的Redis扩展(已安装Redis)

    1.下载需要的php操作redis的扩展包 下载地址 http://pecl.php.net/package/redis    下载对应php版本,我的php版本为7.3,下载的是最新的版本5.0.2 ...

  8. 下载mp4文件

    实现mp4文件的下载,而不是在线播放 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  9. Python 代码编辑器怎么选?PyCharm、VS Code、Jupyter Notebook 都各有特色

    Python 代码编辑器怎么选?PyCharm.VS Code.Jupyter Notebook 都各有特色,Jupyter 适合做数据分析这些需要可视化的操作,PyCharm 更适合做完整的 Pyt ...

  10. 全球数字高程数据(DEM)详解,还有地形晕渲、等高线等干货

    1 基本概念 DEM是数字高程模型的英文简称(Digital Elevation Model),是研究分析地形.流域.地物识别的重要原始资料.由于DEM 数据能够反映一定分辨率的局部地形特征,因此通过 ...