- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
整型常量
decimal, hexadecimal, octal or binary format. 两种表达方法
简单的十进制数. 10,9,156. <位宽(可选)> <'进制><0-9 and a to f(hexadecimal)>
attention!
必须在进制符号前加“'”号,并且“'”号和进制符号间不能存 在空格
第九章 硬件描述语言简介
Verilog HDL
HDL的含义
Hardware Description Language
Verilog HDL与其他HDL比较
Verilog HDL —“告诉我你想要电路做什么,我给你提供能 实现这个功能的硬件电路”
VHDL —和Verilog HDL类似
在表示长数据时还可以用下划线“_”进行分割 以增加程序的可读性,
16 ‘b 1001_0110_1111_zzzz //is legal syntax
8’b_1110_1101
//is illegal syntax
case语句的语法结构
case (表达式) 选项值1: 语句1; 选项值2: 语句2; 选项值3: 语句3; …
实例(Instances),例化(instantiation)
设计中我们可能需要调用一些已经定义好 的模块,作为我们电路中的单元,
调用这些模块的过程,称为实例化 (instantiation),调用完之后,这些电路中的 模块单元称为实例(Instance)。实例的使 用格式为:
<模块名> <实例名> <端口列表>;
Verilog HDL特点
符合C语言语法习惯
简单,容易上手,缩短培训时间,如果有数字电子技术 和C语言的基础,稍加学习即可编写能实现的电路。
但也仅仅是语法上的相似而已
并发执行,多条语句可能同时执行,在硬件上, 实现不同功能的电路在同一时刻工作
具有时序的概念,硬件电路输入到输出存在延迟。
reg [0:40] addr; //41位矢量寄存器addr
reg [-1:4] b;
//6位矢量寄存器b
bus[0]
//bus的第0位
bus[2:0]
//bus的三位最低有效位。
注意不能用bus[0:2],应和定义中保持一致。
addr[0:1] //addr的两位最高有效位
数的表示方法
语法规则死,纠错仿真功能弱,错误信息不完整, 较C语言更难发现错误
Verilog HDL语言的描述风格
Verilog HDL语言的描述风格,或者说描 述方式,又可分为三类
行为型描述指对行为与功能进行描述,它只 描述行为特征,而没有涉及到用什么样的时 序逻辑电路来实现,因此是一种使用高级语 言的方法,具有很强的通用性和有效性。
ABEL、AHDL —“告诉我你想要什么样的电路,我给你提供 这样的电路”
什么是Verilog HDL
能够对数字逻辑电路的功能和结构进行描述 的一种高级编程语言
PLD/FPGA的设计开发语言 编写程序描述数字电路的功能与结构
描述电路的功能 描述电路的结构 表达具有并行性
a mux 21 y
b
s
在行为级模型中,逻辑功能描述采用高级语言结构,如@, while,wait,if, case。
Logical operators逻辑运算符
&&(与)、 ||(或)、 ! (非)
与逻辑优先级别高于或逻辑,但都低于关 系和等式运算符。
results——1(真)、0(假) and x(不确 定值)。
c= 0;
begin 语句1; 语句2;
......
语句n;
end
if (a==0) begin
if (b==0)
C=1;
end
else c=0;
缺省项问题
module ex3reg(y, a, b, c); input a, b, c; output y; reg y, rega; always @(a or b or c)
begin if(a&b)
rega=c; else
rega=0; y=rega; end endmodule
//有缺省项情况
always 0~0 a
b
00
c
y
1
rega
module ex4reg(y, a, b, c);
input a, b, c;
output y;
reg y, rega;
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
数据流型描述指通过assign连续赋值实现组 合逻辑功能的描述。
结构型描述指描述实体连接的结构方式,它 通常通过实例进行描述,将Verilog已定义的 基元实例嵌入到语言中。
2选1数据选择器及仿真研究
module Mux21 (a,b,s,y); //----------------
input a,b;
endmodule
//--------------1 //--------------2
&0 1 x z 00000 101xx x0xxx z0xxx
| 0 1 xz 0 0 1 xx 1 1 1 11 x x 1 xx z x 1 xx
~ 01 10 xx zx
^0 1xz 0 0 1xx 1 1 0xx xXxxx z X x xx
default: 缺省语句; endcase
Mux0
s el[1..0]
SEL[1..0]
in3
in2
T
out
DATA[3..0]
in1
in0
MUX
4选1数据选择器实例之二
module
always @(in0 or in1 or in2 or in3 or sel)
mux4_1(out,in0,in1,in begin
^~ 0 1 x z 010xx 101xx xxxxx z x x xx
行为级描述
MUX的行为可以描述为:只要信号a或b或s发生变化,如果s为0则选 择a输出;否则选择b输出。
module mux21 (y, a, b, s); input a, b, s; output y; reg y; always @( s or a or b) if (! s) y = a; else y = b; endmodule
input s;
output y;
assign y = (s==0)? a : b; //--------------
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;
input[1:0] sel; reg out;
out=2'bx; end endmodule
if (表达式1) 语句1; else if (表达式2) 语句2;
else if …
else
语句n;
if (a==0)
if (b==0)
c= 1;
else
进制符号:b或B(二进制),d或D(十进制),h或H(十六进 制),o或O(八进制)
659
// A signed decimal number
'h 837FF // is a hexadecimal number
'b101
//is a 3-bit binary number
'o7460
// is an octal number
4位加法器电路及仿真研究
module add_full(A,B,C,Carry,S);
input A,B,C; output Carry,S; assign S = A^B^C; assign Carry =
(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
4af
// is illegal (hexadecimal format requires 'h)
数字与进制之间可以有空格
5'D 3
数字电路中,x表示不定值,z表示高阻态。可在十 六进制,八进制和二进制中使用x和z,十六进制中 一个x表示有四位都是x,八进制中一个x表示三位都 是x,二进制中则表示一位是x。z用法同理。