硬件描述语言简介(ppt 68页)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SEL
DATAA DATAB
OUT0
MUX21
out[3..0]~reg0
PRE
D
Q
ENA CLR
clk
out[3..0]
module lfsr4_1(clk,Q); input clk; output[3:0] Q;
wire[3:0] Q; wire nQ0; assign nQ0 = ~Q[0];
endmodule
//----------------
1. assign 语句 2. 表达式1? 表达式2: 表达式3
s
b
0
y
a
1
y~0
module Mux21 (a,b,s,y); input a,b; input s; output y; wire d,e; assign d = a & (~s); assign e = b & s; assign y = d | e;
(A&B)|(B&C)|(A&C); endmodule
module add_full4(A,B,C,S); input[3:0] A,B; output[3:0] S; output[4:0] C; assign C[0]=0; add_full u1(A[0],B[0],C[0],C[1],S[0]), u2(A[1],B[1],C[1],C[2],S[1]), u3(A[2],B[2],C[2],C[3],S[2]), u4(A[3],B[3],C[3],C[4],S[3]); endmodule
a < b -1 && b!=c || c!=d
(a<b-1)&&(b!=c)||(c!=d)
结构型描述
结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元
Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and 门。
综合产生的结果网表通常是结构级的。用户可以用结构级描述简 单的组合或时序逻辑。
unsized constants 32bit
10=32'd10=32'b1010
1=32'd1=32'b1
当实际数据位数小于定义的位宽时,如果是无符号 数,则在左边补零,如果无符号数最左边是“x”, 则在左边补“x”,如果无符号数左边是“z”,则在 左边补“z”
12'h3x=12'h03x, 12'hzx=12'hzzx
DFF DFF_0(.CLK(clk),.Q(Q[0]),.D(Q[1])); DFF DFF_1(.CLK(clk),.Q(Q[1]),.D(Q[2])); DFF DFF_2(.CLK(clk),.Q(Q[2]),.D(Q[3])); DFF DFF_3(.CLK(clk),.Q(Q[3]),.D(nQ0));
Logical operators逻辑运算符
&&(与)、 ||(或)、 ! (非)
与逻辑优先级别高于或逻辑,但都低于关 系和等式运算符。
results——1(真)、0(假) and x(不确 定值)。
a = b && c; b = a || c;
if ( ! inword ) if ( inword == 0 )
Verilog HDL语言的描述风格,或者说描 述方式,又可分为三类
行为型描述指对行为与功能进行描述,它只 描述行为特征,而没有涉及到用什么样的时 序逻辑电路来实现,因此是一种使用高级语 言的方法,具有很强的通用性和有效性。
数据流型描述指通过assign连续赋值实现组 合逻辑功能的描述。
设计一个自动售货机的逻辑电路。它的投币口每次 只能投入一枚五角或一元的硬币。投入一元五角钱 硬币后机器自动给出一枚饮料;投入两元(两枚一 元)硬币后,在给出饮料的同时找回一枚五角的硬 币。
设计中我们可能需要调用一些已经定义好 的模块,作为我们电路中的单元,
调用这些模块的过程,称为实例化 (instantiation),调用完之后,这些电路中的 模块单元称为实例(Instance)。实例的使 用格式为:
<模块名> <实例名> <端口列表>;
add_full u1(.A(A[0]),.B(B[0]),.C(C[0]),.Carry(C[1]),.S(S[0])), u2(.A(A[1]),.B(B[1]),.C(C[1]),.Carry(C[2]),.S(S[1])), u3(.A(A[2]),.B(B[2]),.C(C[2]),.Carry(C[3]),.S(S[2])), u4(.A(A[3]),.B(B[3]),.C(C[3]),.Carry(C[4]),.S(S[3]));
D
Q
ENA CLR
A[7..0]
OUT[7..0]
8' h01 --
B[7..0]
ADDER
out~[7..0]
SEL DATAA
DATAB
OUT0 8' h00 --
out~[15..8]
SEL DATAA
DATAB
OUT0
MUX21
MUX21
out[7]~reg0
PRE
D
Q
ENA CLR
out[7..0]
符合C语言语法习惯
简单,容易上手,缩短培训时间,如果有数字电子技术 和C语言的基础,稍加学习即可编写能实现的电路。
但也仅仅是语法上的相似而已
并发执行,多条语句可能同时执行,在硬件上, 实现不同功能的电路在同一时刻工作
具有时序的概念,硬件电路输入到输出存在延迟。
语法规则死,纠错仿真功能弱,错误信息不完整, 较C语言更难发现错误
4选1数据选择器实例之一
数的表示方法
整型常量
decimal, hexadecimal, octal or binary format. 两种表达方法
简单的十进制数. 10,9,156. <位宽(可选)> <'进制><0-9 and a to f(hexadecimal)>
attention!
七段数码管译码器及仿真研究
Decoder0
D3
D2
IN[3..0] OUT[15..0]
WideOr10
D1
g
D0
DECODER
WideOr8 f
WideOr6 e
WideOr4 d
b~0 b
a~0 a
c
q1~reg0
q2~reg0
PRE
PRE
d
D
Q
D
Q
q2
clk
ENA
ENA
CLR
结构型描述指描述实体连接的结构方式,它 通常通过实例进行描述,将Verilog已定义的 基元实例嵌入到语言中。
module Mux21 (a,b,s,y); //----------------
input a,b;
input s;
output y;
assign y = (s==0)? a : b; //--------------
第九章 硬件描述语言简介
Verilog HDL
HDL的含义
Hardware Description Language
Verilog HDL与其他HDL比较
Verilog HDL —“告诉我你想要电路做什么,我给你提供能 实现这个功能的硬件电路”
VHDL —和Verilog HDL类似
a代表要进行移位的操作数,n代表要
移几位。这两种移位运算都用0来填补 移出的空位。例如:
start = 1; 设为值0001
//start在初始时刻
result = (start<<2); //移位后, start的值为0100,然后赋给result
clr
out~[3..0]
4' h0 --
ABEL、AHDL —“告诉我你想要什么样的电路,我给你提供 这样的电路”
什么是Verilog HDL
能够对数字逻辑电路的功能和结构进行描述 的一种高级编程语言
PLD/FPGA的设计开发语言 编写程序描述数字电路的功能与结构
描述电路的功能 描述电路的结构 表达具有并行性
下面是MUX的结构级描述,采用Verilog基本单元(门)描述。描 述中含有传输延时。
module mux21(out, a, b, sl); input a, b, sl; output out;
not u1 (nsl, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb); endmodule
endmodule
有限状态机及其仿真研究
控制电路的核心部分 采用 always 和 case 语句. 状态保存在寄存器中,根据寄存器不同的值
(状态)执行不同的操作, case语句用于选 择不同的状态和对应各种状态的输出逻辑。 FSM是在时钟沿的同步控制作用下从一个状 态转换成另一个状态。 采用寄存器型变量 (a variable of reg data type) 赋值。
必须在进制符号前加“'”号,并且“'”号和进制符号间不能存 在空格
进制符号:b或B(二进制),d或D(十进制),h或H(十六进 制),o或O(八进制)
659
// A signed decimal number
'h 837FF // is a hexadecimal number
'b101
CLR
q1
计数器及仿真研究
res et clk
Add0
out~[3..0]
4' h1 --
A[3..0] B[3..0]
OUT[3..0] 4' h0 --
SEL DATAA
DATAB
OUT0
ADDER
MUX21
out[3..0]~reg0
PRE
D
Q
ENA CLR
out[3..0]
clk
data[7..0] load res et
… default: 缺省语句;
endcase
Mux0
s el[1..0]
SEL[1..0]
in3
in2
OUT
out
DATA[3..0]
in1
in0
MUX
module mux4_1(out,in0,in1,in 2,in3,sel);
output out; input in0,in1,in2,in3; input[1:0] sel; reg out;
endmodule
//--------------1 //--------------2
MUX的行为可以描述为:只要信号a或b或s发生变化,如果s为0则选 择a输出;否则选择b输出。
a mux 21 y
b
s
在行为级模型中,逻辑功能描述采用高级语言结构,如@, while,wait,if, case。
在表示长数据时还可以用下划线“_”进行分割 以增加程序的可读性,
16 ‘b 1001_0110_1111_zzzz //is legal syntax
8’b_1110_1101
//is illegal syntax
case (表达式) 选项值1: 语句1; 选项值2: 语句2; 选项值3: 语句3;
//is a 3-bit binary number
'o7460
// is an octal number
4af
// is illegal (hexadecimal format requires 'h)
数字与进制之间可以有空格
5'D 3
数字电路中,x表示不定值,z表示高阻态。可在十 六进制,八进制和二进制中使用x和z,十六进制中 一个x表示有四位都是x,八进制中一个x表示三位都 是x,二进制中则表示一位是x。z用法同理。
out[6]~reg0
PRE
D
Q
ENA CLR
out[5]~reg0
PRE
D
Q
ENA CLR
out[4]~reg0
PRE
D
Q
ENA CLRwk.baidu.com
out[3]~reg0
PRE
D
Q
ENA CLR
out[2]~reg0
PRE
D
Q
ENA CLR
out[1]~reg0
PRE
D
Q
ENA CLR
out[0]~reg0
PRE
clk res et
Add0
A[7..0]
B[7..0]
8' h01 --
+
ADDER
out[7..0]~reg0
PRE
D
Q
ENA CLR
out[7..0]
F3 1DQ
C1
F2 1DQ
C1
F1 1DQ
C1
F0 1DQ
C1
CP
out<=(out>> 1)
a >> n 或 a << n
always 0~0 a
b
00
c
y
1
rega
rega
always 0~0
PRE
D
Q
y
a
ENA
b
CLR
c
module add_full(A,B,C,Carry,S);
input A,B,C; output Carry,S; assign S = A^B^C; assign Carry =
相关文档
最新文档