EDA技术与应用(陈新华)9
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
值集合0,1,x,z 参数。用于定义时延和变量宽度。 数据类型:有两种: 线网类型(net)结构化元器件间的物理连 线。Wire、tri等。 寄存器类型(reg)抽象的数据存储单元。 Reg、integer。
5.5 Verilog HDL代码的基本结构
Verilog HDL的基本设计单元是“模块”。 Module<模块名>(<端口列表>); 端口说明(input,out,inout) 参数定义<可选> 数据类型定义 连续赋值语句(assign) 过程块(initial和always) 行为描述语句 底层模块实例 任务和函数 延时说明块
initial语句 task和function语句分别用来由用户定义 任务和函数 task <任务名>; //任务定义 端口及数据类型声明语句; 其他语句; endtask
5.7 Verilog HDL语句的顺序执行与并行执行
在 “always”模块内,逻辑 按书写的顺序执行。 module serial1(q, a, clk); output q, a; input clk; clk reg q, a; always @(posedge clk) begin q=~q; //阻塞赋值 语句 a=~q; end endmodule
非阻塞性赋值(<=)是在 语句块结束后,块内的非 阻塞性赋值语才完成赋值 操作,进行赋值。 module nonblocking(clk, a,b,c); output c,b; input clk,a; reg c,b; always @(posedge clk) begin b <= a ; c <= b; b; end endmodule
续
“always”模块外的“assign”语句、 实例元件都是同时(即并行)执 行的 ,它们在程序中的先后顺序 对结果并没有影响 。 module parall2(q, a, clk); output q, a; input clk; reg q, a; always @(posedge clk) begin a=~q; end always @(posedge clk) begin q=~q; end endmodule
第5章 硬件描述语言Verilog HDL
本章内容
5.1 Verilog HDL语言简介 语言简介 5.2 Verilog HDL的特点 的特点 5.3 Verilog HDL重要的功能和概念 重要的功能和概念 5.4 Verilog HDL的语法规定与常规要素 的语法规定与常规要素 5.5 Verilog HDL代码基本结构 代码基本结构 5.6 Verilog HDL结构说明语句 结构说明语句 5.7 Verilog HDL的语句顺序与并行执行 的语句顺序与并行执行 5.8 Verilog HDL不同抽象级别的模型 不同抽象级别的模型 5.9 Verilog HDL仿真语句 仿真语句 5.10 数字电路 数字电路Verilog HDL系统设计 系统设计
仿真波形
If条件语句
If条件语句有三种格式: 1)if (表达式) 语句; 2)if (表达式) 语句1; else 语句2; 3)if (表达式1) 语句1; else if (表达式2) 语句2;… else if (表达式n)语句n; else 语句n+1;
case条件语句
语法格式: case(控制表达式) 分支表达式1: 分支表达式2: … 分支表达式n: [default: endcase
5.10常用数字电路的Verilog HDL系统设计
1、组合逻辑门电路设计
加法器 module adder4(COUT, SUM, A, B, CIN); output[3:0] SUM; output COUT; input[3:0] A, B; input CIN; assign {COUT, SUM}=A+B+CIN; endmodule 四位加法器的仿真波形
门级描述
门级描述 module mymux(out,in1,in2,in3,in4,cntrl1,cntrl2); output out; input in1,in2,in3,in4,cntrl1,cntrl2; wire notctrl1,notcntrl2,w,x,y,z; not(notcntrl1,cntrl1); not(notcntrl2,cntrl2); and(w,in1,notcntrl1,notcntrl2); and(x,in2,notcntrl1,cntrl2); and(y,in3,cntrl1,notcntrl2); and(z,in4,cntrl1,cntrl2); or(out,w,x,y,z); endmodule
数据比较器
module COMP(A, B, LG, EQ, SM); input [1:0] A, B; output LG, EQ, SM; assign {LG, EQ, SM} = FUNC_COMP (A, B); function [2:0] FUNC_COMP; input [1:0] A ,B; if(A>B) FUNC_COMP = 3'b100; else if (A<B) FUNC_COMP = 3'b001; else FUNC_COMP = 3'b010; endfunction endmodule
5.8 Verilog HDL模块的种类和描述
Verilog模块分为行为模块和可综合模块。 描述分为行为级描述和门级描述。 行为级描述:就电路需要实现的功能进行描述 module mux4_1(out, in1, in2, in3, in4, cntrl1, cntrl2); output out; input in1, in2, in3, in4, cntrl1, cntrl2; assign out=(in1 & ~cntrl1 & ~cntrl2) | (in2 & ~cntrl1 & cntrl2) | (in3 & cntrl1 & ~cntrl2) | (in4 & cntrl1 & cntrl2) ; endmodule
编码器
module ENC (IN, Y); input [3:0] IN; output [1:0] Y; parameter SW_IN0 = 4'b0001; parameter SW_IN1 = 4'b0010; parameter SW_IN2 = 4'b0100; parameter SW_IN3 = 4'b1000; assign Y= FUNC_ENC (IN); function [1:0] FUNC_ENC; input [3:0] IN; case (IN) SW_IN0: FUNC_ENC = 0; SW_IN1: FUNC_ENC = 1; SW_IN2: FUNC_ENC = 2; SW_IN3: FUNC_ENC = 3; endcase endfunction endmodule
简单、规范,易于开发 具有混合仿真的能力 具有高级语言的结构 具有用户定于原语,创建灵活
5.3 Verilog HDL重要功能和概念
抽象模型
系 系 统 统 级
抽象层模块各层均可以由 Verilog语言完成
算 法 级 RT L级 门 级 开 关 级
Verilog HDL8种行为描述语言
顺序、并行执行 控制过程的启动时间 事件触发 Task结构 Function结构 各种建立表达式的运算符
5.1 Verilog HDL简介
Verilog发展过程: 1985年:Verilog-XL 1989年:Cadence使用Verilog 1990年:成立OVI推广Verilog 1995年:成为IEEE标准 发展趋势:SystemVerilog、Superlog等。
5.2 Verilog特点
算术运算符 移位运算符 关系运算符 等式运算符 * / % + - << >> < <= > >= = = ! = === !== & ~& 缩减、位运算符 ^ ^~ | ~| 逻辑运算符 条件运算符 && || ?:
Verilog HDL门级结构描述
基本门:and、nand、buf、pullup等 用户定义原语 连续赋值语句 assign <驱动强度><#时延值><线网标 识符> = <表达式>
Verilog HDL行为建模语句
过程结构initial、always。所有的过程initial、 always语句都在0时刻开始执行。 时序控制,用于时延。 事件控制 边沿触发:posedge、negedge 电平触发 语句块。顺序语句begin……end 并行语句。fork……join
过程性赋值 只能对寄存器类型的变量赋值。
以上两种描述的逻辑电路
5.9 Verilog HDL仿真语言
仿真的必要 对于完成的模 块,如何在成 本和效率上完 成测试?
Verilog HDL仿真语句的基本任务
信息显示系统任务。用于仿真过程中在 标准输出设备上显示仿真信息。 display、write 仿真监视系统任务 对变量,字符串等进行监视。 如monitor等
标识符。可以使用大小写字母、和下划 线开头,可以包含数字、字母、$符。合 法的标识符:shift_reg_a,bus_index 非法的标识符:34net、a*b_net 系统任务和系统函数。以$开头,提供一 $ 种封装好的行为。常见的有: $display,$finish,$hold等。 编译命令。以“`”反引号开始的标识符 是编译器指令。如`define, `ifdef
仿真波形
阻塞赋值
阻塞性赋值是指立即赋值,在该 语句结束时就完成了赋值操作。 module nblocking(clk,a,b, c); output c,b; input clk,a; reg c,b; always @(posedge clk) begin b=a; c = b; b; end endmodule
5.4 Verilog语法规定与常规要素
Verilog规则与C语言类似,但有区别。 C语言是顺序执行,Verilog语言则可以定 义并行执行。 从根本上讲,Verilog是描述硬件的语言, 而硬件肯定要有并行模块的。
Verilog 语义要素
块语句:initial块、always块 赋值语句:阻塞赋值和非阻塞赋值 空格:就是分隔符。 注释:单行注释//,多行注释/*……*/ 整数和实常数:<位数>’<基数><值>如: 64’hff01、8’b1101_0001,h’83a
例如: module block1(a,b,c,d ); //端口定义 input a,b,c; // I/O说明 output d; // I/O 说明 wire x; assign d = a | x; //功能描述 assign x = ( b & ~ c ); endmodule
Verilog运算符和优先级
2、时序逻辑电路系统设计
JK触发器 module SY_JK_FF(J, K, CLK, Q, QB); input J, K, CLK; output Q, QB; reg Q; always @(posedge CLK) case ({J, K}) 0: Q <= Q; 1: Q <= 0; 2: Q <= 1; 3: Q <= ~Q; endcase assign QB = ~Q; endmodule
语句1; 语句2; 语句n; 语句n+1;]
Casez,将高阻忽略 Casex,将高阻和未定x均忽略不计。 循环语句:forever、repeat、while、for
பைடு நூலகம்
5.6 Verilog HDL的结构说明语句
always说明语句——不断重复执行, 直到仿真结束 module always_demo (counter,tick,clk); output tick; input clk; reg [7:0] counter; reg tick; always @ (posedge clk) begin tick = ~tick; counter = counter + 1; end