Verilog 设计进阶

合集下载

Verilog设计进阶

Verilog设计进阶
综合过程
可综合的设计中应注意
➢ 不使用初始化语句;不使用带有延时的描述;不使用循环 次数不确定的循环语句,如forever,while等。 ➢ 应尽量采用同步方式设计电路。除非是关键路径的设计, 一般不采用调用门级元件来描述设计的方法,建议采用行为语 句来完成设计。 ➢ 用always过程块描述组合逻辑,应在敏感信号列表中列出块 中出现的所有输入信号。
2. ZigBee特性
9 9)数据传输可靠 ZigBee的媒质传入控制层(MAC层)采用talk-whenready的碰撞避免机制。在这种完全确认的数据传输机制 下,当有数据传送需求时则立刻发送,发送的每个数据 分组都必须等待接收方的确认消息,并进行确认信息回 复。若没有得到确认信息的回复就表示发生了冲突,将 重传一次。采用这种方法可以提高系统信息传送的可靠 性。ZigBee为需要固定带宽的通信业务预留了专用时隙,
为2美元。
3)低速率
3
ZigBee工作在20~250kbps的速率,分别提供250 kbps(2.4GHz)、
40kbps(915 MHz)和20kbps(868 MHz)的原始数据吞吐率,满足低速率传输数
据的应用需求。
第五章
5.1ZigBee介绍
5.1.1 什么是ZigBee
2. ZigBee特性
Zigbee是一种新兴的短距离、低速率无线网络技术,它
是一种介于无线标记技术和蓝牙之间的技术方案。它有自
己的无线电标准,在数千个微小的传感器之间相互协调实
第五章
5.1ZigBee介绍
5.1.1 什么是ZigBee
2. ZigBee特性
1)低功耗
1 在工作模式下,ZigBee技术的传输速率低,传输数据量很小, 因此信号的收发时间很短。其次,在非工作模式情况下,ZigBee的 节点处于休眠状态。设备搜索延迟一般为30ms,休眠激活时延为 15ms,活动设备接入信道时延为15 ms。由于工作时间较短,收发信 息功耗较低且采用了休眠模式,使得ZigBee节点非常省电。ZigBee 节点的电池工作时间可以长达6个月到2年左右,对于某些占空比 (工作时间/(工作时间+休眠时间))小于1%的应用,电池的寿命 甚至可以超过十年。相比较蓝牙仅能工作数周,WIFI仅可工作数小 时。

verilog三段式

verilog三段式

verilog三段式
Verilog的三段式(Three-Level Hierarchy)是一种组织和设计Verilog代码的结构方法,它将代码分成三个级别,以实现模块化和可重用性。

这些级别分别是顶层(Top-level)、中层(Intermediate-level)和底层(Low-level),每个级别都有不同的功能和目的。

1.顶层(Top-level):顶层是整个设计的最高级别,它组织和
连接所有的模块,包括顶层模块和其它外部模块。

在这个层次上,你可以定义主要的模块和其它全局信号,处理模块之间的接口和通信。

通常,顶层模块是设计的入口点,在这里实例化和连接所有的子模块。

2.中层(Intermediate-level):中层是中间级别的模块,它们被
实例化在顶层模块中使用。

这些模块可以是包含顶层模块的主要子模块,也可以是一些复杂的功能模块。

在中层模块中,你可以定义局部信号和局部逻辑,用来实现特定的功能或任务。

这些模块有助于模块化和简化设计,提高代码的可读性和可维护性。

3.底层(Low-level):底层是最低级别的模块,在中层模块中
被实例化和使用。

它们通常是具体的基础模块,实现了基本的功能和操作。

这些模块可以是逻辑门、寄存器、计数器等,也可以是包含简单组合逻辑的小模块。

底层模块通常是最基本的构建块,在设计中提供了底层的功能和细节。

按照这种三段式的组织方式,可以将设计分成几个层次,使代码模块化、结构清晰,并且方便维护和重用。

每个级别都负责不同的任务和功能,遵循了"自顶向下"的设计原则,让整个设计变得更加可靠和可管理。

verilog设计的层次与风格

verilog设计的层次与风格

【例2.8】 数据流描述的2选1数据选择器 module mux2_1c(out,a,b,sel); input a,b,sel;output out; assign out=sel?b:a; endmodule
2.5 不同描述风格的设计
2.5.1 半加器设计
图2.4 半加器的真值表以及门级结构视图
表2.1 Verilog的 内置门元件
1.基本门的逻辑真值表
表2.2与非门(nand)和或非门(nor)的真值表
nand 0 0 1 x z 1 1 1 1
1 1 0 x x
x 1 x x x
z nor 1 0 x 1 x x x z
0 1 0 x x
1 0 0 0 0
x x 0 x x
z x 0 x x
2.2 门级结构(Structural)描述
在Verilog程序中可通过如下方式描述电路的结构:
◆ 调用Verilog内置门元件(门级结构描述) ◆ 调用开关级元件(晶体管级结构描述)
◆ 用户自定义元件UDP(也在门级)
多层次结构的电路设计中,不同模块间的调用。
1.2.1 Verilog的内置门元件
2.4 数据流描述
0
1
图2.2 2选1数据选择器
图2.3 2选1数据选择器门级原理图
2.4 数据流描述
【例2.6】 门级结构描述的2选1数据选择器 module mux2_1a(out,s,b,sel); input a,b,sel;output out; not(sel_,sel);and(a1,a,sel_),(a2,b,sel);or(out,a1,a2); endmodule 【例2.7】 行为描述的2选1数据选择器 module mux2_1b(out,a,b,sel); input a,b,sel; output reg out; always@* begin if(sel) out=b; else out=a; end endmodule

用verilog 进行FPGA设计阶段总结

用verilog 进行FPGA设计阶段总结

用verilog 进行FPGA设计第一阶段总结2007-08-23 21:34实习期间,老师叫我们做他的大课题中的一个小部分。

这个部分主要是将A/D采集的数字信号利用一个函数进行插值恢复,以便后面的作图中使用。

要求在每两个点中间均匀插入九个点,每个点与其前后80个点有关,用verilog 语言描述,在xilinx公司的开发环境ISE下完成。

对于verilog我们没有接触过,以前的课程设计都用的是VHDL,ISE也没用过,以前用的是Maxplus2开发环境,于是我们就从网上下载了一些教程开始学习。

在熟悉了verilog的语法和ISE之后,我们开始了设计。

思路是这样的:将要处理的数据先存在一个存储器中,然后每进来一个新的数据,所有的数据向前移动一个寄存器,在主时钟十分频之后的每个上升沿读取新的数据进来,然后计算插值,然后在每个主时钟的上升沿处输出插值后的数据,这样就能实现插值的过程了。

在具体的编写程序的时候,我们先用与每个插值点前后4个点有关进行设计,设计好之后再进行扩展。

对于插值的计算我们先不考虑,将其全部设置成常量,主要考虑看能否在两个点之间插值成功,这样的程序就简单多了。

很快我们的程序就写好了,编译仿真之后能实现插值。

接下来就是主要考虑插值的计算问题了,在这个部分我们走了一些弯路。

首先是乘法问题,这个课题相当于是一个FIR滤波器,其中要进行约720次的相乘累加,我们看资料书和一些发表的论文,上面好多都考虑用分布式算法DA来实现,但是要是考虑的点多了,这种方法就不可行了,因为那个表会造的很大。

在书上,我也没有看到直接用乘号来进行乘法运算的,大部分都是进行移位相加的,为此还认真的研究了一下乘法的原理。

到最后,老师说你可以直接用乘号的,不要管那些移位什么的,这些是综合器做的事情。

其次是verilog中有符号数的计算问题。

因为是新接触,不知道怎么做。

为了实现2*(-3)=-6,搞到了半夜两点。

我记得计算机组织与结构里面有一章是关于乘法的,里面讲的是用布斯算法,看了半天,觉得在程序中这样实现太麻烦,肯定有更简单的方法。

《Verilog设计入门》PPT课件

《Verilog设计入门》PPT课件

精选PPT
18
3.1 组合电路的Verilog描述
3.1.2 4选1多路选择器及其case语句表述方式 6.赋值操作符 “<=”,只能用于顺序语句,不能用于assign引 导的并行语句
两种过程赋值操作: (1)阻塞式赋值“=”:语句执行结束,右侧表达式的值立刻赋给左侧 目标变量。
对于always引导的块语句中含有多条阻塞式赋值语句时,当执行某 一条语句时,其它语句不允许执行,被阻塞了,具有顺序执行的特点。
精选PPT
23
3.1 组合电路的Verilog描述
3.1.4 4选1多路选择器及其if语句描述方式
精选PPT
24
3.1 组合电路的Verilog描述
3.1.4 4选1多路选择器及其if语句描述方式 1.if_ else条件语句 if(表达式) begin 语句1;语句2;…..语句n; end else begin 语句n+1;语句n+2;…..语句n+n; end
input a,b;
output so,co;
assign so = a ^ b;
assign co = a & b;
endmodule
精选PPT
28
3.1 组合电路的Verilog描述
3.1.5 加法器及其Verilog描述
2.基于always @引导的过程语句和逻辑操作符的描述
module h_adder2(a,b,so,co);
endmodule
精选PPT
34
3.1 组合电路的Verilog描述
3.1.5 加法器及其Verilog描述 5. 全加器描述----用半加器、或门模块及例化语句描述
精选PPT

VerilogHDL设计进阶专题知识讲座

VerilogHDL设计进阶专题知识讲座
6.8.1 行为描述
6.8 Verilog HDL旳RTL表述
6.8.2 数据流描述
6.8.3 构造描述
习题
6-1 在Verilog设计中,给时序电路清零(复位)有两种不同措施,它们是什么,怎 样实现? 6-2 哪一种复位措施必须将复位信号放在敏感信号表中?给出这两种电路旳Verilog 描述。 6-3 用不同循环语句分别设计一种逻辑电路模块,用以统计一8位二进制数中含1旳 数量。 6-4 用循环语句设计一种7人投票表决器。 6-5 设计一种4位4输入最大数值检测电路。 6-6 从不完整旳条件语句产生时序模块旳原理看,例6-9和例6-10从表面上看都包括 不完整条件语句,试阐明,为何例6-9旳综合成果含锁存器,二例6-10却没有。 6-7 设计一种求补码旳程序,输入数据是一种有符号旳8位二进制数。 6-8 设计一种比较电路,当输入旳8421BCD码不小于5时输出1,不然输出0。 6-9 用原理图或Verilog输入方式分别设计一种周期性产生二进制序列01001011001 旳序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。 6-10 基于原理图输入方式,用74194、74273、D触发器等器件构成8位串入并出旳 转换电路,要求在转换过程中数据不变,只有当8位一组数据全部转换结束后,输 出才变化一次。
试验与设计
6-3 VGA彩条信号显示控制电路设计
(1)试验目旳: (2)试验原理:
试验与设计
6-3 VGA彩条信号显示控制电路设计
(1)试验目旳:GA彩条信号显示控制电路设计
(1)试验目旳: (2)试验原理:
试验与设计
6-3 VGA彩条信号显示控制电路设计
第6章 Verilog HDL设计进阶
6.1 过程构造中旳赋值语句

第6章 Verilog HDL设计进阶习题

第6章 Verilog HDL设计进阶习题
15
1CLK7476N 1K ~1Q ~1CLR 14
U3A 7400N
3
V1 100 Hz 5V J1
10 9 2 7 6 5 4 3
74194N
9 QD QC QB QA 12 13 14 15 11 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 G D C B A
//Verilog设计一个4位4输入最大数值检测电路 module Maximum_value_detection(Mostlarge,a,b,c,d);//4位 4输入最大数值检测电路 output [3:0] Mostlarge; input [3:0] a,b,c,d; wire[3:0]sum1,sum2,sum3;

CP 1 2 3 4 5 6 QD(A2) QC(D4、~D5) 0 0 0 1 1 1 1 1 1 0 ~0 0 QB(A1) 0 1 1 0 0 1

QA(A0、D7) 1 0 1 0 1 0 D D1 D2 D3 D4 D5 D6 F 0 1 0 0 1 0
7
8 9 10 11
1
1 1 1 1
U1
74150N
Key = Space
XSC1
Ext Trig + _ A + _ + B _
U5A 7404N
E15 E14 E13 E12 E11 E10 E9 E8 E7 E6 E5 E4 E3 E2 E1 E0
0
1 ~1 1 1
1
0 0 1 1
1
0 1 0 1
D7
D4 D5 D6 D7
1
1 0 0 1
VDD 5V U2 U1A 74S04D

EDA 第3章 Verilog设计入门

EDA 第3章 Verilog设计入门

www.themBiblioteka
5.注释符号

3.1.4 4选1多路选择器及其if语句描述方式

1.if_ else条件语句
执行过程:当if后的条件表达式为真时,执行赋值语句, 否则执行else后的If语句,如此数据的执行下去,直到完 成所有if语句。 同样,如果执行多条语句时,应该用begin-end块语句将 它们括起来。
5.并位操作和数字表达
(1)并位操作
大括号{}:并位运算符,将两个或多个信号按二进制位拼接起来, 作为一个信号使用。

(2)数字表示 表示二进制数的一般格式:
说明: 1. B表示二进制,O表示八进制,H表示十六进制,D表示十进制,且 不分大小写。 2. verilog2001规定可定义有符号二进制数,如8„b10111011和 8‟sb10111011是不一样的。前者是普通无符号数,后者是有符号数,最 高位1是符号。

3.1.2 4选1多路选择器及其case语句表述方式


1.reg型变量定义
(1)verilog中最常用的变量:寄存器型变量(reg)和网线型变量 (wire)。 (2)模块中功能描述涉及的所有信号都必须定义相应的变量类型, 如果没有在模块中显式地定义信号的类型,verilog默认定义为 wire型。 (3)当需要信号为寄存器型信号时必须使用reg进行显示定义,在 过程语句always@引导的顺序语句中规定必须是reg型变量。 (4)输入或双向口信号不能定义为寄存器型信号类型
(2)条件数值虽为整数1、2、3的表达式,但综合器自 动转化为case的变量{a,b}与对应数据类型的数值进 行比较判定。

说明:例3.8直接使用了加法算术操作符“+”的描述方式。

第六讲 模块测试

第六讲 模块测试

加法器测试模块
`timescale 10ns/1ns
`include “myadder.v” module test; wire [8:0] sumout; reg [7:0] ain, bin; reg clock; initial begin clock = 0; ain = 0; bin=3; end always #5 clock = ~clock;
仿真和综合工具概述
• 常用的仿真工具: • 常用的综合工具: 常用的综合工具: 常用的仿真工具: - Verilog -XL - Synplify - NC -Verilog - Exemplar - ModelSim - Synopsys Express - VeriBest - Synopsys Designer - ViewLogic - . . . . . - . . . . .
Verilog HDL 语法和设计进阶设计进阶 语法和设计进阶-仿真测试
武 斌
综合与仿真的关系
行为仿真: 行为仿真:行为的合理性和算法验证 逻辑功能前仿真:RTL级仿真 逻辑功能前仿真:RTL级仿真 逻辑综合: RTL级模块转换成门级 逻辑综合:把RTL级模块转换成门级 综合后仿真: 综合后仿真:用门级模型做验证 布局布线: 布局布线: 在门级模型基础上加了布线延时 布局布线后仿真: 布局布线后仿真:与真实电路最接近的验证
Verilog模块的种类和用途 Verilog模块的种类和用途
• 行为模块: 行为模块: Verilog HDL虚电路模块,在仿真时其功能与 HDL虚电路模块, 虚电路模块 实体逻辑电路完全一致,用于产生或接受测 产生或接受 实体逻辑电路完全一致,用于产生或接受测 试信号和数据,验证设计电路 设计电路各部分的功能 试信号和数据,验证设计电路各部分的功能 指标分配是否合理,但并没有生成实际电路 指标分配是否合理,但并没有生成实际电路 • Verilog HDL测试模块: 测试模块: 测试模块 HDL描述的模块 描述的模块, 用Verilog HDL描述的模块,可以用来产生 测试信号序列并可以接收被测试模块的信号, 测试信号序列并可以接收被测试模块的信号, 用于验证所设计的模块是否能正常运行往往 不可综合成具体门级电路。 不可综合成具体门级电路。

Verilog设计入门

Verilog设计入门

2.等式操作符
等式运算符


(==)和 (!=)不比较x和z位 (===)和(!==)将x 和 z 当确定值进 行比较 例:(3==4)=0;(3!=4)=1; (4’b1010==4’b1010)=1; (4’b0z1x===4’b0z1x)=1; (4’b0z1x==4’b0z1x)=0;
3.assign连续赋值语句
常量

下画线 - 下画线可以提高程序的可读性,只能用在具 体的数字之间。 例: 16’b1010_1011_1111_1010 //合法 8’b_0011_1010 //非法格式
3.1.2 4选1多路选择器及其case语句表述方式
练习3 写出2选1多路选择器Verilog描述(用always结构,
3.块语句begin_ end
4.case条件语句和4种逻辑状态
3.1.2 4选1多路选择器及其case语句表述方式
5.并位操作和数字表达
数字表达

常量 数字的表达方式 <位宽> <进制> <数字> 例: 8’b10101100 8’ha2 , 4’b1010 , 3’d5 位宽默认(32)位,进制默认(十进制)
3.2.6 Verilog的时钟过程表述的特点和规律 对于边沿触发型时序模块,遵循以下规律: 1.某信号被定义成边沿敏感时钟信号,则posedge A或
negedge A放敏感表中,但always结构块中不能再出现信
号A了。 2.若B被定义成对应于时钟的电平敏感异步控制信号,则除
posedge B或negedge B放敏感表中,always块中必须

____ muxtwo (out, __, __, __ ); input __, __, __; ____ out; reg out; always@ (sl or a or b) if (! sl) out=a; else out=b; ____

Verilog HDL设计的要点

Verilog HDL设计的要点

设计练习进阶EDA俱乐部整理前言:在前面九章学习的基础上,通过本章十个阶段的练习,一定能逐步掌握Verilog HDL设计的要点。

我们可以先理解样板模块中每一条语句的作用,然后对样板模块进行综合前和综合后仿真,再独立完成每一阶段规定的练习。

当十个阶段的练习做完后,便可以开始设计一些简单的逻辑电路和系统。

很快我们就能过渡到设计相当复杂的数字逻辑系统。

当然,复杂的数字逻辑系统的设计和验证,不但需要系统结构的知识和经验的积累,还需要了解更多的语法现象和掌握高级的Verilog HDL系统任务,以及与C语言模块接口的方法(即PLI),这些已超出的本书的范围。

有兴趣的同学可以阅读Verilog语法参考资料和有关文献,自己学习,我们将在下一本书中介绍Verilog较高级的用法。

练习一.简单的组合逻辑设计目的: 掌握基本组合逻辑电路的实现方法。

这是一个可综合的数据比较器,很容易看出它的功能是比较数据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 //定义时间单位。

`include "./compare.v" //包含模块文件。

verilog语法进阶

verilog语法进阶

verilog语法进阶模块的结构、数据类型、变量和基本运算符号3.1.模块的结构Verilog的基本设计单元是“模块”(block)。

一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。

下面举例说明:图1 模块示例m请看上面的例子: 程序模块旁边有一个电路图的符号。

在许多方面,程序模块和电路图符号是一致的,这是因为电路图符号的引脚也就是程序模块的接口。

而程序模块描述了电路图符号所实现的逻辑功能。

以上就是设计一个简单的Verilog程序模块所需的全部内容。

从上面的例子可以看出,Verilog结构位于在module和endmodule声明语句之间,每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。

3.1.1、模块的端口定义模块的端口声明了模块的输入输出口。

其格式如下:module 模块名(口1,口2,口3,口4, ………);…….endmodule模块的端口表示的是模块的输入和输出口名,也就是它与别的模块联系端口的标识。

在模块被引用时,在引用的模块中,有些信号要输入到被引用的模块中,有的信号需要从被引用的模块中取出来。

在引用模块时其端口可以用两种方法连接:1)在引用时,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名,举例说明如下:模块名实例化名(连接端口1信号名, 连接端口2信号名,连接端口3信号名,….,,,);2)在引用时用“.”标明原模块定义时规定的端口名,举例说明如下:模块名实例化名(.端口1名( 连接信号1名),.端口2名( 连接信号2名),….,,,);这样表示的好处在于可以用端口名与被引用模块的端口对应,不必严格按端口顺序对应,提高了程序的可读性和可移植性。

3.1.2、模块内容模块的内容包括I/O说明、内部信号声明、功能定义。

3.1.2.1、I/O说明的格式如下:输入口: input [信号位宽-1 :0] 端口名1;input [信号位宽-1 :0] 端口名2;………;input [信号位宽-1 :0] 端口名i; //(共有i个输入口)输出口: output [信号位宽-1 :0] 端口名1;output [信号位宽-1 :0] 端口名2;………;output [信号位宽-1 :0] 端口名j; //(共有j个输出口)输入/输出口:inout [信号位宽-1 :0] 端口名1;inout [信号位宽-1 :0] 端口名2;………;inout [信号位宽-1 :0] 端口名k; //(共有k个双向总线端口)I/O说明也可以写在端口声明语句里。

Verilog语言快速入门

Verilog语言快速入门

结果为0110
Y=4’b1001 | 4’b 0111;
Y=3’b001 | 4’b 0111; Y=3’b001 | 4’b 0111 & 3’b101;
结果为0001 结果为1111
结果为0111
结果为0101
说明 按位运算的操作数是1位或多位二进制数, 按位非的操作数只有一个,将该数的每一位求非运算。 其它按位运算的操作数有2个或多个,将两个操作数对应的位两两运算; 如果操作数位宽不同,位宽小的会自动左添0补齐; 结果与操作数位宽相同;
化也不会计算和赋值。 • verilog规定assign中的赋值目标必须是wire型的,而always语句中的赋值目标必须是reg型的。
例: assign Q=D
只要D发生变化,马上进行计 算和赋值; Q必须是wire型。
always @ (posedge clk) Q=D;
只有当clk上升沿到来时,才能激活该块语句,才能 进行计算和赋值;否则,即使D发生变化也不会计 算和赋值。在未被激活时,Q的值保持不变。 Q必须是reg型。
位宽如果不做说明的话,默认是1位; 数据类型不做说明的话,默认是wire型的。
S位宽为4位,对应信号为S[3]、S[2]、S[1]、S[0] 根据模块说明部分,我们可以得出电路符号
A B CIN
full_adder
S COUT 7
2. assign语句
assign语句称作连续赋值语句 基本格式: assign 赋值目标 = 表达式
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明
assign语句
底层模块或门 原语调用
endmodule
always 语句块

第五讲 verilog设计进阶

第五讲 verilog设计进阶

时序逻辑设计要点 --分频 时序逻辑设计要点---分频 设计要点简单二分频: 简单二分频: reg fout1 always @(posedge clk) begin if (!rst) fout1<=0; else fout1<=!fout; 任意分频: 任意分频: 如3.5分频,7个时钟 3.5分频, 分频 中取2 中取2个,本质是模可 控计数器或状态机。 控计数器或状态机。
Task例
module bus_ctrl_tb; reg [7:0] data; reg valid, rd; cpu ul(valid,data, rd); initial begin cpu_driver (8’b0000_0000); cpu_driver (8’b1010_1010); cpu_driver (8’b0101_0101); end
clk rst
½ f
q
不能综合的 Verilog 结构
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. initial 循环语句: 循环语句: repeat forever while for 的非结构用法 一部分数据类型 event real time 11.UDPs 12. fork…join 块 13. wait 14. 过程连续赋值语句 15. assign 和 deassign 16. force 和 release 17. 部分操作符 18. = = = 19. != =
Verilog HDL 语法和设计 设计进阶 语法和设计进阶
武 斌
VerilogHDL的抽象级别 的抽象级别
•系统级 系统级(system) 系统级
•算法集 算法集(algorithmic) 算法集
•寄存器传输级 寄存器传输级(Register-Transfer-Lever) 寄存器传输级 •门级(结构级) (gate-lever) 门级(结构级) 门级 •开关级 开关级(switch-lever) 开关级

Verilog HDL语言进阶

Verilog HDL语言进阶
2011-10-28
敏感信号列表举例(4选1数据选择器)
module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input[1:0] sel; reg out; always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表 case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx; endcase endmodule
2011-10-28
for语句
• for语句的使用格式如下(同C语言): for(表达式1;表达式2;表达式3)语句; 即:for(循环变量赋初值;循环结束条件;循 环变量增值)执行语句;
2011-10-28
用for语句描述的七人投票表决器
module voter7(pass,vote); output pass; input[6:0] vote; reg[2:0] sum; integer i; reg pass; always @(vote) begin sum=0; for(i=0;i<=6;i=i+1) //for语句 if(vote[i]) sum=sum+1; if(sum[2]) pass=1; //若超过4人赞成,则pass=1 else pass=0; end endmodule
2011-10-28
4.3 赋值语句
1、持续赋值语句(Continuous Assignments) 、持续赋值语句( ) assign为持续赋值语句,主要用于对 为持续赋值语句, 型变量的赋值。 为持续赋值语句 主要用于对wire型变量的赋值。 型变量的赋值 比如: 比如:assign c=a&b; 在上面的赋值中, 、 、 三个变量皆为 三个变量皆为wire型变量,a和b信号的任何变化, 型变量, 和 信号的任何变化 信号的任何变化, 在上面的赋值中,a、b、c三个变量皆为 型变量 都将随时反映到c上来 上来。 都将随时反映到 上来。

第五讲verilog设计进阶

第五讲verilog设计进阶

3 可预置数双向可控寄存器实例
in
rst
out
dir
时序逻辑设计 ----计数器
? 举例3-21 (P90) 改进 reg[3:0] q wire out; always@(posedge clk )q=q+1; assign out=(q==4‘h)f 1:0; // 其他写法
? 模计数器,2n (模可控)任意进制计数器
clk counter q
rst
regs
count<=count+1;
assign out=(count==2 n-1)?1:0;//?
2 带复位模计数器 always @(posedge clk) if(!rst) count<=0; else count<=count+1; assign out=(count== 2 n-1)?1:0; //毛刺?
input [7:0]a,b;
input [7:0]a;
input clk;
input clk;
output [8:0] sum;
output [8:0] sum;
reg[8:0] sum;
reg[8:0] sum;
always @(posedge clk)
always @(posedge clk)
sum<=a+b;
sum<=a+sum;
endmodule
endmodule
regs
regs
时序逻辑设计方法
移位寄存器实例:
1 按位描述
左移 reg [7:0] shift; always@(posedge clk)
begin shift[7:1]<=shift[6:0]; shift[0]<=din; end

基于verilog的PS2键盘设计进阶

基于verilog的PS2键盘设计进阶

实验九、基于verilog的PS/2键盘设计进阶一、前言及背景:说到PS/2相信大家都不会陌生,不错的,我们日常的鼠标键盘大多是基于P S/2接口设计的。

虽然USB鼠标大有取而代之之势,但是依然阻止不了我们这群IT菜鸟掌握它的强烈欲望,而使用verilog来做PS/2的解码更是需要我们把P S/2的传输协议理解的更透彻一些。

所以,下面就让特权同学带领大家一步一步掌握PS/2。

PS/2接口标准的发展过程随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。

19 81年IBM推出了IBM pc/XT键盘及其接口标准。

该标准定义了83键,采用5脚DIN连接器和简单的串行协议。

实际上,第一套键盘扫描码集并没有主机到键盘的命令。

为此,1984年IBM推出了IBM AT键盘接口标准。

该标准定义了84~10 1键,采用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设有8个主机到键盘的命令。

到了1987年,IBM又推出了PS/2键盘接口标准。

该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。

现在,市面上的键盘都和PS/2及AT键盘兼容,只是功能不同而已。

表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

(是不是发现它的数据传输协议和串口很像呢!呵呵)PS/2 发送数据到PC的时序键盘接口时序:(a) 键盘发送时序(b) 键盘接收时序注:在时钟的下降沿读取数据。

以下可做具体写代码设计参考:从PS/2向PC机发送一个字节可按照下面的步骤进行:(1)检测时钟线电平,如果时钟线为低,则延时50us;(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);(4)延时20us(如果此时正在发送起始位,则应延时40us);(5)输出起始位(0)到数据线上。

第7章-Verilog设计的层次与风格

第7章-Verilog设计的层次与风格

1位
cin2
1位
cin3
1位
cout
全加器
全加器
全加器
全加器
sum[0]
sum[1]
sum[2]
sum[3]
结构描述的4位级连全加器
【例7.10】 module add4_1(sum,cout,a,b,cin); output [3:0] sum; output cout; input [3:0] a,b;input cin; wire cin1,cin2,cin3; full_add1 f0(a[0],b[0],cin,sum[0],cin1); full_add1 f1(a[1],b[1],cin1,sum[1],cin2); full_add1 f2(a[2],b[2],cin2,sum[2],cin3); full_add1 f3(a[3],b[3],cin3,sum[3],cout); endmodule
7.6 多层次结构电路的设计
如果数字系统比较复杂,可采用“Top-down”的方法进行设 计。首先把系统分为几个模块,每个模块再分为几个子模块, 以此类推,直到易于实现为止。这种“Top-down”的方法能够 把复杂的设计分解为许多简单的逻辑来实现,同时也适合于多 人进行分工合作,如同用C语言编写大型软件一样。Verilog语 言能够很好地支持这种“Top-down”的设计方法
7.2 结构(Structural)描述
在Verilog程序中可通过如下方式描述电路的 结构
◆ 调用Verilog内置门元件(门级结构描述) ◆ 调用开关级元件(晶体管级结构描述) ◆ 用户自定义元件UDP(也在门级) ◆ 在多层次结构电路的设计中,不同模块间的调用 也属于结构描述
Verilog的 内置门元件

第6章Verilog设计进阶

第6章Verilog设计进阶

敏感信号列表,上升沿敏 感
if(reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule
always @(posedge clk or posedge reset ) begin
if(reset) out<=0; //异步复位 else out<=out+1; //计数
reg[3:0] sum; reg cout;
在always块内被赋值的变量必须 定义为reg型
always@(ina or inb or cin) begin
{cout,sum}=ina+inb+cin; end endmodule
敏感信号列表,电平敏感,列出 所有影响块内输出的信号
always过程语句
@(posedge clock) //单信号敏感,当clock 的上升沿到来时执行块内语句 @(negedge clock) //单信号敏感,当clock 的下降沿到来时执行块内语句 @(posedge clk or negedge reset) //多信号敏感,信号间用关键字or隔开
//当clk的上升沿到来或reset信号的下降沿到来,执行块内语句 b)用途
主要内容
6.1 过程语句(initial、always) 6.2 块语句(begin-end、fork-join) 6.3 赋值语句(assign、=、<=) 6.4条件语句(if-else、case、casez、casex) 6.5 循环语句(for、forever、repeat、while) 6.6 编译指示语句(`define、`include、`ifdef、
always @(posedge clk)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
材料与能源学院微电子工程系
2.
3. 4.
5.
第八章 Verilog 设计进阶
§8.2.1 有限状态机的Verilog描述
1. 用三个过程描述:即现态(CS:Current State)、次 态(NS:Next State)、输出逻辑(OL:Out Logic)各用一 个always过程描述 。 2. 双过程描述(CS+NS、OL双过程描述):使用两个 always过程来描述有限状态机,一个过程描述现态 和次态时序逻辑(CS+NS);另一个过程描述输出逻 辑(OL)。 3. 双过程描述(CS、NS+OL双过程描述):一个过程用 来描述现态(CS);另一个过程描述次态和输出逻辑 (NS+OL)。 4. 单过程描述:在单过程描述方式中,将状态机的现 态、次态和输出逻辑(CS+NS+OL)放在一个always 过程中进行描述。
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
§8.2 Verilog 有限状态机设计 分析图示电路实现什么功能
1. 写出各时钟及触发器的驱
动方程;
2. 3. 4. 5. 6.
写出电路的输出方程; 写出各触发器的状态方程; 列出电路的状态表; 画出电路的状态图; 逻辑功能分析。
( X/Z )
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
always @(negedge clk) //时钟下降沿计数 begin if(!reset) begin cout2<=0; n<=0; end else begin if(n==N-1) n<=0; else n<=n+1; if(n<(N-1)/2) cout2<=1; else cout2<=0; end end assign cout=cout1|cout2; //两个计数器的输出相或 endmodule
双模分频器
delete
f1
控制计数器
控制逻辑
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
下面假定源时钟为60MHz,先从60MHz经小数分频得到
50.4MHz的时钟信号,再从50.4MHz时钟分频得到10KHz、 20KHz、…、100KH等10个时钟频率。 因此,取P =25,Q =21。 工作过程:输入的时钟源clk的每一个上升沿,计数器加上 21,若计数器的值小于25,则发出删除脉冲的信号,将 delete置为高电平;若其值大于25,则将计数器的值减去25, 并将delete置为低电平,不发出删除脉冲的信号。
第八章 Verilog 设计进阶
第八章 Verilog 设计进阶
§8.1 分频器设计 §8.2 Verilog 有限状态机设计
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
§8.1 分频器设计 分频器是指使输出信号频率为输入信号频率整数分 之一的电子电路。 在许多电子设备中如电子钟、频率合成器等,需要 各种不同频率的信号协同工作,常用的方法是以稳 定度高的晶体振荡器为主振源,通过变换得到所需 要的各种频率成分,分频器是一种主要变换手段。 1. 偶数倍(2N)分频 偶分频比较简单,假设为N分频,只需计数到 N/2-1,然后时钟翻转、计数清零,如此循环就可 以得到N(偶)分频。
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
5.5倍半整数分频器功能仿真波形图(Quartus Ⅱ)
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
4. 小数分频
分频比X=f0 /f1


f0
=M+N2 /(N1+N2) =[M/(N1+N2)+N2 ]/(N1+N2) =P/Q 当和取不同的正整数时,就可实现小(分)数分频。 常用设计方法—双模前置小数分频:当时钟源每输入P个 脉冲时,利用脉冲删除电路从这P个脉冲中按照一定的规 律删除(P-Q)个脉冲,输出Q个脉冲,从而实现平均意义 上的X分频。 双模前置小数分频电路结构如下 :
模13奇数分频器功能仿真波形图(Quartus Ⅱ)
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
3. 半整数(N-0.5)倍分频

假设有一个5 MHz的时钟信号,但需要得到2 MHz的时钟,
分频比为2.5,此时可采用半整数分频器。 半整数分频器的设计思想:要实现N-0.5分频,可先设计 一个模N计数器,再设计一个脉冲扣除电路,加在模N计 数器之后,每来N个脉冲就扣除半个脉冲,即可实现分频 系数为N-0.5的半整数分频。 半整数分频器原理图如一图所示,异或门和2分频模块组 成脉冲扣除电路。
材料与能源学院微电子工程系
第八章 Verilog 状态机设计技术
摩尔型(Moore)状态机
米里型(Mealy)状态机
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
状态机的特点与优势:
1. 高效的过程控制模型。它的工作方式是根据控制信号按
照预先设定的状态进行顺序运行的,能实现高速、高效 的过程控制。 容易利用现成的EDA工具进行优化设计。状态机构建简 单,设计方案相对固定,使得综合器能提供强大的优化 功能,如自动编码、完全状态机生成等。 系统性能稳定。通过构建同步时序逻辑模块,能解决竞 争冒险。 高速性能。 比相应的CPU工作速度高出3~5个数量级。 高可靠性能。由纯硬件电路构成,运行不依赖软件指令 的逐条执行;有完整的容错技术;能很快从非法态跳出。
材料与能源学院微电子工程系

2.
3. 4. 5.
第八章 Verilog 设计进阶
有限状态机设计的一般步骤
1. 逻辑抽象。得出状态转换图就是把给出的一个实际
逻辑关系表示为时序逻辑函数,可以用状态转换表 来描述,也可以用状态转换图来描述。 状态化简。如果在状态转换图中出现这样两个状态, 它们在相同的输入下转换到同一状态去,并得到一 样的输出,则称它们为等价状态。显然等价状态是 重复的,可以合并为一个。 状态分配。状态分配又称状态编码。 选定触发器的类型并求出状态方程、驱动方程和输 出方程。 按照方程得出逻辑图。

材料与能源学院微电子工程系
第八章 Verilog 设计进阶
module clk_divider (rst, insig, clk60m, clk504m, clkout); input rst, clk60m; //clk60m 为时钟源 output clkout, clk504m; //cnt1计分频的次数 reg clk1,clkout,delete,clk504m; input[3:0] insig; reg[11:0] cnt, origin; integer count; always@(posedge clk60m or posedge rst) begin if(rst) begin count=0; delete=1'b0; end else begin count=count+21; if(count>=25) begin count=count-25; delete=1'0; end //不删除脉冲 else delete=1'b1; end //删除脉冲 end always@(delete) begin if(delete==1'b1) clk504m=1'b1; else clk504m=ckk60m; end
材料与能源学院微电子工程系
第八章 Verilog 设计进阶
状态机(State Machine)是一个广义的时序电路,像
移位寄存器、计数器等都算是它的特殊功能类型中 的一种。 根据输入、输出及状态之间的关系,状态机可分两 类,一类是Moore状态机,其输出值只取决于当前 状态,与输入值无关;另一类是Mealy状态机,其 输出值不但和当前状态有关,还和输入值有关。
材料与能源学院微电子工程系
可以通过改变参量 N 的值和计数变量 cnt 的位宽实现任意偶分频。
第八章 Verilog 设计进阶
2. 奇数倍(2N+1)分频
用两个计数器,一个由输入时钟上升沿触发,一个由输 入时钟下降沿触发,最后将两个计数器的输出相或,即可得 到占空比为50%的方波波形。 【例】: module count_N(reset, clk, cout); input clk, reset; output wire cout; reg[4:0] m, n; reg cout1, cout2; parameter N=13; always @(posedge clk) //时钟上升沿计数 begin if(!reset) begin cout1<=0; m<=0; end else begin if(m==N-1) m<=0; else m<=m+1; if(m<(N-1)/2) cout1<=1; else cout1<=0; end end

材料与能源学院微电子工程系
第八章 Verilog 设计进阶
【例】: module fdiv5_5(clkin, clr, clkout); input clkin, clr; output reg clkout; reg clk1; wire clk2; integer count; xor xor1(clk2,clkin,clk1); //异或门 always@(posedge clkout or negedge clr) //2分频器 begin if(!clr) begin clk1<=1'b0; end else clk1<=~clk1; end always@(posedge clk2 or negedge clr) //模5分频器 begin if(!clr) begin count<=0; clkout<=1'b0; end else if(count==5) //要改变分频器的模,只需改变count的值 begin count<=0; clkout<=1'b1; end else begin count<=count+1; clkout<=1'b0; end end endmodule
相关文档
最新文档