Verilog HDL是一种硬件设计语言. 可以采用三种不同方式: 行为描述方式, 数据流方式, 结构化方式对设计进行建模.

Verilog HDL语言设计入门

模块(module)是Verilog的基本描述单位, 一个模块可以在另一个模块中使用, moduleendmodule进行定义.

Verilog HDL大小写敏感.

结构化描述

module decoder_2_to_4 (A, D) ;
input [1:0] A ;
output [3:0] D ;
assign D =     (A == 2'b00) ? 4'b0001 :(A == 2'b01) ? 4'b0010 :(A == 2'b10) ? 4'b0100 :(A == 2'b11) ? 4'b1000 : 4'b0000 ;
endmodule

主要用于层次化设计中.

数据流描述

一般使用连续赋值assign语句描述, 主要用于组合逻辑电路建模.

module mux2_1(out1, a, b, sel) ;output   out1;input  a, b;input sel;
assign out1= sel ? b : a;
endmodule

行为描述

一般使用InitialAlways语句描述, 可以对组合、时序逻辑电路建模.

module mux2_1(out1, a, b, sel) ;output  reg out1;input  a, b;input sel;
always @(sel or a or b)
beginif (sel) out1 = b;        //在Initial或Always中赋值的变量需要为reg型elseout1 = a;
end
endmodule

混合设计描述

来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关。

module FA_Mix(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;reg Cout;reg T1,T2,T3;wire S1;
xor X1(S1,A,B);                   // 门实例语句
always @ (A or B or Cin)   // always 语句
beginT1 = A & B;T2 = A & Cin;T3 = B & Cin;Cout = (T1 | T2) | T3;
end
assign Sum = S1 ^ Cin;     // 连续赋值语句
endmodule

设计验证与仿真

要测试一个设计块是否正确,就要用Verilog再写一个测试模块。这个测试模块应包括以下三个方面的内容:

  • 测试模块中要调用到设计块,只有这样才能对它进行测试;

  • 测试模块中应包含测试的激励信号源;

  • 测试模块能够实施对输出信号的检测,并报告检测结果。

      `timescale 1ns / 1ps     // ·(反引号)这个字符位于主键盘的左上角module decoder_2_to_4_tb;     //  测试模块没有输入输出端口reg [1:0]   x;wire [3:0]  y;integer k;decoder_2_to_4  DUT (x, y);      // Circuit under testinitialbeginx = 0; for (k=0; k < 4; k=k+1)  #5 x=k;                        // 在5个时间单位后k赋值给x#10 $stop;             // 在10个时间单位后暂停仿真endendmodule
    

Vivado设计流程

步骤1 创建一个Vivado工程
步骤2 添加设计文件(.v)
步骤3 添加约束文件(.xdc-Xilinx Design Constraints)
步骤4 添加testbench文件(.v)
步骤5 仿真:测试设计块
步骤6 综合:将语言转化成电路(网表文件)
步骤7 实现:将网表配置到具体的FPGA芯片
步骤8 生成比特流,下载到板子进行功能验证

Verilog语言基础

注释

同C语言

标识符

可以是任意一组字母、数字、$符号和_(下划线)符号的组合;

数值常量

General format is: <size><’base><number>
d:十进制,h:十六进制,b:二进制

4’b1101  // this is a 4-bit binary number equal to 13
10’h2e7 // this is a 10-bit wide number specified in hex

参数parameter

有时候希望模块成为一般化的模块,即希望端口位数可选。parameter可实现此功能,在调用模块时可改变该参数的值.

module mux2_1(out1, a, b, sel) ;parameter N=2; //本模块内不可变 output [N-1:0]   out1;input [N-1:0]  a, b;input sel;assign out1= sel ? b : a;
endmodule
在顶层模块中:
mux2_1 #(4)  dut0( out, x,y,s );    //实例化时参数N值为4

数据类型

  • 线网类型(wire)
  • 寄存器类型(reg):只能在alwaysinitial语句中被赋值

vector

向量拼接{}

时延

assign #2 Sum = A ^ B;    //   #2指2个时间单位。
and #1 A0(OUT, A, B);

缩位运算符

Reduction ANDassign all_ones = &accumulator;    // are all bits set?
Reduction ORassign not_zero = |accumulator;    // are any bits set?
Reduction XORassign parity = ^data_out;        // even parity bit

Verilog语言__Verilog简介及设计基础相关推荐

  1. Verilog语言简介(数字逻辑课程笔记)

    Verilog语言简介 Verilog语言简介(数字逻辑课程笔记) 概述 数据类型 模块构建 操作符 赋值语句 连续赋值 过程赋值 过程赋值语句块:always语句块 阻塞赋值 非阻塞赋值 过程赋值语 ...

  2. (61)FPGA面试题-使用Verilog语言编写异步复位同步释放代码

    1.1 FPGA面试题-使用Verilog语言编写异步复位同步释放代码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog语言编写异步复位 ...

  3. (53)FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现)

    1.1 FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-利用任务task实现 ...

  4. (52)FPGA面试题-利用函数function实现半字节加法功能(Verilog语言实现)

    1.1 FPGA面试题-利用函数function实现半字节加法功能(Verilog语言实现) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-利用函数fu ...

  5. (11)verilog语言编写8路分配器

    2.10 verilog语言编写8路分配器 2.10.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写8路分配器: 5)本节结束. 2.10.2 ...

  6. (12)verilog语言编写8路选择器

    2.10 verilog语言编写8路选择器 2.10.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写8路选择器: 5)本节结束. 2.10.2 ...

  7. (11)verilog语言编写加减乘除

    2.10 verilog语言编写加减乘除 2.10.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写加减乘除: 5)本节结束. 2.10.2 FP ...

  8. (10)verilog语言编写SPI发送

    2.10 verilog语言编写SPI发送 2.10.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写SPI发送: 5)本节结束. 2.10.2 ...

  9. (9)verilog语言编写SPI接收

    2.9 verilog语言编写SPI接收 2.9.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写SPI接收: 5)本节结束. 2.9.2 FPG ...

最新文章

  1. rsa.FromXmlString 系统找不到指定的文件
  2. 解决memcached不能远程访问的问题
  3. 207-Course Schedule
  4. JAVA基础知识之JDBC——JDBC事务处理及批量更新
  5. MySQL验证索引提升查询效率
  6. aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈
  7. Linux使用技巧15则
  8. java 复杂 sql_复杂的SQL条件
  9. java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解
  10. 如何检测服务器运行正常运行,一种检测服务器运行状态的方法、装置和系统专利_专利查询 - 天眼查...
  11. centOS下lnamp安装
  12. 使用和执行SQL Server Integration Services包的方法
  13. AMD授权GPU给Intel?苏姿丰:没有的事
  14. 高斯消元--模板,原理
  15. oracle not like优化,oracle的like优化,对比了一下,效果确实比like好些。
  16. IEEEAccess参考文献整理
  17. java数字签名(签名生成,用证书验证签名)
  18. 三星oneui主屏幕费电_三星最新力作,第三方桌面无处遁形,OneUI越来越自由
  19. 系列教程--Linux基础--12--用户和组
  20. 二进制转四进制计算机,二进制换算(进制转换计算器)

热门文章

  1. 手机连接电脑后,电脑上显示不出来手机的文件夹
  2. 学生学籍管理系统_学生登陆系统查询与修改信息
  3. 数据库之考勤管理系统
  4. 泛函分析笔记3:内积空间
  5. 华为社会招聘面试流程
  6. 移动端电影院V2.0邀你体验电影院首映礼
  7. 一文看懂互联网支付系统架构
  8. 一台云服务器ECS如何绑定多个公网IP
  9. 360度全景VR摄像机初探
  10. sqlite 查找表中多余的重复记录