首页 技术 正文
技术 2022年11月20日
0 收藏 993 点赞 4,774 浏览 1980 个字

引言

  经过了组合逻辑和时序逻辑的复习,终于到了Verilog部分。这里主要介绍Verilog一些基础内容,包括结构化模型、TestBench编写和仿真、真值表模型。

  这部分内容不多,也都十分基础,大家可以看个乐呵,看个意思,但是有一些细节还是需要注意的

Verilog结构化模型

 结构化和语言规则

  下图以示例的形式分别说明了1995版和2001/2005版Verilog语法下的结构化模型,两者的不同主要体现在模块输入输出端口的声明中。端口可以是input、output,也可以是inout双向端口(可用用于存储器与总线直接的数据传输)。

  

  Verilog大小写敏感,名称可以包含字母、数字、下划线和$,变量名第一个字符不可以是数字或$。

  四值逻辑:0,1,x,z,x表示未知(wire被相反逻辑所驱动),z表示高阻(连接线不与驱动相连接)。

  除endmodule外,Verilog的每个表述文本都要以”;”结束(与各种软件编程语言类似)。

  注释可以用”//”单行注释,也可以用”/* */”范围注释。

  矢量Sum[3:0]指四位位宽,左侧高位,右侧低位。若一个八位变量t[7:0],存储4,则t[2]对应1,t[3:0]是4,t[3:1]是2。

  线网用于结构间的连接,wire类型,默认,输入即变化,不需要触发。

  reg需要有触发,否则保持值,需要过程赋值语句(always,initial)触发,即只能这过程赋值语句中触发。

  = 阻塞赋值  <=非阻塞赋值

  定长数:默认十进制 8’b0001_0001 表示8位二进制数,存储值为00010001,_便于增加可读性。

 自顶向下的设计(电路较大的时候十分有必要)

  架构:一个设计的高层次的划分和组织结构。

  将一个复杂系统划分为多个易于处理和实现的功能单元来设计,划分后的各单元模块设计更容易、测试更简单。

  如图,一个16位全加器可以被分解为4个4位全加器,4位全加器可以被分解为4个全加器,全加器可以被分解为两个半加器。通过模块嵌套可以清楚地实现。

  实现代码如下:

TestBench编写和仿真

  这里首先给出一个testbench的模版。一个模块完成后,需要编写对应的TestBench文件以测试该模块的功能。TestBench是一个额外的文件。

  在文件开始,一般需要使用 `include “XX.v” 包含要测试的模块;一般使用 `timescale 1ns/1ps 来定义时延单位和时延精度(注意,这里的”`”不是单引号,是ESC下面的那个符号),时间单位和时间精度只能是1、10和100这三种整数,单位有s、ms、us、ns、ps和fs,时延单位必须要大于时延精度。

  reg型变量一般作为模块的输入变量,信号发生,通过在过程赋值语句中改变输入变量值的不同组合,观察输出信号是否符合预期。初始值为x

  wire型变量一般作为模块的输出变量,可以随输出即刻变化。初始值为z

  # 延迟值  表示延时多少延迟单位。

延时

 传播延时

Verilog中所有基本门和线网都有一个默认的零传播延时。

延时可以通过“# 延迟时间”的形式实现仿真。将“#1”插入到每个门例化名的前面。

 惯性延时

每个传导线路都有电容性和电阻性,电荷无法一瞬间积累或消散。

Verilog把一个门的传播延时作为可以影响输出对应输入脉冲最小宽度(即输入脉冲宽度要大于等于门的传播延时才会影响输出)

 传输延时

即传输线上延时可通过:

wire #2 A_long_wire 进行模拟

真值表模型(UDP)

  用真值表直接表示逻辑功能。一位标量输出。

不匹配自动赋值x,z输入处理为x,?可以表示任意。

 组合逻辑

 格式

primitive 模块名(output a,input b,c);

table

//b&c=a

0 0 : 0;

0 1 : 0;

1 0 : 0;

1 1 : 1;

endtable

endprimitive

 时序逻辑

格式1:

// enable       data       :      state      :      next_state/out

1            1            :     ?                    1

即在enable=1、data=1、state任意条件下,输出next_state为1(必须为reg类型)。

格式2:

// clk      data       :      state      :      next_state/out

    (10)         0            :      ?          :      0

即在下降沿,输入data=0,state为任意状态条件下,输出为1。

总结

  本文针对Verilog中的基础内容进行了总结,主要是复习和回顾。需要额外关心的地方已经加粗标出。如果有什么不足希望大家能够指出,共同学习。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849