从头学起Verilog(三):Verilog逻辑设计

引言

  经过了组合逻辑和时序逻辑的复习,终于到了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中的基础内容进行了总结,主要是复习和回顾。需要额外关心的地方已经加粗标出。如果有什么不足希望大家能够指出,共同学习。

原文地址:https://www.cnblogs.com/wt2110/p/12425792.html

时间: 2024-10-12 16:42:00

从头学起Verilog(三):Verilog逻辑设计的相关文章

基于Verilog HDL整数乘法器设计与仿真验证

基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为0表示为正数),取值范围为-127~127. 负数的表示方法为正值的求反又加1.例如: 8’b0000_0100; //表示值:4,正值求反为:8’b1111_1011:再加1表示为:8’b1111_1100,这样便得到了-4的表示方法为:8’b1111_1100. 同理,负值变成正值的方法为:负值

数据库设计理论与实践&#183;&lt;二&gt;概念设计与逻辑设计

2一.概念设计 1.1 概念设计关键知识 1.2 辨析 实体与属性的区别: ①实体能进一步用多个属性来描述,属性却不能,属性是不可再细分/分割的原子项. ②实体内部或者多个实体之间存在联系,而属性无. 实体与联系的区别: ①联系不能单独存在,必须由它联系的双方或者多方共同决定,而实体不需要. ②联系的码由它关联的实体的主码决定,而实体的码和其它实体或联系无关. 一般很多人容易将三元联系和三个二元联系混淆. 1.3 附属图 图1.1 三元联系(三个实体的关系) 图1.2 一元联系 图1.3 各类属

产品经理必备的三种逻辑思维方式详解

产品经理的逻辑思维决定了产品未来的发展规模及产品周期,作为决定产品命运的推手,这三种逻辑思考方式你必须知道. 每个人都有自己不同的思维方式,思维方式决定着看问题的层次和高度.作为靠思考为核心竞争力的产品经理,需要更强的逻辑思维能力.而这种逻辑思维的能力是需要在认识的基础上,不断实践锻炼和强化才能形成属于自己的完整的思考体系.介绍几种的逻辑思考方式供大家参考学习. 1.空.雨.伞-决策思维 产品经理作为产品的负责人,每天都会面对各个方面的决策,产品定位.项目排期.设计抉择等等.而这些决策需要产品经

10天学安卓-第三天

原文:10天学安卓-第三天 经过第二天的学习,我们正确的调用了百度天气API,将天气信息显示到了界面上,做到这一步,我们的工作就算是完成1%了,剩下99%的工作就需要不断的润色这个未成形的APP了. 最首要的就是,我们要把那么一大堆字符转换为普通用户可以轻松理解的界面,那么我们来学习一下Android里面的界面布局. 打开res/layout/activity_main.xml文件,切换到Layouts选项卡,可以看到里面有许多项目,GridLayout.LinearLayout.Relativ

我所理解的网络游戏&lt;?&gt;:战斗逻辑设计

客户端发送消息,统一在服务器端触发战斗 服务器端驱动战斗过程 客户端端接收用户输入向服务器发送消息 客户端接收服务器消息显示客户端表现 1. 服务器--客户端交互(战斗流程) 整战斗流程分为4个状态:战斗准备,战斗开始,战斗进行,战斗结束.其中战斗进行状态时服务器客户端可以进行两种交互,一种是服务器端定时器触发战斗循环,另一种是客户端玩家发送战斗操作.具体如下: a. 战斗准备 b. 战斗开始 · 初始化战斗相关信息,即从基础信息模块中获得角色.阵型.属性,从战斗中获得战场 · 启动战斗实例的定

跟我一起学extjs5(39--单个模块的设计[7数据的增加修改删除])

跟我一起学extjs5(39--单个模块的设计[7数据的增加修改删除]) 从后台取得数据已经可以了,下面对记录的新增.修改和删除进行前后台的互动改造.首先将新增和修改在行内进行,也就是都是在grid上进行. 在grid上可以编辑行,需要在initComponent中增加一个plugins的修改,将原来cellEditing的删除掉,加入rowEditing: // 可以在grid中进行行编辑的设置 this.rowEditing = new Ext.grid.plugin.RowEditing(

跟我一起学extjs5(34--单个模块的设计[2建立表单表bean])

跟我一起学extjs5(34--单个模块的设计[2建立表单表及bean]) 建立表单方案表: CREATE TABLE [dbo].[_ModuleFormScheme]( [tf_formSchemeId] [int] NOT NULL, [tf_moduleId] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [tf_schemeOrder] [int] NOT NULL, [tf_schemeName] [nvarchar](50)

跟我一起学extjs5(33--单个模块的设计[1建立表和bean])

跟我一起学extjs5(33--单个模块的设计[1建立表和bean]) 现在开始进入这个系统的第一个核心部分,就是如何对模块的功能进行设计.请看下图,一个最简单的模块包括的内容有:模块属性,字段属性,列表定义和表单定义. 在上面的定义中,一个模块可以有n个字段组成,可以有若干个列表方案和表单方案:每一个列表和表单可以有若干个组组成,每个组下面又有若干个字段.这样的设计也符合这个教程的前20节中设计出来的功能.现在要做的就是把这些功能做成前后台交互的. 先开始模块字段和列表方案的定义.以上各个方案

[译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块

本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章地址: [译文]Domain Driven Design Reference(一)—— 前言 [译文]Domain Driven Design Reference(二)—— 让模型起作用 [译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块 Ⅱ.模型驱动设计的

数字电路逻辑设计摘要

数字电路逻辑设计摘要 BCD码 Binary Coded Decimal, 使用二进制码(4位)的形式来表示(一位)十进制 有权BCD码: 8421, 2421等 无权BCD码: 余3码等 一个逻辑表达式的功能表达方式 通过真值表显示 通过真值表我们已经知道了该表达式的逻辑功能, 现在我们根据真值表画出卡诺图得出最小项 $\to$ 我们的表达式 最小项的重要性 现在给出一个逻辑表达式式: AB + BC, 现在要我们通过设计一个电路实现这个表达式 该表达式中有ABC三个变量, 我们需要有三个输入