当前位置:
文档之家› 第4章 Verilog HDL的描述方式
第4章 Verilog HDL的描述方式
X X x x
notif0 数 据 输 入
0 1 X Z
控制信号
0
1 0 X X
1
Z Z Z Z
X
Z
notif1 数 据 输 入
0 1 X Z
控制信号
0
Z Z Z Z
1
1 0 X X
X
Z
1/z 1/z 0/z 0/z X X x x
1/z 1/z 0/z 0/z X X x x
门级结构建模例题
clear nd1 clock b d nd6 f nd8 qb a nd3 c nd5
1.3 多输出门
多输出门有: buf not 这些门都只有单个输入,一个或多个输出。 多输出门的实例语句的基本语法如:
multi_output_gate_type [instance_name] (Out1, Out2, ... OutN, InputA );
output 1 output 2 output N
rnmos、rpmos、驱动强度
rnmos和 rpmos在输入引线和输出引线之间存在高阻抗(电阻)。因 此当数据从输入传输至输出时,对于rpmos和rnmos,存在数据信 号强度衰减。 值1强度supply1 > strong1 > pull1> weak1> highz1 值0强度supply0 > strong0 > pull0> weak0> highz0
由一些Verilog原型
列出结构化的元件
并按网表连接
1.1 内置的基本门
Verilog HDL为门级电路建模的能力提供下列 内置基本门:
多输入门:and, nand, or, nor, xor, xnor 多输出门:buf, not 三态门: bufif0, bufif1, notif0, notif1 上拉、下拉电阻:pullup, pulldown MOS开关:cmos, nmos, pmos, rcmos, rnmos, rpmos 双向开关:tran,tranif0, tranif1, rtran, rtranif0, rtranif1
clear nd1 clock b d nd6 f nd8 qb a nd3 c nd5
e nd7
q
data
iv1
nd2
nd4
iv2
nclock
课堂练习
用verilog的内置基本门结构建模以下电路
参考答案
module Parity_9_Bit(D,Even, Odd); input [0:8] D; output Even, Odd; xor XE0(E0,D[0],D[1]), XE1(E1,D[2],D[3]), XE2(E2,D[4],D[5]), XE3(E3,D[6],D[7]), XF0(F0,E0,E1), XF1(F1,E2,E3), XH0(H0,F0,F1), XEVEN(Even,D[8], H0); not XODD(Odd,Even); endmodule
上节回顾
块语句
语句块提供将两条或更多条语句组合成语法结构上相当 于一条语句的机制。在Verilog HDL中有两类语句块,即:
顺序语句块(begin . . . end):语句块中的语句按给定次序顺序执 行。 并行语句块(fork . . . join):语句块中的语句并行执行。
语句块的标识符是可选的,如果有标识符,寄存器变量 可在语句块内部声明。带标识符的语句块可被引用
1.2 多输入门
内置的多输入门包括: and nand nor or xor xnor 这些逻辑门只有单个输出, 1个或多个输入。门实例语句 的语法如: 第一个端口是输出,其它端口是输入
input 1 input 2
input N
multi_input_gate_type [instance_name] (OutputA, Input1, Input2, ..., Input N);
input A ControlC
三态门
outputA
三态门的真值表
bufif0 数 据 输 入
0
控制信号
0 0 1 Z X 0/z Z 0/z
bufif1 数 据 输 入
0
控制信号
0 Z 1 0 X Z 0/z 0/z
1
X Z
1
X X
Z
Z Z
1/z
X X
1/z
x x
1
X Z
Z
Z Z
1
X X
1/z 1/z
编译预处理
Verilog-HDL语言中有几种特殊命令,编译系统先对这些特殊命令进行 “预处理”,然后将预处理的结果和源程序一起进行通常的编译处理。
这些预处理命令:
以重音符号ˋ开头
行末尾不加分号
常用预处理命令:
`include/`define, `undef/ `timescale/`ifdef, `else, `endif/ `default_nettype`resetall/ `unconnected_drive, `nounconnected_drive `celldefine, `endcelldefine
Z X
0 X X or 0 1 X Z 0 0 1 X X 1 1 1 1 1 X X 1 X X Z X 1 X X
多输入门的真值表(三)
xnor 0
1 X Z
0 1
0 X X
1 0
1 X X
X X
X X X
Z X
X X X xor 0 1 X Z 0 0 1 X X 1 1 0 X X X X X X X Z X X X X
1.6 门的延时
可以使用门时延定义门从任何输入到其输出的信号传 输时延。门时延可以在门自身实例语句中定义。带有 时延定义的门实例语句的语法如下: gate_type [delay] [instance_name] (terminal_list) ; 时延规定了门时延,即从门的任意输入到输出的传输 时延。当没有强调门时延时,缺省的时延值为0。 门时延由三类时延值组成: 上升时延 下降时延 截止时延
1、门级结构描述
a b ci n1 sum n3 n2 co
module addbit (a, b, ci, sum, co); input a, b, ci; output sum, co; wire a, b, ci, sum, co, n1, n2, n3; xor (n1, a, b,); xor (sum, n1, ci); and (n2, a, b); and (n3, n1, ci); or (co, n2, n3); endmodule
e nd7
q
data
iv1
nd2
nd4
iv2
nclock
module flop(data,clock,clear,q,qb); input data,clock,clear; output q,qb;
nand #10 nd1(a,data,clock,clear), nd2(b,ndata,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear); nand #9 nd3(c,a,d), nd7(q,e,qb); not#10 iv1(ndata,data), iv2(nclock,clock); endmodule
门级结构e [instance_name] (term1, term2, ..., termN) ; 注意,instance_name是可选的; gate_type为前面列出的某 种门类型。各term用于表示与门的输入/输出端口相连的线 网或寄存器. 同一门类型的多个实例能够在一个结构形式中定义 gate_type [instance_name1] (term1, term2, ..., termN) , [instance_name2] (term1, term2, ..., termN) , [instance_name3] (term1, term2, ..., termN), [instance_name4] (term1, term2, ..., termN) ;
多输入门的真值表(一)
nand 0
1 X Z
0 1
1 1 1
1 1
0 X X
X 1
X X X
Z 1
X X X and 0 1 X Z 0 0 0 0 0 1 0 1 X X X 0 X X X Z 0 X X X
多输入门的真值表(二)
nor 0
1 X Z
0 1
0 X X
1 0
0 0 0
X X
0 X X
上拉、下拉电阻
pullup, pulldown,这类门设备没有输入只有输出。 上拉电阻将输出置为1。下拉电阻将输出置为0。 门实例的端口表只包含1个输出。例如: pullup PUP (SCL) ; 此上拉电阻实例名为PUP,输出Pwr置为高电平1。
MOS开关
这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设 置合适的控制输入关闭数据流。 pmos ( p类型MOS管)、nmos ( n类型MOS管),rnmos ( r代表电阻)和rpmos 开关有一个输出、一个输入和一个控制输入,例如: rnmos RN1 (ControlBit, ReadyBit, Hold) ; cmos (mos互补)和rcmos (cmos的高阻态版本)开关有一个数据输出,一个 数据输入和两个控制输入。例如: (r)cmos [instance _name] (OutputA, InputB, NControl, PControl);