第三章_常用Verilog语法之一

  • 格式:ppt
  • 大小:258.50 KB
  • 文档页数:56

下载文档原格式

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

举例说明:
2014-4-25
32
参数值的改写(方法之一)
举例说明:
module mod ( out, ina, inb); … parameter cycle = 8, real_constant=2.039, file = ―/user1/jmdong/design/mem_file.dat‖; … endmodule module test; … mod mk(out,ina,inb); defparam mk.cycle=6, mk.file=―../my_mem.dat‖; … endmodule
• 模块的端口声明了模块的输入输出端口
module 模块名(端口1,端口2,端口 3,…); 模块的端口表示的是模块的输入输出口 名,与别的模块联系端口的标识。 模块引用的问题
2014-4-25 9
模块调用(引用)形式
模块调用的基本形式为: • 模块名 调用名 (端口名 表项)
• • 由于描述的是具体的硬件 逻辑,每个模块都表示一 个具有特定功能的电路块。 因此每当它被其它模块调 用时,该模块内部被调用 的电路块就被复制一次。 如果在当前模块中多次调 用同一个模块,则需要用 不同的调用名。 Verilog HDL的模块调用 和C语言的函数调用相似, 也存在形参和实参的结合 问题。
编写Verilog HDL模块的练习
• 请在下面的空格中填入适当的符 号 • 使其成为右图的Verilog 模块 : • module block1(a, b, —, —, — ); • input —, —, —; • —— d, — ; • assign d = a | ( b & ~c) ; • assign e = ( b & ~c ); • ______
4
3.1 模块的结构
• Verilog 模块的结构由在module和endmodule • 关键词之间的四个主要部分组成: • - 端口信息: module block1(a, b, c, d ); • - 输入/输出说明 : input a, b, c ; • output d ; • - 内部信号: wire x; • - 功能定义: assign d = a | x ; • assign x = ( b & ~c ); 2014-4-25 • endmodule 5
– 各个always块之间是并发关系
2014-4-25
20
要点小结
• Verilog模块中所有过程块、连续赋值语 句、实例引用都是并行的; • 表示一种通过变量名互相连接的关系; • 同一模块中这三者出线的先后顺序没有 关系; • 只有assign和实例引用语句可以独立于过 程块出线在模块的功能定义部分。
2014-4-25 28
参数化设计
• 参数化设计是电路设计的重要概念之一; • 参数化功能块只要在映射过程中赋予不 同的参数,就可以得到不同的设计; • 参数化设计在IP产业中占有重要的位置; • 参数属性由其代表的参数属性决定
2014-4-25
29
参数传递举例
module decode(A,F); parameter width=1, polarity=1; endmodule module top; decode #(4,0) D1(A4,F16); decode #(5) D2(A5,F32); endmodule
2014-4-25 11
模块调用(引用)方式
• 模块调用采用位置关联调用方式,只需按序列出实例 的端口名。模块实例语句如下: ha h1(P,Q,S,C); 在本语句中,ha是模块名,h1 是实例名称,并且端 口按序关联。 • 模块调用采用端口名关联调用方式,则无需按序排列 端口名,但实例的端口信号和被调用模块的端口信号 必须一一列出。模块实例语句如下: ha h2(.in2(C),.in1(S),.out1(P),.out2(Q),) 由于端口之间的对应关系十分清楚,因此端口名的排 列顺序可随意改变。
2014-4-25 12
模块端口定义
• 声明输入、输出或是双向 • 声明数据类型(wire or reg)default: wire • 输入和双向不能声明为reg型 • 测试模块不需要端口定义
2014-4-25
13
3.1.2 模块内容
• I/O说明 • 内部信号声明 • 功能定义
2014-4-25
a b
d e
c
2014-4-25
7
• “与或非”门电路 module AOI(A,B,C,D,F); input A,B,C,D; output F; wire A,B,C,D,F; assign F= ~((A&B)|(C&D)); endmodule
2014-4-25 8
3.1.1 模块的端口定义
2014-4-25 21
内容提要
• 3.1 模块结构 • 3.2 数据类型
2014-4-25
22
主要的数据类型
Verilog 有三种主要的数据类型:
Nets 表示器件之间的物理连接, 称为网络连接类型 Register 表示抽象的储存单元,称为寄存器/变量类型 Parameter 表示运行时的常数,称为参数类型
• 寄存器类型:抽象的数据存储单元
– 只能在always和initial语句中被赋值,有可 能被综合成寄存器
14
I/O说明的格式(1)
• 输入口:
– input[信号位宽-1,0] 端口名1; – input[信号位宽-1,0] 端口名2; …… – input[信号位宽-1,0] 端口名i;
• 输出口
– output[信号位宽-1,0] 端口名1; – output[信号位宽-1,0] 端口名2; …… – output[信号位宽-1,0] 端口名j;
2014-4-25
16
内部信号说明
• 对端口信号、节点信号必须进行数据类 型的定义 • 默认定义: wire类型 reg cout; reg[3:0] out; wire A,B,C,D;
2014-4-25 17
功能定义
• 在Verilog 模块中有三种方法可以生成逻辑电路: - 用 assign 语句: assign cs = ( a0 & ~a1 & ~a2 ) ; - 用 元件的实例调用: and2 and_inst ( q, a, b); - 用 always 块: always @ (posedge clk or posedge clr) begin if (clr) q<= 0; else if (en) q<= d; 2014-4-25 18 end
– – – – – – 二进制整数 b或B 十进制整数 d或D 十六进制整数 h或H 八进制整数 o或O 8‘b10100011 8’haa
25
2014-4-25
3.2.1 常量
• • • • • x和 z X:不定值 Z:高阻值 4’b10x0 8’h4z
2014-4-25
26
3.2.1 常量
a b
d e
c
2014-4-25
6
编写Verilog HDL模块的练习
• 请在下面的空格中填入适当的符号 • 使其成为右图的Verilog 模块 : • module block1(a, b, c , d, e ); • input a, b, c; • output d, e ; • assign d = a | ( b & ~c) ; • assign e = ( b & ~c ); • endmodule
• 负数
– -:放在数字定义表达式的最前面 – -8’d5
• 下画线
– 分割数的表达
2014-4-25
27
3.2.1 常量
• 参数parameter parameter 参数名1=表达式,参数名2=表达式; 表达式必须是常数表达式,只能包含数字或参数 parameter byte_size=8, byte_msb=byte_size-1;
2014-4-25 30
参数要点
常用参数来声明运行时的常数。 可用字符串表示的任何地方,都可以 用定义的参数来代替。 参数是本地的,其定义只在本模块 内有效。
2014-4-25
31
举例
module md1(out,in1,in2); ….. parameter cycle=20, prop_del=3, setup=cycle/2-prop_del, p1=8, x_word=16’bx, file = ―/user1/jmdong/design/mem_file.dat‖; wire [p1:0] w1; //用参数来说明wire 的位宽 …. initial begin $open(file); ……. #20000 display(―%s‖,file); $stop end …. endmodule
2014-4-25
34
3.2.2 变量
• 硬件描述语言中,变量的数据类型用来 表示数字电路中的物理连线、数据存储 和传输单元等物理量。
2014-4-25
35
3.2.2 数据类型
• 线网类型:表示结构化元件间的物理连 线,综合后一般为连线节点
– 网络(线网)数据类型表示结构实体之间的 物理连接 – 不能存储值,必须受到驱动值assign的驱动
• 输入输出口
– inout[信号位宽-1,0] 端口名1; – inout[信号位宽-1,0] 端口名2; …… – inout[信号位宽-1,0] 端口名k; 2014-4-25
15
I/O说明的格式(2)
• 可以在端口声明语句中同时进行端口类 型说明
– module module_name(input port1, input port2, …output port1, output port2…);
第三章 常用Verilog语法(一)
周晓波 北京交通大学电子信息学院 xbzhou@bjtu.edu.cn 51683636
2014-4-25 1
内容提要
• 3.1 模块结构 • 3.2 数据类型
2014-4-25
2
3.1 模块结构
Verilog 的基本设计单元是“模块” (block) 。一个模 块是由两部分组成的:一)描述接口;二)描述逻 辑功能,即定义输入是如何影响输出的。下面举例 说明:
2014-4-25 33
参数值的改写(方法之二)
举例说明:
module mod ( out, ina, inb); … parameter cycle = 8, real_constant=2.039, file = ―/user1/jmdong/design/mem_file.dat‖; … endmodule module test; … mod # (5, 3.20, ―../my_mem.dat‖) mk(out,ina,inb); … endmodule
module block (a,b,c,d); input a,b; output c,d; assign c= a | b ; assign d= a & b; endmodule a c
b
d
2014-4-25
3
3.1 模块结构
• • • • 端口定义 I/O说明 内部信号声明 功能定义
2014-4-25
10
2014-4-25
模块调用(引用)方式
• 模块的调用方式可大致分为两种:位置关联 调用方式、端口名关联调用方式。 【例】模块调用的例子。 module ha (out1,out2,in1,in2); input in1,in2; output out1,out2; …... endmodule
功能定义
• assign: 描述组合逻辑最常用的方法之一
• always: 组合逻辑 时序逻辑
• “<=“ 一种赋值
2014-4-25
19
并发和顺序执行
• 并发: Verilog模块中各子模块是并发执行
– 过程块:always、 initial – 元件例化 – assign
• 顺序: always模块内部
2014-4-25
23
Verilog 的四种逻辑值
buf
0
buf buf
0、低、伪、逻辑低、地、VSS、负插入 1、高、真、逻辑高、电源、VDD、正插入
1
X
bufif1
X、不确定:逻辑冲突无法确定其逻辑值
Z
2014-4-25
HiZ、高阻抗、三态、无驱动源
24Baidu Nhomakorabea
0
3.2.1 常量
• 值不改变的量 • 数字 • 整数