VerilogHDL数字系统设计及实践第章Verilog行为描述

合集下载

Verilog HDL数字系统设计 原理 实例及仿真 第1章

Verilog HDL数字系统设计  原理 实例及仿真 第1章

图1.2 自上而下(Top-Do: (1) 这是一种模块化的设计方法; (2) 由于高层设计同器件无关,可以完全独立于目标器件 的结构,因此在设计的最初阶段,设计人员可以不受芯片结 构的约束,集中精力对产品进行最适应市场需求的设计,从 而避免了传统设计方法中的再设计风险,缩短了产品的上市 周期; (3) 由于系统采用硬件描述语言进行设计,可以完全独立 于目标器件的结构,因此设计易于在各种集成电路工艺或可 编程器件之间移植; (4) 多个设计者可同时进行设计; (5) 具有强大的系统建模、电路仿真功能;
9
设计周期长
设计周期短
1.1.3 EDA的开发过程 基于EDA的电子设计流程如图1.3所示。
图1.3 EDA工程设计流程
1.文本编辑/原理图编辑输入与修改 2.逻辑综合和优化 3.行为仿真 4.目标器件的布线/适配 5.功能仿真和时序仿真 6.目标器件的编程/下载 7.硬件仿真与测试
1.2 可 编 程 器 件
1.1.2 EDA与传统电子设计方法的比较 随着EDA技术的不断发展,其设计方法也发生着显著的
变化,已经从传统的自下而上的设计方法转变成自上而下的 设计方法。传统的电子设计方法是自下而上(Bottom-Up)的, 如图1.1所示,是基于电路板的设计。
图1.1 传统的电子设计方法
这种设计方法以固定功能元件为基础,然后根据这些器 件进行模块逻辑设计,完成各个模块后进行连接,最后形成 系统。这种手工设计方法的缺点如下:
EDA技术使设计者的工作可以仅限于利用软件的方式, 即利用硬件描述语言和EDA软件来完成对系统硬件功能的实 现,这是电子设计技术的一个巨大进步。另一方面,在现代 高新电子产品的设计和生产中,微电子技术和现代电子设计 技术是相互促进、相互推动又相互制约的两个环节,前者代 表了硬件电路物理层在广度和深度上的发展,后者则反映了 现代先进的电子理论、电子技术、仿真技术、设计工艺和设 计技术与最新的计算机软件技术有机的融合和升华。

verilog的三种描述方式

verilog的三种描述方式

Verilog的三种描述方式Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统。

它是一种高级语言,允许工程师以更高层次的抽象来描述电路,从而简化了电路设计和验证过程。

Verilog有三种主要的描述方式,分别是结构描述、行为描述和数据流描述。

本文将详细介绍这三种描述方式,并分析它们的特点和适用场景。

1. 结构描述结构描述是Verilog的一种描述方式,它通过层次结构和模块之间的连接关系来描述电路。

在结构描述中,我们可以使用模块、端口、电路连接和实例化等概念来描述电路的组成和连接方式。

结构描述类似于画出电路图,只需要关注电路的结构和连接关系,而不需要考虑电路的具体功能。

结构描述的语法如下所示:module ModuleName (input wire A, input wire B, output wire C);// 输入端口定义// 输出端口定义// 内部信号定义// 子模块实例化// 逻辑实现endmodule结构描述的特点是清晰明了,易于理解和调试。

通过模块化的设计和层次结构,可以方便地对电路进行分析和调试。

结构描述适用于需要详细描述电路结构和连接关系的场景,比如设计一个复杂的处理器或系统。

2. 行为描述行为描述是Verilog的另一种描述方式,它通过描述电路的功能和行为来实现对电路的描述。

行为描述使用类似于编程语言的语法,可以使用条件语句、循环语句和顺序语句等来描述电路的行为。

在行为描述中,我们可以直接使用Verilog的语法来描述电路的逻辑功能,而不需要关注电路的结构和连接关系。

行为描述的语法如下所示:module ModuleName (input wire A, input wire B, output wire C);// 输入端口定义// 输出端口定义// 内部信号定义// 逻辑实现always @ (A or B) begin// 行为描述endendmodule行为描述的特点是灵活性高,可以方便地实现复杂的逻辑功能。

精品课件-Verilog HDL数字系统设计-Verilog HDL数字系统设计-第1章

精品课件-Verilog HDL数字系统设计-Verilog HDL数字系统设计-第1章

编程器件的基础上进一步发展的产物,它是作为ASIC领域中的 一种半定制电路而出现的,既解决了定制电路的不足,又克服 了原有可编程器件门电路有限的缺点。
第1章 概 述
26
如前所述,FPGA是由存放在片内的RAM来设置其工作状态的, 因此工作时需要对片内RAM进行编程。用户可根据不同的配置模 式,采用不同的编程方式。FPGA有如下几种配置模式:
第1章 概 述
1
第1章 概

1.1 EDA技术简介 1.2 可编程器件 1.3 Verilog HDL简介
第1章 概 述
2
1.1 EDA技术简介
现代电子设计技术的核心已日趋转向基于计算机的电子设 计自动化(EDA,Electronic Design Automation)技术。所谓 EDA技术,就是依赖功能强大的计算机,在EDA工具软件平台上, 对以硬件描述语言(HDL,Hardware Description Language)为 系统逻辑描述手段完成的设计文件,自动地进行逻辑编译、化 简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实 现既定的电子线路系统功能。
6.目标器件的编程/下载 7.硬件仿真与测试
第1章 概 述
18
1.2 可 编 程 器 件
1.2.1 可编程逻辑器件概述 随着数字电路的普及,传统的定制数字集成电路器件已满
足不了应用的需求,可编程逻辑器件(PLD)应运而生,并逐渐地 成为主流产品。PLD与传统定制器件的主要区别是它的可编程性, 它的逻辑功能是由用户设计的,并且一般都可重复编程和擦除, 即PLD是能够为客户提供范围广泛的多种逻辑能力、特性、速度 和电压特性的标准成品部件,而且此类器件的功能可在任何时 间修改,从而实现多种不同的功能。对于可编程逻辑器件,设 计人员可利用价格低廉的软件工具快速开发、仿真和测试其设 计。

Verilog HDL数字设计实训教程第1章 Verilog HDL数字设计实训基础

Verilog HDL数字设计实训教程第1章 Verilog HDL数字设计实训基础

图1-2 按键电路连接图和管脚对应图
1.1 实训平台
4个LED灯:
图1-3 LED电路连接图和管脚对应图
1.1 实训平台
2个数码管:
图1-4 数码管电路连接图和管脚对应图
1块液晶:
1.1 实训平台
图1-5 液晶电路连接图和管脚对应图
1个UART:
1.1 实训平台
图1-6 UART电路连接图和管脚对应图
if(p==N-1) begin p=0; clk_p=~clk_p; end else p=p+1; end always @(negedge clk) begin
if(q==N-1) q=0; else q=q+1;
if(p==(N-1)/2) clk_q=~clk_q; end assign clk_N=clk_p^clk_q; endmodule
图1-39 设置USB硬件端口
QuartusII设计流程
5.引脚锁定和硬件验证
图1-40 下载界面
QuartusII设计流程
5.引脚锁定和硬件验证
图1-41 选择下载文件
QuartusII设计流程
5.引脚锁定和硬件验证
图1-42 led灯闪烁的效果
1.3 分频器设计
分频器电路是非常有用的一种电路, 分频的方法很多,最常见的是利用加 法计数器对时钟信号进行分频。
begin if(p==N/2-1) begin p=0; clk_N=~clk_N; end else p=p+1;
end endmodule
图1-44 任意偶数分频仿真波形
1.3 分频器设计
【例1-5】 可设置参数的任意整数分频器:占空比可变。 module divf_parameter(rst,clk,en,clkout); input rst,clk,en; output clkout; integer temp; //最大值为2的32次方 parameter N=7,M=3; //N为分频系数,M/N为占空比 always @(posedge clk)

Verilog HDL数字设计教程(贺敬凯)第1章

Verilog HDL数字设计教程(贺敬凯)第1章

路网表。
第1章 Verilog HDL数字设计综述
波形图输入方法则是将待设计的电路看成是一个黑盒子,
只需告诉EDA工具该黑盒子电路的输入和输出时序波形图,
EDA工具就可以完成黑盒子电路的设计。 原理图输入方法是一种类似于传统电子设计方法的原理 图编辑输入方式,即在EDA软件的图形编辑界面上绘制能完 成特定功能的电路原理图。原理图由逻辑器件(符号)和连接
理图和信号的连接表,如果是一个大的系统,将是一大摞图
纸,以后系统若出现问题,查找、修改起来都很麻烦。
第1章 Verilog HDL数字设计综述
上述过程是从底层开始,或在已有的功能模块的基础上 来搭建高层次的模块直至整个系统的。因此这种传统的电子 系统的设计过程是一种自底向上(Bottom-Up)的设计,设计 过程必须从存在的基本单元模块出发,基本单元模块必须是 已经设计成熟的标准单元模块或其他项目已开发好的单元模 块。
第1章 Verilog HDL数字设计综述
本书所有设计最终的实现目标主要定位于FPGA,因此下
面重点介绍FPGA的开发流程。FPGA的EDA开发流程如图1-3
所示。
第1章 Verilog HDL数字设计综述
图1-3 FPGA的EDA开发流程
第1章 Verilog HDL数字设计综述
从图1-3可以看出,FPGA的开发流程与图1-2所示的用 EDA工具设计数字系统的流程基本相同,都需要设计输入、 功能仿真、逻辑综合、布局布线(适配)、时序仿真、物理实 现等几个步骤。下面将分别介绍主要设计模块的功能特点。
第1章 Verilog HDL数字设计综述
1. 设计输入 在EDA软件平台上开发FPGA/CPLD时,首先要将电路系 统以一定的表达方式输入计算机。通常,EDA工具的设计输 入可分为以下两种类型:

数字系统设计初识Verilog HDL

数字系统设计初识Verilog HDL
在Verilog HDL中可使用如下方式描述结构:
(1)内置门级元件(逻辑门)
not and nand or nor xor xnor。(表8.1、8.2)
(2)内置开关级元件(三极管及储存节点等)
cmos nmos pmos。
(3)用户自己定义的模块。
22:32:11
门元件的调用
门元件调用格式:
门元件名字 <例化的门名字> (<端口列表>)
普通的门的端口列表顺序为: (输出,输入1,输入2,输入3,….); 例如: module AND_G2
input
A F B
(A,B,F)
A,B;
output F;
and G2(F,A,B);
endmodule
22:32:11
module rs_latch (y, yb, r, s); output y, yb; input r, s; nor n1( y, r, yb); nor n2( yb, s, y); endmodule
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 //输入端口定义 //输出端口定义
endmodule
结果:具有低电平有效使能端的2-4译码器,输出为低电平有效。
22:32:11
总结:
用assign 连续赋值语句来描述一个组合逻辑电
路,关键是找出输出与输入之间的逻辑关系,写出

第1章 Verilog HDL入门简介

第1章  Verilog HDL入门简介
第1章 Verilog HDL入门简介
Verilog HDL数字系统设计及仿真
数字电路的回忆—七进制计数器
Verilog HDL数字系统设计及仿真
➢状态转换图
➢卡诺图
2
Verilog HDL数字系统设计及仿真
➢ Q3* 的卡诺图
➢状态方程:
Q3* Q3Q2 ' Q3 'Q2Q1
3
Verilog HDL数字系统设计及仿真
8
采用Verilog HDL代码
Verilog HDL数字系统设计及仿真
➢计数器模块
➢JK触发器模块
module
module JK_FF(J,K,CLK,Q,Qn);
Counter(Q3,Q2,Q1,C,CLK); input J,K;
output Q3,Q2,Q1,C;
input CLK;
input CLK;
output Q,Qn;
wire J1,K2,J3;
wire G3_n,G4_n,G5_n,G6_n,G7_n,G8_n;
nand G7(G7_n,Qn,J,CLK);
JK_FF JK1(Q1,Q1n,J1,1,CLK);nand G8(G8_n,CLK,K,Q);
JK_FF JK2(Q2, ,Q1,K2,CLK); nand G5(G5_n,G8_n,G6_n);
nand G1(Q,G3_n,Qn);
or or1(K2,Q1,Q3);
nand G2(Qn,Q,G4_n);
endmodule
not G9(CLK_n,CLK);
endmodule
9
Verilog HDL数字系统设计及仿真
➢更简洁的代码
module Counter(Q,CLK,RESET);

数字系统设计与Verilog HDL实验报告(二)

数字系统设计与Verilog HDL实验报告(二)

《数字系统设计与Verilog HDL》实验报告(二)班级:自动1003班姓名:**学号:********实验二、四位并串转换电路一、实验目的1、了解及掌握时序电路的基本结构常用数字电路;2、通过ModelSim软件编写时序电路的程序进行仿真和调试。

二、实验内容1、熟悉时序电路中时钟的同步与异步用法;2、编写一个四位并串转换设计程序以及测试该模块的测试程序,要求如下:(1)输入一个四位二进制数pin;(2)每个时钟周期按从左往右的顺序输出一位pin的二进制位的数。

三、实验步骤及源程序新建工程及文件,分别添加设计程序及测试程序,进行编译及纠错,编译通过后运行程序仿真进行调试得出结果。

设计模块:module para_to_serial4(pin,clk,reset,sout);input [3:0] pin;input clk,reset;output sout;reg sout;reg [3:0] data;always @(posedge clk or negedge reset)beginif(~reset)beginsout<=1'b0;data<=pin;endelsebegindata<={data[2:0],data[3]};sout<=data[3];endendendmodule测试模块:`timescale 1ns/1nsmodule test_para_to_ser;wire sout;reg [3:0] pin;reg clk,reset;para_to_serial4 test1(pin,clk,reset,sout);initialbeginclk=1'b0;reset=1'b0;#5 reset=1'b1;#300 $stop;endinitialpin=4'b1001;always#5 clk=~clk;endmodule四、实验结果五、实验心得体会这次试验相对于上次有了一定的难度,由于这门课程刚开始学习,我还不能很好地从宏观把握这门课程,对这门课程的认识和理解还不够深刻,所以做实验时遇到了一些困难,虽然找了一些参考资料,有一定的帮助,但最后还是有点纠结,最终在和同学的交流中才比较深刻的对实验有了了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算功能 选择信号sel 2’b00 2’b01 2’b10 2’b11 a+b a-b a|b a&b
思考与练习
8. 有如下一段代码 initial begin b = 1’b0; #0 b = 1’b1; c = #1 b; end 请问c的最终值是多少? 9. 有如下一段代码 initial while(enable) #20 clk = ~clk; 请将上面的代码用always和wait语句改写,实现同样的行为。 10. 有一个模块fadder_4,其功能为4位全加器,输入端口为A[3:0](加数1),B[3:0] (加数2),输出端口为S[3:0](和),C(进位)。请写一个testbench测试此全加器, 要求测试所有加数的组合。 11. 请设计一个门控时钟信号,周期为20个时间单位,占空比30%,门控信号为enable, 当门控信号为高,输出时钟信号,当门控信号为低,无时钟输出为低。要求时钟切换时 无毛刺。
3.3 顺序块和并行块
块语句的作用是可以将两条或更多的过程语句组合在一起,变成像一条过程语句一样 的语法结构。块语句可以分为两种:一种是begin...end语句,块里面的语句顺序执行, 称为顺序块;另一种是fork…join语句,块里面的语句并行执行,称为并行块。 顺序块: 顺序块中的各条语句是按顺序执行的,前一条语句执行完后才能执行后一条 语 句,所以每条语句的延迟值是对前一条语句的仿真时间而言的。
3.9 时序控制
3.9.2事件控制 基于事件的时序控制是指通过事件的发生来触发语句的执行。在Verilog语言中, 一个事件通常是指一个变量、线网信号或表达式的值发生变化。所以语句的执行在指 定变量的值发生变化的时刻开始,从而提供了更灵活和复杂的时序控制方法。基于事 件的控制大致可以分为:边沿敏感事件控制和电平敏感事件控制。 (1). 边沿敏感事件控制 边沿敏感事件控制用符号@来说明,其格式为: @ 事件 语句; 或: @ (事件1 or 事件2 ... or 事件n) 语句; 或: @ (事件1, 事件2, ..., 事件n) 语句; 例如: @clock a = ~a; @(posedge clk) data = d;
并行块: 并行块中的语句是并行执行的,一旦仿真进入到并行块,则块里面的所有语句都同 从并行 的仿真时刻同时开始执行。若使用延迟语句,则每条语句的延迟值是 都是相对于并行块开始执行的仿真时刻而言的,与前后语句的执行顺序无关。 块语句的其他特点: 块语句可以嵌套,顺序块与并行块可以混合使用 。 块语句可以被命名,称为命名块。在命名块中我们可以声明局部变量,但只 能在块内使用。
3.9 时序控制
时序控制是Verilog语言中比较重要的语句。在Verilog设计中通过各种时序控制语句可 以指定过程语句执行的时刻,从而实现特定的与时间有关的电路时序功能。Verilog提供 了两种类型的时序控制方法:基于延迟的时序控制和基于事件的时序控制。 3.9.1延迟控制 基于延迟的时序控制用在表达式中,用于指定语句开始执行到执行完成之间的时 间间隔。其形式为 # [延迟值],其中延迟值可以是常数,变量或表达式。基于延迟的 时间控制通常可分为两种形式:常规延迟和内嵌延迟。 (1).常规延迟 常规延迟控制语句将指定延迟的语句放在赋值语句的最左边,用来给赋值语句指 定一个延迟值,其语法格式如下: #[延迟值] 语句; (2).内嵌延迟 延迟控制也可以放到赋值语句中,写在赋值语句等号的右边。
3.4 过程赋值语句
过程赋值语句指在 initial 语句或 always 语句中对变量进行赋值的语句,它们 只能对寄存器、整数等变量进行赋值。这些变量数据在被赋值后,值保持不 变,直到下一个过程赋值语句对它们赋新的值。 阻塞赋值语句:阻塞赋值语句用“=”作为赋值符。阻塞语句按顺序执行, 在下一条语句执行之前,上一条赋值语句必须执行完毕。 非阻塞赋值语句:非阻塞语句用“<=”作为赋值符。非阻塞赋值语句不会阻 塞同一个块语句中的其他语句的执行。注意非阻塞赋值语句的赋值符与关系 操作符的小于等于符号是一样的,它在不同的语法环境下被解释成不同的语 法含义。
3.1 Verilog的基本描述形式
对于模块内具体电路功能逻辑的描述,通常有下面3种方式: (1).数据流描述方式:使用连续赋值语句对数据流行为进行描; (2).行为描述方式:使用结构化过程语句对时序行为进行描述。其中结构化过程 语句包括 两种语句:initial语句和always语句。 (3).层次化描述方式:使用原语或模块的实例化对电路结构进行描述(其中原语 包括内建门级原语,开关级原语,用户自定义原语
Verilog HDL 数字系统设计及实践
第3章 Verilog行为描述
学习指南
• 【知识目标】 • (1) 了解initial和always语句的概念; • (2) 了解块语句及过程赋值语句的概念和形式; • (3) 理解条件语句,多路分支语句和循环语句的功能特点; • (4) 理解各种时序控制的机制及形式。 • 【技能目标】 • (1) 能够建立各种基本的行为模型。 • 【重点难点】 • (1) 非阻塞赋值与阻塞赋值的区别; • (2) 各种时序控制机制的特点及应用。
注意:if与else的配对关系,else总是与它之前的最近一个没有else的if配对。尤其 在if嵌套的语句中,配对关系易混淆,需注意区分以避免逻辑错误。
3.6 多路分支语句
case语句的关键字为“case”,“default”和“endcase”。其格式如下: case ( 表达式 ) 分支表达式1:语句1; 分支表达式2:语句2; …… default:默认语句; endcase
3.5 条件语句
条件语句可以根据某个判定条件来确定后面的语句是否执行。条件语句使用的关 键字为“if”和“else” if (条件表达式) 条件为真执行的语句; 或: if (条件表达式) 条件为真执行的语句; else 条件为假执行的语句;
或: if (条件表达式1) 条件为真执行的语句1; else if (条件表达式2) 条件为真执行的语句2; else if (条件表达式3) 条件为真执行的语句3; …… else 条件为假执行的语句1;
3.8 循环语句
3.8.4 forever循环 forever语句的关键字为forever,其格式为: forever 语句; forever循环是永久循环,不需要任何条件表达式,也不做任何计算与判断。 Forever 无条件的做无限次循环,直到仿真结束。同样循环语句如果为一组,需要 begin…end或fork…join组合为块语句。
3.8 循环语句
3.8.2 for循环 for循环的关键字为for,格式为: for ( 初始条件表达式; 终止条件表达式; 控制变量表达式 ) 语句; for循环的运行方式与C语言中的for语句相同,即首先执行初始表达式,然后每 次开始新的循环时计算终止条件表达式,如果终止条件表达式的值为真,则执行for 循环中的语句一次。执行完一次循环后,无条件执行控制变量表达式,然后重新开 始下一次循环。如果终止条件表达式的值为假,则结束循环,跳出for语句。 3.8.3 repeat循环 repeat循环的关键字为repeat,其格式为: repeat ( 循环次数表达式 ) 语句; repeat循环最大的特点是执行固定次数的循环,它不能根据某个条件表达式来决定 循环执行与否。其中循环次数必须是一个常量,变量或者表达式。同样,如果一次循 环需要执行多条语句,则需要用begin..end或fork…join组合为块语句。
思考与练习
6. 上题的代码改写如下 initial begin a = 1’b0; b = 1’b0; c = 1’b1; b <= #10 1’b1; c <= #5 1’b0; d <= #15 {a,b,c}; end 请问每条语句执行的仿真时刻是多少?仿真结束后,各变量值是多少? 7. 请设计一个可选择的计算单元,输入a,b位宽为8,输出结果ret为9位,如下图
3.2 结构化过程语句
结构化过程语句包含两种:initial语句和always语句,它们也是行为描述方式的基本语句。 所有行为描述的其他语句(如过程赋值语句)必须包含在这两种语句当中。 3.2.1initial语句 一条initial语句从仿真的0时刻开始执行,但是只执行一次。如果initial语句中包含了多 条行为语句,那么需要用begin和end将其组合成块语句如果只包含了单条行为语句则不 必使用begin和end。
(1)if…else语句带有优先级,而case语句则没有,是并行的关系。 (2)在嵌套的 if…else语句中,每一个条件判断是一种层层递进的形式,最前面的if 判断语句具有最高的优先级。在 case语句中,各个条件判断则是一种并列形式,与 条件表达式的顺序无关。
3.8 循环语句
Verilog语言中有四种类型的循环语句:while,for,repeat和forever。它们都 只能在initial或always语句模块中使用。 3.8.1while循环 while循环的关键字为while,其格式为: while ( 条件表达式 ) 语句; 当条件表达式为真,则循环执行里面的语句,如果条件表达式为假,则中止循 环并跳出while。
latch_rst D EN CLR Q o练习
1. 设计一个时钟信号,周期为20个时间单位,占空比30%。 2. 请将一个位宽为8,地址范围为64的寄存器数组进行初始化,所有位均设置为1。 3. 设计一个带同步复位的D触发器。(清零端低电平有效,在时钟上升沿执行清零操 作) 4. 请描述如下的一个电路模型:在每一个时钟上升沿检查输入信号pwd(位宽为8), 如果其值为55H或者AAH,输出信号flag为1,并显示pwd的值,否则flag为0,并显示 “error!”。 5. 看下面的一段代码 initial begin a = 1’b0; b = 1’b0; c = 1’b1; #10 b = 1’b1; #5 c = 1’b0; #15 d = {a,b,c}; end 请问每条语句执行的仿真时刻是多少?仿真结束后,各变量值是多少?
相关文档
最新文档