当前位置:文档之家› 中文版Verilog HDL简明教程

中文版Verilog HDL简明教程

中文版Verilog HDL简明教程
中文版Verilog HDL简明教程

V erilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

V erilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,V erilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

V erilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用V erilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。V erilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,V erilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

===============================

中文版V erilog HDL简明教程:第1章简介

V erilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

V erilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,V erilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

V erilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用V erilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。V erilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,V erilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

历史

V erilog HDL语言最初是于1983年由Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用,V erilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中,V erilog HDL语言于1990年被推向公众领域。Open V erilog International (OVI)是促进V erilog发展的国际性组织。1992年,OVI决定致力于推广V erilog OVI标准成为IEEE标准。这一努力最后获得成功,V erilog 语言于1995年成为IEEE标准,称为IEEE Std 1364-1995。完整的标准在V erilog硬件描述语言参考手册中有详细描述。

主要能力

下面列出的是V erilog硬件描述语言的主要能力:

* 基本逻辑门,例如and、or和nand等都内置在语言中。

* 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

* 开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。

* 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。

* 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。

* V erilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。

* 能够描述层次设计,可使用模块实例结构描述任何层次。

* 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。

* V erilog HDL不再是某些公司的专有语言而是IEEE标准。

* 人和机器都可阅读V erilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。* V erilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问V erilog 模块内信息、允许设计者与模拟器交互的例程集合。

* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。

* 能够使用内置开关级原语在开关级对设计完整建模。

* 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。

* V erilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。

* 在行为级描述中,V erilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。

* 能够使用门和模块实例化语句在结构级进行结构描述。

* V erilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。

* V erilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。

* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。

* 可以显式地对并发和定时进行建模。

* 提供强有力的文件读写能力。

* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。

习题

1. V erilog HDL 是在哪一年首次被IEEE标准化的?

2. V erilog HDL支持哪三种基本描述方式?

3. 可以使用V erilog HDL描述一个设计的时序吗?

4. 语言中的什么特性能够用于描述参数化设计?

5. 能够使用V erilog HDL 编写测试验证程序吗?

6. V erilog HDL 是由哪个公司最先开发的?

7. V erilog HDL中的两类主要数据类型什么?

8. UDP代表什么?

9. 写出两个开关级基本门的名称。

10. 写出两个基本逻辑门的名称。

======================================

中文版V erilog HDL简明教程:第2章HDL指南

本章提供HDL语言的速成指南。

2.1 模块

模块是V erilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。

一个模块的基本语法如下:

module module_name (port_list);

Declarations:

reg, wire, parameter,

input, output, inout,

function, task, . . .

Statements:

Initial statement

Always statement

Module instantiation

Gate instantiation

UDP instantiation

Continuous assignment

endmodule

说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。

以下为建模一个半加器电路的模块的简单实例。

module HalfAdder (A, B, Sum, Carry);

input A, B;

output Sum, Carry;

assign #2 Sum = A ^ B;

assign #5 Carry = A & B;

endmodule

模块的名字是HalfAdder。模块有4个端口: 两个输入端口A和B,两个输出端口Sum 和Carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。

模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量A和B 上的事件。

在模块中,可用下述方式描述一个设计:

1) 数据流方式;

2) 行为方式;

3) 结构方式;

4) 上述描述方式的混合。

下面几节通过实例讲述这些设计描述方式。不过有必要首先对V erilog HDL的时延作简要介绍。

2.2 时延

V erilog HDL模型中的所有时延都根据时间单位定义。下面是带时延的连续赋值语句实例。

assign #2 Sum = A ^ B;

#2指2个时间单位。

使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义,如下所示:

` timescale 1ns /100ps

此语句说明时延时间单位为1ns并且时间精度为100ps (时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模块包含上面的连续赋值语句, #2 代表2ns。

如果没有这样的编译器指令, V erilog HDL 模拟器会指定一个缺省时间单位。IEEE V erilog HDL 标准中没有规定缺省时间单位。

2.3 数据流描述方式

用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。连续赋值语句的语法为:

assign [delay] LHS_net = RHS_ expression;

右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值, 缺省时延为0。

下面的例子显示了使用数据流描述方式对2-4解码器电路的建模的实例模型。

`timescale 1ns/ 1ns

module Decoder2x4 (A, B, EN, Z);

input A, B, EN;

output [ 0 :3] Z;

wire Abar, Bbar;

assign #1 Abar = ~ A; / / 语句1。

assign #1 Bbar = ~ B; / / 语句2。

assign #2 Z[0] = ~ (Abar & Bbar & EN) ; / / 语句3。

assign #2 Z[1] = ~ (Abar & B & EN) ; / / 语句4。

assign #2 Z[2] = ~ (A & Bbar & EN) ; / / 语句5。

assign #2 Z[3] = ~ (A & B & EN) ; / / 语句6。

endmodule

以反引号“ ` ”开始的第一条语句是编译器指令, 编译器指令`timescale 将模块中所有时延的单位设置为1 ns,时间精度为1 ns。例如,在连续赋值语句中时延值#1和#2分别对应时延1 ns和2 ns。

模块Decoder2x4有3个输入端口和1个4位输出端口。线网类型说明了两个连线型变量Abar和Bbar (连线类型是线网类型的一种)。此外,模块包含6个连续赋值语句。

当EN在第5 ns变化时,语句3、4、5和6执行。这是因为EN是这些连续赋值语句中右边表达式的操作数。Z[0]在第7 ns时被赋予新值0。当A在第15 ns变化时, 语句1、5和6执行。执行语句5和6不影响Z[0]和Z[1]的取值。执行语句5导致Z[2]值在第17 ns变为0。执行语句1导致Abar在第16 ns被重新赋值。由于Abar的改变,反过来又导致Z[0]值在第18 ns变为1。

请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。

2.4 行为描述方式

设计的行为功能使用下述过程语句结构描述:

1) initial语句:此语句只执行一次。

2) always语句:此语句总是循环执行, 或者说此语句重复执行。

只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。

下例为always语句对1位全加器电路建模的示例。

module FA_Seq (A, B, Cin, Sum, Cout);

input A, B, Cin;

output Sum, Cout;

reg Sum, Cout;

reg T1, T2, T3;

always

@ ( A or B or Cin ) begin

Sum = (A ^ B) ^ Cin;

T1 = A & Cin;

T2 = B & Cin;

T3 = A & B;

Cout = (T1| T2) | T3;

end

endmodule

模块FA_Seq 有三个输入和两个输出。由于Sum、Cout、T1、T2和T3在always 语句中被赋值,它们被说明为reg 类型(reg 是寄存器数据类型的一种)。always 语句中有一个与事件控制(紧跟在字符@ 后面的表达式)。相关联的顺序过程(begin-end对)。这意味着只要A、B或Cin 上发生事件,即A、B或Cin之一的值发生变化,顺序过程就执行。在顺序过程中的语句顺序执行,并且在顺序过程执行结束后被挂起。顺序过程执行完成后,always 语句再次等待A、B或Cin上发生的事件。

在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。

时延可以细分为两种类型:

1) 语句间时延: 这是时延语句执行的时延。

2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。

下面是语句间时延的示例:

Sum = (A ^ B) ^ Cin;

#4 T1 = A & Cin;

在第二条语句中的时延规定赋值延迟4个时间单位执行。就是说,在第一条语句执行后等待4个时间单位,然后执行第二条语句。下面是语句内时延的示例。

Sum = #3 (A^ B) ^ Cin;

这个赋值中的时延意味着首先计算右边表达式的值, 等待3个时间单位,然后赋值给Sum。

如果在过程赋值中未定义时延,缺省值为0时延,也就是说,赋值立即发生。这种形式以及在always 语句中指定语句的其他形式将在第8章中详细讨论。

下面是initial语句的示例:

`timescale 1ns / 1ns

module Test (Pop, Pid);

output Pop, Pid;

reg Pop, Pid;

initial

begin

Pop = 0; // 语句1。

Pid = 0; // 语句2。

Pop = #5 1; // 语句3。

Pid = #3 1; // 语句4。

Pop = #6 0; // 语句5。

Pid = #2 0; // 语句6。

end

endmodule

initial语句包含一个顺序过程。这一顺序过程在0 ns时开始执行,并且在顺序过程中所有语句全部执行完毕后, initial语句永远挂起。这一顺序过程包含带有定义语句内时延的分组过程赋值的实例。语句1和2在0 ns时执行。第三条语句也在0时刻执行,导致Pop 在第5 ns时被赋值。语句4在第5 ns执行,并且Pid 在第8 ns被赋值。同样,Pop在14 ns被赋值0,Pid在第16 ns被赋值0。第6条语句执行后,initial语句永远被挂起。

2.5 结构化描述形式

在V erilog HDL中可使用如下方式描述结构:

1) 内置门原语(在门级);

2) 开关级原语(在晶体管级);

3) 用户定义的原语(在门级);

4) 模块实例(创建层次结构)。

通过使用线网来相互连接。下面的结构描述形式使用内置门原语描述的全加器电路实例。

module FA_Str (A, B, Cin, Sum, Cout);

input A, B, Cin;

output Sum, Cout;

wire S1, T1, T2, T3;

xor

X1 (S1, A, B),

X2 (Sum, S1, Cin);

and

A1 (T3, A, B),

A2 (T2, B, Cin),

A3 (T1, A, Cin),

or

O1 (Cout, T1, T2, T3);

endmodule

在这一实例中,模块包含门的实例语句,也就是说包含内置门xor、and和or 的实例语

句。门实例由线网类型变量S1、T1、T2和T3互连。由于没有指定的顺序, 门实例语句可以以任何顺序出现;图中显示了纯结构;xor、and和or是内置门原语;X1、X2、A1等是实例名称。紧跟在每个门后的信号列表是它的互连;列表中的第一个是门输出,余下的是输入。例如,S1与xor 门实例X1的输出连接,而A和B与实例X1的输入连接。

4位全加器可以使用4个1位全加器模块描述。下面是4位全加器的结构描述形式。

module FourBitFA (FA, FB, FCin, FSum, FCout );

parameter SIZE = 4;

input [SIZE:1] FA, FB;

output [SIZE:1] FSum

input FCin;

input FCout;

wire [ 1: SIZE-1] FTemp;

FA_Str

FA1( .A (FA[1]), .B(FB[1]), .Cin(FCin),

.Sum(FSum[1]), .Cout(FTemp[2])),

FA2( .A (FA[2]), .B(FB[2]), .Cin(FTemp[1]),

.Sum(FSum[2]), .Cout(FTemp[2])),

FA3(FA[3], FB[3], FTemp[2], FSum[3], FTemp[3],

FA4(FA[4], FB[4], FTemp[3], FSum[4], FCout);

endmodule

在这一实例中,模块实例用于建模4位全加器。在模块实例语句中,端口可以与名称或位置关联。前两个实例FA1和FA2使用命名关联方式,也就是说,端口的名称和它连接的线网被显式描述(每一个的形式都为“.port_name (net_name))。最后两个实例语句,实例FA3和FA4使用位置关联方式将端口与线网关联。这里关联的顺序很重要,例如,在实例FA4中,第一个FA[4]与FA_Str 的端口A连接,第二个FB[4]与FA_Str 的端口B连接,余下的由此类推。

2.6 混合设计描述方式

在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。

下面是混合设计方式的1位全加器实例。

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 ) begin // always 语句。

T1 = A & Cin;

T2 = B & Cin;

T3 = A & B;

Cout = (T1| T2) | T3;

end

assign Sum = S1 ^ Cin; // 连续赋值语句。

endmodule

只要A或B上有事件发生,门实例语句即被执行。只要A、B或Cin上有事件发生,就执行always 语句,并且只要S1或Cin上有事件发生,就执行连续赋值语句。

2.7 设计模拟

V erilog HDL不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计验证的建模能力。激励和控制可用初始化语句产生。验证运行过程中的响应可以作为“变化时保存”或作为选通的数据存储。最后,设计验证可以通过在初始化语句中写入相应的语句自动与期望的响应值比较完成。

下面是测试模块Top的例子。该例子测试2.3节中讲到的FA_Seq模块。

…timescale 1ns/1ns

module Top; // 一个模块可以有一个空的端口列表。

reg PA, PB, PCi;

wire PCo, PSum;

// 正在测试的实例化模块:

FA_Seq F1(PA, PB, PCi, PSum, PCo); // 定位。

initial

begin: ONLY_ONCE

reg [3:0] Pal;

//需要4位, Pal才能取值8。

for (Pal = 0; Pal < 8; Pal = Pal + 1)

begin

{PA, PB, PCi} = Pal;

#5 $display (“PA, PB, PCi = %b%b%b”, PA, PB, PCi,

“ : : : PCo, PSum=%b%b”, PCo, PSum);

end

end

endmodule

在测试模块描述中使用位置关联方式将模块实例语句中的信号与模块中的端口相连接。也就是说,PA连接到模块FA_Seq的端口A,PB连接到模块FA_Seq的端口B,依此类推。注意初始化语句中使用了一个for循环语句,在PA、PB和PCi上产生波形。for 循环中的第一条赋值语句用于表示合并的目标。自右向左,右端各相应的位赋给左端的参数。初始化语句还包含有一个预先定义好的系统任务。系统任务$display将输入以特定的格式打印输出。

系统任务$display调用中的时延控制规定$display任务在5个时间单位后执行。这5个时间单位基本上代表了逻辑处理时间。即是输入向量的加载至观察到模块在测试条件下输出之间的延迟时间。

这一模型中还有另外一个细微差别。Pal在初始化语句内被局部定义。为完成这一功能,初始化语句中的顺序过程(begin-end)必须标记。在这种情况下, ONLY_ONCE是顺序过程标记。如果在顺序过程内没有局部声明的变量,就不需要该标记。下面是测试模块产生的输出。

PA, PB, PCi = 000 ::: PCo, PSum = 00

PA, PB, PCi = 001 ::: PCo, PSum = 01

PA, PB, PCi = 010 ::: PCo, PSum = 01

PA, PB, PCi = 011 ::: PCo, PSum = 10

PA, PB, PCi = 100 ::: PCo, PSum = 01

PA, PB, PCi = 101 ::: PCo, PSum = 10

PA, PB, PCi = 110 ::: PCo, PSum = 10

PA, PB, PCi = 111 ::: PCo, PSum = 11

验证与非门交叉连接构成的RS_FF模块的测试模块如下例所示。

`timescale 10ns/1ns

module RS_FF (Q, Qbar, R, S);

output Q, Qbar;

input R, S;

nand #1 (Q, R, Qbar);

nand #1 (Qbar, S, Q,);

//在门实例语句中,实例名称是可选的。

endmodule

module Test;

reg TS, TR;

wire TQ, TQb;

//测试模块的实例语句:

RS_FF NSTA (.Q(TQ), .S(TS), .R(TR), .Qbar(TQb));

//采用端口名相关联的连接方式。

// 加载激励:

initial

begin:

TR = 0;

TS = 0;

#5 TS = 1;

#5 TS = 0;

TR = 1;

#5 TS = 1;

TR = 0;

#5 TS = 0;

#5 TR = 1;

end

//输出显示:

initial

$monitor ("At time %t ," , $time,

"TR = %b, TS=%b, TQ=%b, TQb= %b", TR, TS, TQ, TQb);

endmodule

RS_FF模块描述了设计的结构。在门实例语句中使用门时延;例如,第一个实例语句中的门时延为1个时间单位。该门时延意味着如果R或Qbar假定在T时刻变化,Q将在T+1时刻获得计算结果值。

模块Test是一个测试模块。测试模块中的RS_FF用实例语句说明其端口用端口名关联方式连接。在这一模块中有两条初始化语句。第一个初始化语句只简单地产生TS和TR上的波形。这一初始化语句包含带有语句间时延的程序块过程赋值语句。

第二条初始化语句调用系统任务$monitor。这一系统任务调用的功能是只要参数表中指定的变量值发生变化就打印指定的字符串。下面是测试模块产生的输出。请注意`timescale 指令在时延上的影响。

At time 0, TR=0, TS=0, TQ=x, TQb= x

At time 10, TR=0, TS=0, TQ=1, TQb= 1

At time 50, TR=0, TS=1, TQ=1, TQb= 1

At time 60, TR=0, TS=1, TQ=1, TQb= 0

At time 100, TR=1, TS=0, TQ=1, TQb= 0

At time 110, TR=1, TS=0, TQ=1, TQb= 1

At time 120, TR=1, TS=0, TQ=0, TQb= 1

At time 150, TR=0, TS=1, TQ=0, TQb= 1

At time 160, TR=0, TS=1, TQ=1, TQb= 1

At time 170, TR=0, TS=1, TQ=1, TQb= 0

At time 200, TR=0, TS=0, TQ=1, TQb= 0

At time 210, TR=0, TS=0, TQ=1, TQb= 1

At time 250, TR=1, TS=0, TQ=1, TQb= 1

At time 260, TR=1, TS=0, TQ=0, TQb= 1

后面的章节将更详细地讲述这些主题。

习题

1. 在数据流描述方式中使用什么语句描述一个设计?

2. 使用`timescale 编译器指令的目的是什么?举出一个实例。

3. 在过程赋值语句中可以定义哪两种时延?请举例详细说明。

4. initial语句与always 语句的关键区别是什么?

5. 为2.3节中描述的模块Decode2x4编写一个测试验证程序。

6. 列出你在V erilog HDL模型中使用的两类赋值语句。

7. 在顺序过程中何时需要定义标记?

8. 找出下面连续赋值语句的错误。

assign Reset = #2 ^ WriteBus;

中文版V erilog HDL简明教程:第3章V erilog语言要

本章介绍V erilog HDL的基本要素,包括标识符、注释、数值、编译程序指令、系统任务和系统函数。另外,本章还介绍了V erilog硬件描述语言中的两种数据类型。

3.1 标识符

V erilog HDL中的标识符(identifier)可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以下是标识符的几个例子:

Count

COUNT //与Count不同。

_R1_D2

R56_68

FIVE$

转义标识符(escaped identifier )可以在一条标识符中包含任何可打印字符。转义标识符以\ (反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。下面例举了几个转义标识符:

\7400

\.*.$

\{******}

\~Q

\OutGate 与OutGate相同。

最后这个例子解释了在一条转义标识符中,反斜线和结束空格并不是转义标识符的一部分。也就是说,标识符\OutGate 和标识符OutGate恒等。

V erilog HDL定义了一系列保留字,叫做关键词,它仅用于某些上下文中。附录A列出了语言中的所有保留字。注意只有小写的关键词才是保留字。例如,标识符always(这是个关键词)与标识符ALW AYS(非关键词)是不同的。

另外,转义标识符与关键词并不完全相同。标识符\initial 与标识符initial(这是个关键词)不同。注意这一约定与那些转义标识符不同。

3.2 注释

在V erilog HDL中有两种形式的注释。

/*第一种形式:可以扩展至

多行*/

//第二种形式:在本行结束。

3.3 格式

V erilog HDL区分大小写。也就是说大小写不同的标识符是不同的。此外,V erilog HDL 是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。下面通过实例解释说明。

initial begin Top = 3' b001; #2 Top = 3' b011; end

和下面的指令一样:

initial

begin

Top = 3' b001;

#2 Top = 3' b011;

end

3.4 系统任务和函数

以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制可在设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在0时刻执行,即不允许延迟,而任务可以带有延迟。

$display ("Hi, you have reached L T today");

/* $display 系统任务在新的一行中显示。*/

$time

//该系统任务返回当前的模拟时间。

系统任务和系统函数在第10章中详细讲解。

3.5 编译指令

以`(反引号)开始的某些标识符是编译器指令。在V erilog 语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如下:

* `define, `undef

* `ifdef, `else, `endif

* `default_nettype

* `include

* `resetall

* `timescale

* `unconnected_drive, `nounconnected_drive

* `celldefine, `endcelldefine

3.5.1 `define 和`undef

`define指令用于文本替换,它很像C语言中的#define 指令,如:

`define MAX_BUS_SIZE 32

. . .

reg [ `MAX_BUS_SIZE - 1:0 ] AddReg;

一旦`define 指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的`define 指令,MAX_BUS_SIZE 能被多个文件使用。

`undef 指令取消前面定义的宏。例如:

`define WORD 16 //建立一个文本宏替代。

. . .

wire [ `WORD : 1] Bus;

. . .

`undef WORD

// 在`undef编译指令后, WORD的宏定义不再有效.

3.5.2 `ifdef、`else 和`endif

这些编译指令用于条件编译,如下所示:

`ifdef WINDOWS

parameter WORD_SIZE = 16

`else

parameter WORD_SIZE = 32

`endif

在编译过程中,如果已定义了名字为WINDOWS的文本宏,就选择第一种参数声明,否则选择第二种参数说明。

`else 程序指令对于`ifdef 指令是可选的。

3.5.3 `default_nettype

该指令用于为隐式线网指定线网类型。也就是将那些没有被说明的连线定义线网类型。

`default_nettype wand

该实例定义的缺省的线网为线与类型。因此,如果在此指令后面的任何模块中没有说明的连线,那么该线网被假定为线与类型。

3.5.4 `include

`include 编译器指令用于嵌入内嵌文件的内容。文件既可以用相对路径名定义,也可以用全路径名定义, 例如:

`include " . . / . . /primitives.v"

编译时,这一行由文件“../../primitives.v” 的内容替代。

3.5.5 `resetall

该编译器指令将所有的编译指令重新设置为缺省值。

`resetall

例如,该指令使得缺省连线类型为线网类型。

3.5.6 `timescale

在V erilog HDL 模型中,所有时延都用单位时间表述。使用`timescale编译器指令将时间单位与实际时间相关联。该指令用于定义时延的单位和时延精度。`timescale编译器指令格式为:

`timescale time_unit / time_precision

time_unit 和time_precision 由值1、10、和100以及单位s、ms、us、ns、ps和fs组成。例如:

`timescale 1ns/100ps

表示时延单位为1ns, 时延精度为100ps。`timescale 编译器指令在模块说明外部出现, 并且影响后面所有的时延值。例如:

`timescale 1ns/ 100ps

module AndFunc (Z, A, B);

output Z;

input A, B;

and # (5.22, 6.17 ) Al (Z, A, B);

//规定了上升及下降时延值。

endmodule

编译器指令定义时延以ns为单位,并且时延精度为1/10 ns(100 ps)。因此,时延值5.22对应5.2 ns, 时延6.17对应6.2 ns。如果用如下的`timescale程序指令代替上例中的编译器指令,

`timescale 10ns/1ns

那么5.22对应52ns, 6.17对应62ns。

在编译过程中,`timescale指令影响这一编译器指令后面所有模块中的时延值,直至遇到另一个`timescale指令或`resetall指令。当一个设计中的多个模块带有自身的`timescale编译指令时将发生什么?在这种情况下,模拟器总是定位在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度。例如,

`timescale 1ns/ 100ps

module AndFunc (Z, A, B);

output Z;

input A, B;

and # (5.22, 6.17 ) Al (Z, A, B);

endmodule

`timescale 10ns/ 1ns

module TB;

reg PutA, PutB;

wire GetO;

initial

begin

PutA = 0;

PutB = 0;

#5.21 PutB = 1;

#10.4 PutA = 1;

#15 PutB = 0;

end

AndFunc AF1(GetO, PutA, PutB);

endmodule

在这个例子中,每个模块都有自身的`timescale编译器指令。`timescale编译器指令第一

次应用于时延。因此,在第一个模块中,5.22对应5.2 ns, 6.17对应6.2 ns; 在第二个模块中5.21对应52 ns, 10.4对应104 ns, 15对应150 ns。如果仿真模块TB,设计中的所有模块最小时间精度为100 ps。因此,所有延迟(特别是模块TB中的延迟)将换算成精度为100 ps。延迟52 ns现在对应520*100 ps,104对应1040*100 ps,150对应1500*100 ps。更重要的是,仿真使用100 ps为时间精度。如果仿真模块AndFunc,由于模块TB不是模块AddFunc的子模块,模块TB中的`timescale程序指令将不再有效。

3.5.7 `unconnected_drive和`nounconnected_drive

在模块实例化中,出现在这两个编译器指令间的任何未连接的输入端口或者为正偏电路状态或者为反偏电路状态。

`unconnected_drive pull1

. . .

/*在这两个程序指令间的所有未连接的输入端口为正偏电路状态(连接到高电平)*/

`nounconnected_drive

`unconnected_drive pull0

. . .

/*在这两个程序指令间的所有未连接的输入端口为反偏电路状态(连接到低电平)*/

`nounconnected_drive

3.5.8 `celldefine 和`endcelldefine

这两个程序指令用于将模块标记为单元模块。它们表示包含模块定义,如下例所示。

`celldefine

module FD1S3AX (D, CK, Z) ;

. . .

endmodule

`endcelldefine

某些PLI例程使用单元模块。

3.6 值集合

V erilog HDL有下列四种基本的值:

1) 0:逻辑0或“假”

2) 1:逻辑1或“真”

3) x:未知

4) z:高阻

注意这四种值的解释都内置于语言中。如一个为z的值总是意味着高阻抗,一个为0的值通常是指逻辑0。

在门的输入或一个表达式中的为“z”的值通常解释成“x”。此外,x值和z值都是不分大小写

的,也就是说,值0x1z与值0X1Z相同。V erilog HDL中的常量是由以上这四类基本值组成的。

V erilog HDL中有三类常量:

1) 整型

2) 实数型

3) 字符串型

下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有意义。它们能用来提高易读性;唯一的限制是下划线符号不能用作为首字符。

3.6.1 整型数

整型数可以按如下两种方式书写:

1) 简单的十进制数格式

2) 基数格式

1. 简单的十进制格式

这种形式的整数定义为带有一个可选的“+”(一元)或“-”(一元)操作符的数字序列。下面是这种简易十进制形式整数的例子。

32 十进制数32

-15 十进制数-15

这种形式的整数值代表一个有符号的数。负数可使用两种补码形式表示。因此32在5位的二进制形式中为10000,在6位二进制形式中为110001;-15在5位二进制形式中为10001,在6位二进制形式中为110001。

2. 基数表示法

这种形式的整数格式为:

[size ] 'base value

size 定义以位计的常量的位长;base为o或O(表示八进制),b或B(表示二进制),d或D(表示十进制),h或H(表示十六进制)之一;value是基于base的值的数字序列。值x 和z以及十六进制中的a到f不区分大小写。

下面是一些具体实例:

5'O37 5位八进制数

4'D2 4位十进制数

4'B1x_01 4位二进制数

7'Hx 7位x(扩展的x), 即xxxxxxx

4'hZ 4位z(扩展的z) , 即zzzz

4'd-4 非法:数值不能为负

8'h 2 A在位长和字符之间,以及基数和数值之间允许出现空格

3'b001 非法: ` 和基数b之间不允许出现空格

(2+3)'b10 非法:位长不能够为表达式

注意,x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)。

基数格式计数形式的数通常为无符号数。这种形式的整型数的长度定义是可选的。如果

没有定义一个整数型的长度,数的长度为相应值中定义的位数。下面是两个例子:

'o721 9位八进制数

'hAF 8位十六进制数

如果定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位为x 或z,就相应地用x或z在左边补位。例如:

10'b10 左边添0占位, 0000000010

10'bx0x1 左边添x占位,xxxxxxx0x1

如果长度定义得更小,那么最左边的位相应地被截断。例如:

3'b1001_0011与3'b011 相等

5'H0FFF 与5'H1F 相等

?字符在数中可以代替值z在值z被解释为不分大小写的情况下提高可读性(参见第8章)。

3.6.2 实数

实数可以用下列两种形式定义:

1) 十进制计数法;例如

2.0

5.678

11572.12

0.1

2. //非法:小数点两侧必须有1位数字

2) 科学计数法;这种形式的实数举例如下:

23_5.1e2 其值为23510.0; 忽略下划线

3.6E2 360.0 (e与E相同)

5E-4 0.0005

V erilog语言定义了实数如何隐式地转换为整数。实数通过四舍五入被转换为最相近的整数。

42.446,42.45 转换为整数42

92.5, 92.699 转换为整数93

-15.62 转换为整数-16

-26.22 转换为整数-26

3.6.3 字符串

字符串是双引号内的字符序列。字符串不能分成多行书写。例如:

"INTERNAL ERROR"

"REACHED->HERE"

用8位ASCII值表示的字符可看作是无符号整数。因此字符串是8位ASCII值的序列。为存储字符串“INTERNAL ERROR”,变量需要8*14位。

reg [1 : 8*14] Message;

. . .

Message = "INTERNAL ERROR"

反斜线(\ ) 用于对确定的特殊字符转义。

\n 换行符

\t 制表符

\\ 字符\本身

\" 字符"

\206 八进制数206对应的字符

3.7 数据类型

V erilog HDL 有两大类数据类型。

1) 线网类型。net type 表示V erilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。

2) 寄存器类型。register type表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有x 的缺省值。

3.7.1 线网类型

线网数据类型包含下述不同种类的线网子类型。

* wire

* tri

* wor

* trior

* wand

* triand

* trireg

* tri1

* tri0

* supply0

* supply1

简单的线网类型说明语法为:

net_kind [msb:lsb] net1, net2, . . . , netN;

net_kind 是上述线网类型的一种。msb和lsb 是用于定义线网范围的常量表达式;范围定义是可选的;如果没有定义范围,缺省的线网类型为1位。下面是线网类型说明实例。

maxplus2简明教程一

第一章 MAX+plus II开发软件A1tera公司的MAX十plus II开发系统是一个完全集成化、易学易用的可编程逻辑设 计环境,它可以在多种平台上运行。MAX十plus是Multiple array matrix and programmable logic user system的缩写,目前已发行到了第10.1版本。它所提供的灵活性和高效性是无可比拟的,其丰富的图形界面,辅之以完整的、可即时访问的在线文档,使设计人员能够轻松、愉快地掌握和使用Max十plus II软件。 1.1MAX+plus II功能特点 1、开放的界面 Altera的工作与EDA厂家紧密结合,使MAX+plus II软件可与其它工业标准的设计输入、综合与校验工具相连接。设计人员可以使用A1tera或标准EDA设计输入工具来建立逻辑设计,使用MAX十plus II编译器(Compiler)对A1tera器件设计进行编译,并使用A1tera 或其它EDA校验工具进行器件或板级仿真。目前,Max十plus II支持与Cadence、Exemplarlogic、MentorGraphics、Synopsys、Synplicity、Viewlogic和其它公司所提供的EDA 工具的接口。 2、与结构无关 MAX十plus II系统的核心Compiler支持Altera公司的ACEX1K、FLEXl0K、FLEX 8000、FLEX 6000、Max 9000、Max 7000、Max 5000和C1assic可编程逻辑器件系列,提供了业界唯一真正与结构无关的可编程逻辑设计环境。MAX十plus II的编译器还提供了强大的逻辑综合与优化功能,使用户比较容易地将其设计集成到器件中。 3、多平台 Max十plus II软件可在基于486、奔腾PC机的Windows NT 3.51或4.0、Windows 95、Windows 98、Windows2000下运行,也可在Sun SPAC Stations,HP 9000Series 700/800和IBM RISC System/6000工作站上运行。 4、完全集成化 MAX十plus II的设计输入、编译与仿真功能全部集成在统一的开发环境下,这样可以加快动态调试,缩短开发周期。 5、丰富的设计库 MAX十plus II提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑宏功能(Macro-Function)以及新型的参数化的宏功能(Mage-Mnction)。调用库单元进行设计,可以大大减轻设计人员的工作量,也可成倍地缩短设计周期。 6、模块化工具 设计人员可以从各种设计输入、编译和仿真选项中进行选择,从而使设计环境用户化,必要时,还可根据需要添加新功能。由于MAX十plus II支持各种器件系列,设计人员不必学习新工具即可支持新结构。 7、硬件描述语言(HDL) Max + plus II软件支持各种HDL设计输入选项,包括VHDL、Verilog HDL和Altera 自己的硬件描述语言AHDL。 8、Megacore功能 Megacore功能是为复杂的系统级功能提供的,经过校验的HDL网表文件,它能使ACEX1K、FLEX10K、FLEX 8000、FLEX 6000、MAX 9000和MAX 7000器件系列实现

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

VerilogHDL实例

本文档含有很多Verilog HDL例子://与门 module zxhand2(c,a,b); input a,b; output c; assign c= a & b; endmodule //或门 module zxhor2(c,a,b); input a,b; output c; assign c= a | b; endmodule //非门 module zxhnot2(c,b); input b; output c; assign c=~ b; endmodule ////异或门 module zxhxro2(c,a,b); input b; output c; assign c=a ^ b; endmodule 两选一电路 module data_scan(d0,d1,sel,q); output q; input d0,d1,sel; wire t1,t2,t3; n1 zxhand2(t1,d0,sel); n2 zxhnot2 (t4,sel); n3 zxhand2(t2,d1,t4); n4 zxhor2(t3,t1,t2);

assign q=t1; endmodule verilog HDL实例(一) 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意 equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale 1ns/1ns //定义时间单位。 module comparetest; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 Endmodule

Verilog-hdl—简易电子琴设计

湖北文理学院 简易电子琴设计 专业:自动化 学号:64 姓名:一天虹影 实验目的 使用VerilogHDL语言进行前端设计,并使用Quaruts软件在

GW48-PK2实验上实现仿真,实现硬件电子琴。电子琴要求有8个音阶,使用外部时钟信号3MHz,能同步显示音阶。 设计要求 1、设计一个简易电子琴。要求能演奏的音域为D调的do到E调do。 2、用GW48-PK2中的8个按键作为琴键。 3、 GW48-PK2中有蜂鸣器。 4、可以使用GW48-PK2上的12MHz作为输入时钟信号 设计思路 通过可编程逻辑器件(PLD)和VHDL硬件描述语言来实现电子琴的基本要求。设计的主体是数控分频器,对输入的频率按照与每个音阶对应的分频系数进行分频,得到各个音阶对应的频率分别在蜂鸣器和数码管上以声音和频率数值的形式作为输出。 设计组成与原理 下图为系统的工作原理框图。

模块设计 1. 音名与频率的关系 音乐的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音。灵位,音符A (简谱中的低音6)的频率为440HZ ,音符B 到C 之间、E到F之间为半音,其余为全音。由此可以计算出简谱中所有的音符的频率,在这我们只需计算出中音1到高音1的频率即可。如下所示: 表一 简谱音名与频率的对应关系 由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由 分频置 数 按 键 分 频 器 12MHZ 蜂 鸣 器 数码管显示

于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素,在尽量减少频率误差的前提下取合适的时钟频率。本实验要求用12MHZ的时钟脉冲信号,所以不必考虑这方面的因素。实际上,只要各个音符间的相对频率关系不变,弹奏出来的音调听起来是不会走调的。 2.分频系数与初始值(预置数) 本例设计的音乐电子琴选取12MHZ的系统时钟频率。在数控分频器模块中,由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好地驱动扬声器发生,减少输出的偶次谐波分量,在到达扬声器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频,频率变为原来的二分之一,即6MHZ。 因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为,它的分频系数应该为: Divider=6MHz/=6*106 /=11466 至于其他音符,同样由上式求出对应的分频系数,这样利用程序可以轻松地得到相应的乐声。各音名对应的分频系数如下表:表二各音名对应的分频系数

用veriloghdl设计计数器

用Verilog HDL设计计数器 一、实验目的 1. 学习使用Verilog HDL语言,并学会使用进行QuartusⅡ软件编 程和仿真; 2. 掌握数字电路的设计方法,熟悉设计过程及其步骤; 3. 培养学生的动手能力,能学以致用,为今后从事电子线路设计 打下良好基础; 4. 巩固加深对数电知识的理解,在仿真调试过程中,能结合原理 来分析实验现象; 二、实验内容 1.设计内容及要求 1)利用Verilog HDL设计一个以自己学号后三位为模的计数器; 2)编写源程序; 3)给出仿真电路图和仿真波形图; 2.需求分析: 由于本人的学号后3位为212,所以应编一个以212为模的加法计数器。若采用同步清零的方法,则计数为0~211,化为二进制数即为0 0000 0000计到0 1101 0011。 3.编写源代码: module count_212(out,data,load,reset,clk);

output [8:0] out; input [8:0] data; input load,reset,clk; reg [8:0] out; always @(posedge clk) + A[8..0] B[8..0] ADDER < CIN A[8..0] B[8..0] LESS_THAN 1 D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 Les s Than0 9' h0D3 -- out[0]~reg0 out[1]~reg0 out[2]~reg0 out[3]~reg0 out[4]~reg0 out[5]~reg0 out[7]~reg0out[8]~reg0 out~[8..0] 9' h000 -- res et clk out[8..0] data[8..0] out~[26..18] 9' h000 -- out~[17..9] load out[6]~reg0A dd0 9' h001 --

Quartus_II简明教程

Quartus II简明教程 Altera公司的Quartus II设计软件是用来进行SOPC(System-on-a-programmable-chip)设计的综合的设计环境。本教程适用于Quartus II软件的新用户,介绍使用Quartus II软件的进行FPGA设计的基本方法。需要注意,本教程并不是Quartus II软件的详尽的参考手册。 本教程包含的主要内容: 1、典型的FPGA设计流程; 2、开始 3、新建project 4、设计输入 5、编译 6、引脚分配 7、仿真 8、编程、配置FPGA器件 9、板级调试

1、 典型的FPGA 设计流程 计算机辅助设计(Computer Aided Design ,CAD )软件的使用使得使用可编程逻辑器件(Programmable Logic Device ,PLD)器件(比如Field Programmable Gate Array ,FPGA)进行数字逻辑电路设计变得非常容易。使用CAD 软件进行FPGA 设计的典型流程如图1所示。 图1 FPGA 设计的典型设计流程 Quartus II 软件支持以上设计流程的所有阶段。本教程介绍Quartus II 软件的基本特征。 2、 开始 在Quartus II 软件中设计的每个电路或者子电路都叫做项目(Project )。Quartus II 软件每次只能打开一个Project ,并且一个Project 的所有信息都必须保存在同一个文件夹。为了开始一个新逻辑电路的设计,首先第一步就是新建一个文件夹来保存此Project 的文件。为了保存本教程的设计项目Project ,新建文件夹D:\introtutorial 。本教程运行的例子是一个简单两路开关控制电路。 启动Quartus II 软件,会打开如图2所示启动画面。启动画面中包含了使用Quartus II 软件所需要的

eda拔河游戏机课程设计报告

报告书写要求 1、报告的撰写要求条理清晰、语言准确、表述简明。报告中段首空两个字符,中文字体为 宋体五号,数字、字符、字母为Times New Roman五号,且单倍行距。 2、报告中插图应与文字紧密配合,文图相符,技术内容正确。每个图都应配有图题(由图 号和图名组成)。图题(宋体小五号)置于图下居中,其中图号按顺序编排,图名在图号之后空一格排写。图中若有分图时,分图号用(a)、(b)等置于分图之下。注:框图、流程图(矢量图)用专业画图软件。 3、报告中插表应与文字紧密配合,文表相符,技术内容正确。表格不加左、右边线,上、 下线需加粗(1.5磅),每个表应配有表题(由表号和表名组成)。表题(宋体小五号)置于表上居中,其中表号按顺序编排,表名在表号之后空一格排写。 4、报告中公式原则上居中书写。注:公式编辑器编写。 5、设计报告应按如下内容和顺序A4纸打印、左侧装订成册。

一、设计目的 1.掌握数字系统的设计方法; 2.掌握硬件描述语言——Verilog HDL; 3.掌握模块化设计方法; 4.掌握开发软件的使用方法。 二、设计要求 (1)设计拔河游戏电路,用按键与LED表示输入与输出。 (2)初始时,16个LED中间的两个点亮,然后游戏双方不停按动按键,点亮的两个LED 向按动按键慢的一方移动; (3)每按动一下按键,LED向对方移动一格; (4)只要LED移动到头,游戏结束; (5)由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则,输入信号无效。 用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。 (6)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、时序仿真、下载验证等。 (7)三、设计环境 计算机、QuatusII开发软件 四、设计内容(设计原理和方案、程序设计、仿真分析和适配) 4.1设计原理和方案 电子拔河游戏机是一种能容纳甲乙双方参赛或甲乙双方加裁判的三人游戏电路。由一排16个LED发光二极管表示拔河的“电子绳”。由甲乙双方通过按钮开关使发光的LED管向自己一方的终点延伸,当延伸到某方的最后一LED管时,则该方失败,对方获胜,并对获胜次数进行计数,连续比赛多局以定胜负。比赛开始,由裁判下达比赛命令后,甲乙双方才能输入信号,否则,输入信号无效。裁判信号由键盘空格键来控制。“电子绳”由16个LED管构成,裁判下达“开始比赛”的命令后,摁一下空格键,位于“电子绳”中点的LED发亮。甲乙双方通过按键输入信号,使发亮的LED管向自己一方移动,并阻止其向对方延伸,谁摁得快就向这一方移动。当从中点至自己一方的最后一个LED管发亮时,表示比赛结束,这时,电路自锁,保持当前状态不变,除非由裁判使电路复位,并对获胜的一方计数器自动加一。记分电路用两位七段数码管分别对双方得分进行累计,在每次比赛结束时电路自动加分。当比赛结束时,计分器清零,为下一次比赛做好准备。

常用VerilogHDL 语法总结

常用VerilogHDL 语法总结 1 模块 (1)端口定义:声明模块的输入输出口。引用模块时端口的两种连接方法。 (2)模块内容:I/O说明(输入输出)、内部信号说明(和端口有关的变量说明)、功能定义(定义逻辑功能的三种方式:assign 声明语句;实例元件;always 块)。 (3)理解要点:整体语句并发执行,always块内顺序执行。 2 常量 (1)数字:整数及三种表达方式 x和z值 负数:减号的位置 下划线:位置和作用 (2)参数:parameter符号常量,常用于定义延迟时间(使用#)和变量宽度。 3 变量 (1)wire:表示易assign指定的组合逻辑信号;默认值;任何方程式的输入或assign语句及实例元件的输出;定义格式。(2)reg:表示always块中指定的信号,代表触发器;寄存器数据类型(触发器存储值),默认值为x;定义格式。 (3)memory:reg的数组;描述RAM、ROM、reg文件;单元索引;一个n为寄存器和n个一位数组的区别。 4 运算符与表达式 (1)算术运算符:五种 (2)位运算符:五种 (3)逻辑运算符:三种 (4)关系运算符:四种(3种不同的返回值) (5)等式运算符:四种 (6)移位运算符:两种(移位补零) (7)位拼接运算符:{},常用于某些控制信号位;重复与嵌套使用 (8)缩减运算符:类似于逻辑运算符,结果为一位二进制数(9)运算符优先级 5 语句 (1)赋值语句 阻塞赋值:b<=a;块结束后完成赋值,b的值不是立即改 变的,较为常用; 非阻塞赋值:b=a;赋值语 句执行后块才结束,b的值马上 改变,在沿触发的always块中 使用可能引起错误后果。 (2)块语句 顺序块begin-end:顺序执 行,最后语句执行完流程跳出语 句块; 并行块fork-join:同时执 行,时间最长语句执行完或 disable语句执行时跳出程序 块; 块名的作用; 起始时间和结束时间 (3)条件语句 If-else语句:三种形式; if表达式判断;分号;复合语句; 表达式简写;if语句嵌套;if 与else的配对。 Case语句:三种形式 (casez:不考虑z进行比较, casex:不考虑z和x进行比较); 控制表达式与分支表达式(常量 表达式);default;所有表达式 的位宽必须相等。 条件语句使用不当造成锁 存器:避免错误:case中使用 default,if必须搭配else。 (4)循环语句 Forever:格式;连续执行; Repeat:格式;连续执行n 次;表达式通常为常量表达式; While:格式;执行语句至 条件不满足; For:格式:for(循环变量 初值;循环结束条件;循环变量 增值)。 (5)结构说明语句 Initial:格式;执行一次; 常用来变量初始化和生成激励 波形作为电路的测试仿真信号; Always:格式;执行至仿真 结束;注意时序;常用来描述时 钟信号作为激励信号;时间控制 可以为沿触发(描述时序行为) 也可以是电平触发(描述组合逻 辑行为); Task:定义;任务的调用与 变量的传递;任务调用变量与任 务定义的I/O变量必须一一对 应; Function:定义;函数返回 值(函数定义蕴含定义了同名寄 存器);函数调用通过函数表达 式中的操作数来实现的。 (6)时间控制语句 #、@、wait标识的语句 6 系统函数和任务 (1)$display和$write:输出 信息;格式说明和普通字符; (2)$monitor:监控和输出参 数列表中的表达式和变量值;关 闭与打开控制; (3)$time:返回64位整数表 示当前仿真时刻值;时间尺度; $realtime:返回时间为实 型数; (4)$finish:退出仿真器,返 回主操作系统;参数; (5)$stop:把EDA工具设置为 暂停,给出交互命令提示,把控 制权交给用户; (6)$readmemb 和$readmemh: 从文件读取数据到存储器;格 式;读取内容; (7)$random:返回32位带符 号整型随机数;用于产生随即脉 冲序列和宽度随机的脉冲序列 进行电路测试。 7 编译预处理 (1)`define:宏定义,符号常 量; (2)`include:文件包含;使 用形式; (3)`timescale:时间尺度, 说明跟在该命令后的模块的时 间单位和时间精度; (4)`ifdef、`else、`endif: 满足条件的语句进行编译;不编 译的部分也应符VerilongHDL语 言规范。

Verilog语言基础教程

Verilog HDL Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象 设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 =============================== 中文版Verilog HDL简明教程:第1章简介 Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 历史 Verilog HDL语言最初是于1983年由Gateway Design Automation公司为其模

QuartusII简明教程(完整版)

目录 : Quartus II 的使用 (1) 1 工程建立 (1) 2 原理图的输入 (4) 3 文本编辑(verilog) (14) 4 波形仿真 (16)

Quartus II 的使用 在这里,首先用最简单的实例向读者展示使用Quartus II软件的全过程。进入WINDOWS XP后,双击Quartus II图标,屏幕如图1.1所示。 图 1.1 Quartus II 管理器 1.1 工程建立 使用New Project Wizard,可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称。还可以指定要在工程中使用的设计文件、其它源文件、用户库和EDA 工具,以及目标器件系列和器件(也可以让Quartus II 软件自动选择器件)。 建立工程的步骤如下:

(1)选择File菜单下New Project Wizard ,如图1.2所示。 图 1.2 建立项目的屏幕 (2)输入工作目录和项目名称,如图1.3所示。可以直接选择Finish,以下的设置过程可以在设计过程中完成。 图 1.3 项目目录和名称

(3)加入已有的设计文件到项目,可以直接选择Next,设计文件可以在设计过程中加入,如图1.4所示。 图 1.4 加入设计文件 (4)选择设计器件,如图1.5所示。 图 1.5 选择器件

(5)选择第三方EDA综合、仿真和时序分析工具,如图1.6所示。 图 1.6 选择EDA 工具 (6)建立项目完成,显示项目概要,如图1.7所示。 图 1.7 项目概要 1.2 原理图的输入 原理图输入的操作步骤如下:

(1)选择File 菜单下New ,新建图表/原理图文件,如图1.8 所示。 图 1.8 新建原理图文件 (2)在图1.9的空白处双击,屏幕如图1.10所示: (3)在图1.10的Symbol Name 输入编辑框中键入dff后,单击ok按钮。此时可看到光标上粘着被选的符号,将其移到合适的位置(参考图 1.11)单击鼠标左键,使其固定;(4)重复(2)、(3)步骤,给图中放一个input、not、output 符号,如图1.11所示;在图1.11中,将光标移到右侧input 右侧待连线处单击鼠标左键后,再移动到D触发器的左侧单击鼠标左键,即可看到在input和D触发器之间有一条线生成;

Verilog+HDL简明教程(中文版)

中文版)) 简明教程((中文版 Verilog HDL简明教程 Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 历史

VerilogHDL试卷及答案

一、选择题: 1、下列标示符哪些是合法的(B ) A、$time B、_date C、8sum D、mux# 2、如果线网类型变量说明后未赋值,起缺省值是(D ) A、x B、1 C、0 D、z 3、现网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是(A )//补 码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! A、4’b1101 B、4’b0011 C、4’bxx11 D、4’bzz11 4、reg[7:0] mema[255:0]正确的赋值是(A ) A、mema[5]=3’ d0, B、8’ d0; C、1’ b1; D、mema[5][3:0]=4’ d1 5、在code模块中参数定义如下,请问top模块中d1模块delay1、delay2的值是( D ) module code(x,y); module top; paramee delay1=1,delay2=1; ……………. ………………………………code #(1,5) d1(x1,y1); endmodule endmodule A、(1,1) B、(5,5) C、(5,1) D、(1,5) 6、“a=4’ b11001,b=4’ bx110”选出正确的运算结果(B ) A、a&b=0 B、a&&b=1 C、b&a=x D、b&&a=x 7、时间尺度定义为timescale 10ns/100ps,选择正确答案(C ) A、时间精度10ns B、时间单位100ps C、时间精度100ps D、时间精度不确定 8、若a=9,执行$display(“current value=%0b,a=%0d”,a,a)正确显示为(B )//去除无效0 A、current value=1001,a=09 B、current vale=1001,a=9 C、1001,9 D、current vale=00…001001,a=9 9、always begin #5 clk=0;#10 clk=~clk;end产生的波形(A )//5占15的1/3 A、占空比1/3 B、clk=1 C、clk=0 D、周期为10 10、在Verilog中定义了宏名`define sum a+b+c 下面宏名引用正确的是(C ) //注意引用 A、out=’sum+d; B、out=sum+d; C、out=`sum+d; D、都正确 二、填空题:(共15分,每小题3分) 1、某一纯组合电路输入为in1,in2和in3,输入出为out,则该电路描述中always的事件表达式应写为 always@(in1,in2,in3 );若某一时序电路由时钟clk信号上升沿触发,同步高电平复位信号rst清零,该电路描述中always的事件表达是应该写为always @( posedge clk )。 //@(条件表达式) do_something; 表示等待条件表达式满足,然后do_something,然后就往下走了。通常用在testbench中,不可综合。 ------------------------------------ always @(a or b or c) begin do_something; end 表示不停地监测a、b、c,一旦它们任何一个发生变化,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时组合逻辑电路。

#####超简明Quartusii教程cpld篇

超简明QuartusII教程 (CPLD篇) 黄俊 2007-9-29 https://www.doczj.com/doc/77157996.html,/index.php/2599 huangjun5927@https://www.doczj.com/doc/77157996.html,

在很多设计中,CPLD仅作为电路中的辅助元件,坦白地说,对大多数硬件开发工程师来说,CPLD部分的设计并不是他们主要的工作,并不想花太多时间去学习。QuartusII功能强大,但很多工具并不需要在CPLD设计中使用。 QuartusII使用极其方便,可简可繁,本文力争让读者在两小时内就掌握基本的使用方法。本文同样适用于FPGA设计的一部分,FPGA设计中涉及更深一些的时序分析、时序约束、逻辑分区,逻辑锁定,逻辑分析仪,功耗分析等等功能,所需工具较多,请参看其它教程。本文图片配合文字和箭头为主要讲解方式,所以需多用一下放大功能,在200%左右看插图时,可以清晰看到文字。 引子 CPLD基本设计流程如下: z工程管理——新建工程、工程管理; z源文件输入——VHDL/Verilog程序或原理图的设计,Altera内嵌模块的调用(对CPLD而言,只有MAXII还有内嵌模块可调); z综合、编译——检查语法、连接错误,生成综合后网表; z功能仿真——综合后的功能仿真(可选); z简单的约束——管脚分配、I/O特性约束(电平标准,驱动能力等)、简单的时序约束; z全编译——软件自动完成布局布线、生成最终编程文件; z时序仿真——带延时的和实际情况非常相近的时序仿真(推荐使用); z编程——下载到硬件中。

实战 1、工程管理 a)新建工程 i.输入工程名, ii.选源文件 iii.选器件 iv.设置第三方工具 具体方法见下图。 在此有一个重要的设置需了解,即未用I/O的状态。

数字系统设计与verilogHDL课程设计

数字系统设计与v e r i l o g H D L课程设计设计题目:实用多功能数字钟 专业:电子信息科学与技术 班级:0313410 学号: 姓名:杨存智 指导老师:黄双林 摘要 本课程设计利用QuartusII软件VerilogVHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。 单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。 关键字:多功能数字钟、Verilog、模块、调试、仿真、功能 目录

课程设计的目的 通过课程设计的锻炼,要求学生掌握Verilog HDL语言的一般设计方法,掌握Verilog HDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。 掌握现代数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 课程设计的任务与要求 用Verilog HDL语言设计一个多功能的数字钟,具有下述功能: (1)计时功能。包括时、分、秒的计时; (2)定时与闹钟功能:能在设定的时间发出闹铃音; (3)校时功能。对时、分和秒能手动调整以校准时间; (4)整点报时功能;每逢整点,产生“嘀嘀嘀嘀一嘟”四短一长的报时音。 2.课程设计思路及其原理 数字计时器要实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能,所有功能都基于计时功能。因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为50MHZ,通过分频获得所需脉冲频率1Hz。得到1hz脉冲后,要产生计时模块,必须需要加法器来进行加法,因此需要一个全加器,此实验中设计一个八位全加器来满足要求。 数字电路设计中,皆采用二进制加法,为实现实验中时分秒的最大功能,本实验中采用十六进制加法器,再进行BCD码进行转换来实现正常时钟显示。为产生秒位,设计一个模60计数器,利用加法器对1HZ 的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。基本的计时模块完成之后,整点报时、清零、校时、LED显示、闹铃模块可以相互实现,其中,闹铃模块与计时模块的显示相互并行。 清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。 保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。

VerilogHDL复习题与答案

VerilogHDL硬件描述语言复习 一、 1. Verilog HDL 是在哪一年首次被I E E E标准化的? 答:Verilog HDL是在1995年首次被IEEE标准化的。 2. Verilog HDL支持哪三种基本描述方式? 答:Verilog HDL可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结 构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模 3. Verilog HDL 是由哪个公司最先开发的? 答:Verilog HDL是由Gateway Design Automation公司最先开发的 4. Verilog HDL中的两类主要数据类型什么? 答:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 5. U D P代表什么? 答:UDP代表用户定义原语 6. 写出两个开关级基本门的名称。 答:pmos nmos 7.写出两个基本逻辑门的名称。 答:and or 8.在数据流描述方式中使用什么语句描述一个设计? 答:设计的数据流行为使用连续赋值语句进行描述 9. 采用结构描述方式描述1位全加器。 答: module full_add(a,b,cin,s,co); input a,b,cin; output s,co; wire S1,T1,T2,T3; xor X1(S1,a,b), X2(s,S1,cin); and A1(T3,a,b), A2(T2,b,cin), A3(T1,a,cin); or O1(co,T1,T2,T3); endmodule 10. i n i t i a l语句与always 语句的关键区别是什么? 答: 1) initial语句:此语句只执行一次。 2) always语句:此语句总是循环执行, 或者说此语句重复执行。 11.采用数据流方式描述2 - 4译码器。 答: 'timescale 1ns/ns module Decoder2×4(A,B,EN,Z); input A,B,EN; output [0:3]Z;

eda课程设计vhdl语言的简易出租车计费器设计

唐山学院 《EDA技术》课程设计 题目简易出租车计费器设计 系 (部) 信息工程系 班级 12电本班 姓名 学号 4120208XXX 指导教师郭耀华周剑利吕宏丽 2015 年 7 月 6 日至 7 月 12 日共 1 周2015年 7 月 8 日

课程设计成绩评定表 出勤情况出勤天数缺勤天数 成绩评定出勤情况及设计过程表现(20分) 课设答辩(20分) 设计成果(60分) 硬件调试设计说明书总成绩(100分) 提问 (答辩) 问题 情况 综 合 评 定指导教师签名: 年月日

目录 1 引言 (1) 2 计费器的设计 (2) 2.1 设计内容 (2) 2.2设计要求 (2) 2.3 设计原理 (2) 2.4 各模块的设计 (3) 2.4.1 分频模块 (3) 2.4.2 计程模块 (4) 2.4.3 计费模块 (4) 2.4.4 顶层模块 (5) 3 仿真 (6) 4 引脚的锁定 (7) 5总结 (8) 参考文献 (9) 附录 (10)

1 引言 出租车计费器是出租车营运收费的智能化仪表,是使出租车市场规范化、标准化的重要设备。一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。在科技高度发展的今天,集成电路和计算机应用得到了高速发展。本设计就采用VHDL描述语言,设计出租车计价系统的软件结构,通过QuartusⅡ9.0软件下进行仿真,再在试验箱进行硬件仿真,实现了模拟的简易的出租车计费器。 编写程序所用的VHDL语言全名为Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE-1076(简称87版)之后,各EDA 公司相继推出自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA 公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。 对程序进行编译及仿真用到的的QuartusⅡ9.0软件是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 QuartusⅡ9.0可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片平面布局连线编辑;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;自动定位编译错误;此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

相关主题
文本预览
相关文档 最新文档