电子系统设计Verilog语言基础课件_第1页
电子系统设计Verilog语言基础课件_第2页
电子系统设计Verilog语言基础课件_第3页
电子系统设计Verilog语言基础课件_第4页
电子系统设计Verilog语言基础课件_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子系统设计第二讲Verilog HDL语言基础主要内容HDL概述HDL发展史行为描述 vs. 结构描述Verilog HDL基本要素基本Verilog HDL设计组合逻辑电路单元设计范例时序逻辑电路单元设计范例硬件描述语言设计规范ISE使用入门课程内容回顾设计示例例:用基本门电路/触发器实现下图所示的状态图例:用通用中规模集成电路实现下图所示的状态图0123456/0/1/0/0/0/1/0数字电路课程设计流程回顾组合逻辑设计流程时序逻辑设计流程中小规模集成电路实现设计示例&74161A2A1A001234567EN74151ZVCC编码器/译码器设计示例8-3编码器(Verilog HDL

2、设计)3-8译码器(电路图设计)41MUX设计示例41MUX(VHDL设计)41MUX(电路图设计)HDL发展史HDL:Hardware Description Language原始HDL: 如ABEL等 仅是对电路连接的简单文字描述主流HDL: 如VHDL、Verilog HDL等 在结构描述能力基础上具备行为描述能力 可面向设计以外综合、仿真等应用未来HDL: 如System C等 对大型系统设计、模块化设计等支持度更优ABEL语言程序段范例AHDL语言程序段范例VHDL语言程序段范例Verilog HDL语言程序段范例HDL设计方法行为描述 由输入/输出响应关系描述 A componen

3、t is described by its input/output response结构描述 由低等级的元件/基本单元的连接关系描述 A component is described by interconnecting lower-level components/ primitives行为描述设计方法示意只有电路的功能性描述,没有结构描述没有具体的硬件意图目的是综合与仿真结构描述设计方法示意电路的功能性和结构涉及具体硬件目的是综合从HDL到电路实现编译 HDL语言正确性、可综合性检查综合 形成对应于PLD器件内部逻辑电路资源的解释,包括布局布线等仿真 形成针对上述电路解释的性能表现下载

4、按照流文件(Stream)格式要求植入PLDVerilog HDL发展史Verilog HDL语言最初于1983年由Gateway Design Automation (GDA) 公司为其模拟器产品开发的硬件建模语言Cadence在1989年收购GDA后,Verilog HDL语言于1990年正式对外发布Open Verilog International ( OVI )成立,以促进Verilog语言规范的发展1993年,OVI推出了2.0版本Verilog 语言于2019年成为IEEE标准,称为IEEE Std 1364-2019,2019年更新了标准Verilog HDL与其他HDL的差异

5、与ABEL、AHDL等语言相比上述语言多应用逻辑等式来描述逻辑功能,侧重于结构描述方法Verilog HDL适合算法级、寄存器传输级(RTL)、门级、版图级等各类设计描述应用与VHDL语言相比两者都具备良好的行为描述能力Verilog HDL在描述硬件单元的结构时更简单易读,相比较而言,VHDL的描述长度是Verilog HDL的两倍Verilog HDL与PLD设计 PLD设计是Verilog HDL的一大应用 PLD设计仅支持Verilog HDL的一个子集 本课程后续只学习和介绍PLD设计中支持的Verilog HDLVerilog HDL基本要素注意点:大小写敏感所有关键词须小写空格用

6、于增加可读性分号是语句终结符单行注释:/多行注释:/* */时间规范用于仿真Verilog HDL基本要素图端口端口列表列出所有端口名称端口类型input 输入端口output 输出端口inout 双向端口端口声明 ;例:module hello_world(a,b,c,d,e);input a, b, d;output c, e; assign c = a & b; assign e = d;endmodule数据类型(Data Types)常量 参数(parameter) 变量 线网型(nets type) wire型最常用 寄存器型(register type) 标量 向量 数组变量线网

7、型 用关键词wire等声明相当于硬件电路里的物理连接,特点是输出值紧跟输入值变化例:wire7:0 in, out;assign out=in;寄存器型 用reg或integer申明具有保持作用的元件 注:不表示必将综合成物理(硬件)寄存器!在过程语句(always, initial)中赋值integer是含符号整数型变量*存储器二维寄存器数组不能是线网型(Net)例如:reg31:0 mem 0:1023; / 1k 32 reg31:0 instr;instr = mem2;注意:不允许对存储器进行双索引操作instr = mem27:0 / 非法!常量 parameter可用来定义常量例

8、:parameter size=8; reg size-1:0 a, b;常量的正确使用在高级编程和大型程序设计中很重要数字 (Numbers) (1)sized, unsized: sized: 3b010 / 3位二进制数字,值为010unsized: 默认为十进制; 默认为32-bit.进制十进制 (d 或 D)十六进制 (h 或 H)二进制(b 或 B)八进制 (o 或 O)数字 (Numbers) (2)负数在前加负号例: -8d3 特殊数符_ (下划线):增加可读性x或X (未知数)z或Z (高阻)若定义的位宽比实际位数长如果高位是0, x, z,高位分别补0, x, z;如果高位

9、是1,左边补0.运算符 (Operators)1. 算术运算符(Arithmetic)+加-减*乘/除% 取模2. 逻辑运算符 (Logical)&逻辑与|逻辑或!逻辑非运算符 (Operators)3. 位运算符 (Bitwise)按位取反&按位与|按位或按位异或, 按位同或4.关系运算 (Relational)小于大于=大于或等于注: 左移右移8. 条件(Conditional)?:9. 位拼接(Concatenation) 运算符优先级缺省操作符优先级+,-,!, (单目操作符)*,/,%+,- (双目操作符),=,!=,=,!=&,&,|&|?:()可用于调整优先级高优先级低优先级行为

10、级建模 (Behavior Modeling)过程语句 (initial, always)块语句 (begin-end, fork-join)赋值语句 (assign, =, =)条件语句 (if-else, case, casez, casex)循环语句 (for, forever, repeat, while)编译向导语句(define, include, ifdef, else, endif)过程语句initial 用于仿真中的初始化,initial语句中的语句只执行一次模板:initial begin 语句1; 语句2; ; endalways 块内的语句是不断重复执行的模板:alwa

11、ys ()begin / 过程赋值 / if-else, case 等选择 / while, repeat, for 循环 / task, function调用end敏感项说明门控锁存器module D_latch(D, Clk, Q); input D, Clk; output reg Q; always(D, Clk) if (Clk) Q = D;endmoduleD触发器module flipflop(D, Clk, Q); input D, Clk; output reg Q; always(posedge Clk) Q = D;endmodule赋值语句连续赋值(Continuou

12、s) assign为连续赋值语句,主要对wire型变量赋值例:2选1数据选择器module MUX21_1(out, a, b, sel);input a, b, sel;output out;assign out=(sel=0)?a:b;endmodule过程赋值(Procedural)左边的赋值变量必须是reg型变量阻塞(blocking)b = a;/该语句结束后立刻赋值非阻塞(non-blocking)b = a;/整个过程块结束时才执行赋值阻塞赋值module example1(D, Clk, Q1, Q2) input D, Clk; output reg Q1, Q2; alwa

13、ys(posedge Clk) begin Q1 = D; Q2 = Q1; endendmodulealways块内的语句按编写的先后次序顺序执行若一个变量由阻塞语句赋值,则该新赋的值会被该块中后面的所有语句使用非阻塞赋值module example2(D, Clk, Q1, Q2) input D, Clk; output reg Q1, Q2; always(posedge Clk) begin Q1 = D; Q2 = Q1; endendmodule非阻塞赋值可以使每条赋值语句的结果直到always块的结尾才能看到阻塞赋值语句对语句顺序的依赖可能综合成错误的电路,建议用非阻塞赋值语句

14、描述时序电路选择语句if-else(解释条件语句)ifelse ifelse ifelsecase(分支语句)case(敏感表达式)值1: 语句1;值2:语句2;值n: 语句n;default: 语句n+1;endcase基本Verilog HDL设计范例组合逻辑电路/七段码译码器;module converter(DB,SEG); input3:0 DB; output6:0 SEG; reg6:0 SEG; always (DB) begin case(DB) 4b0000: SEG=7b1111110; 4b0001: SEG=7b0110000; 4b0010: SEG=7b11011

15、01; 4b0011: SEG=7b1111001; 4b0100: SEG=7b0110011; 4b0101: SEG=7b1011011; 4b0110: SEG=7b1011111; 4b0111: SEG=7b1110000; 4b1000: SEG=7b1111111; 4b1001: SEG=7b1111011; default: SEG=7b0000000; endcase end endmodule 基本Verilog HDL设计范例时序逻辑电路module sync_rsddf(clk,reset,set,d,q,qb); input clk,reset,set; inpu

16、t d; output reg q,qb; always(posedge clk) begin if(!set & reset) begin q=1; qb=0; end else if (set & !reset) begin q=0; qb=1; end else begin q=d; qb=d; end end endmodule 同步置位、复位的D触发器 流水灯设计案例流水灯需求分析通过8个单色LED实现流水灯显示效果流水灯设计方案用CASE语句实现用移位寄存器实现用有限状态机实现状态LED显示要求Idlestate0 state1state2state3state4state5sta

17、te6state7流水灯设计之CASE语句实现module lamp (rst, clk, state);inputrst, clk;output7:0state;reg7:0state, next_state;parameterIdle = 8b11111111,state0=8b11111110,state1=8b11111100,state2=8b11111000,state3=8b11110000,state4=8b11100000,state5=8b11000000,state6=8b10000000,state7=8b00000000;always (posedge clk or

18、negedge rst)beginif (!rst)state=Idle;elsestate=next_state;endalways (state)begincase(state)Idle:next_state=state0;state0:next_state=state1;state1:next_state=state2;state2:next_state=state3;state3:next_state=state4;state4:next_state=state5;state5:next_state=state6;state6:next_state=state7;state7:next

19、_state=Idle;default:next_state=Idle;endcaseendendmoduleQuestion:如果流水灯效果要求为双向移动,本程序如何修改? 流水灯波形注1:CPLD实验板上的LED当电平为0时亮,为1时灭;注2:实际的时钟需要适当降低到人眼可以识别的变化范围内。流水灯设计之移位寄存器实现module lamp (rst, clk, state);inputrst, clk;output7:0state;reg7:0state, next_state;always (posedge clk or negedge rst)beginif (!rst)state=

20、8b11111111;elsestate=next_state;endalways(state)beginif (state=8b000000000)next_state=8b11111111;elsenext_state=state1;endendmoduleQuestions:如果流水灯效果要求为双向移动,本程序如何修改?如果流水灯跳变节奏需要有变化,本程序如何修改?本程序原设计本身是否有不足?有限状态机(FSM)设计基础FSM分米勒型(Mealy)和摩尔型(Moore)两种,前者的输出取决于机器状态和输入,后者的输出与输入无关。FSM的设计方法有两类:一种是将状态的转移和状态的操作写在同

21、一个模块中,另一个是将状态转移单独写成一个模块。后者利于综合器优化代码、布局布线。Moore型FSMalways (w, state)begincase(state) / Define state circleA: if(w)next_state=B;elsenext_state=A;B:if(w)next_state=C;elsenext_state=A;C:if(w)next_state=C;elsenext_state=A;default:next_state=A;endcasez=(state=C);/Define outputend/ Define the sequential bl

22、ockalways (posedge clk or negedge rst)beginif (!rst)state=A;elsestate=next_state;endendmoduleA为初始状态;w为输入;z为输出module simple (clk, rst, w, z);input clk, rst, w;outputz;regz;reg2:1state, next_state;parameter2:1 A=2b00,B=2b01, C=2b10;Moore型FSM波形图Mealy型FSM/Define the next state and output combination cir

23、cuitsalways (w,state)begin case(state)A: if(w) begin z=0; next_state=B; end else begin z=0; next_state=A; endB: if(w) begin z=1; next_state=B; end else begin z=0; next_state=A; endendcaseendendmodulemodule mealy (clk, rst, w, z);inputclk, rst, w;outputz;regz;regstate, next_state;parameter A=1b0, B=1

24、b1;/Define the sequential blockalways (posedge clk or negedge rst)begin if (!rst) state=A; else state=next_state;endMealy型FSM波形图流水灯设计之有限状态机实现module lamp (rst, clk, w, state);inputrst, clk, w;output7:0 state;reg7:0state, next_state;parameter Idle= 8b11111111,state0= 8b11111110,state1= 8b11111100,stat

25、e2= 8b11111000,state3= 8b11110000,state4= 8b11100000,state5= 8b11000000,state6= 8b10000000,state7= 8b00000000;always (posedge clk or negedge rst)beginif (!rst)state=Idle;elsestate=next_state;endalways (state or w)begincase (state)Idle:beginif (w)next_state=state0;else next_state=Idle;endstate0:begin

26、if (w)next_state=state1;elsenext_state=state0;endstate1:state2:state7:default:next_state。ISE 14.7 界面利用向导,建立一个新项目 (1)点击上图界面的new project.启动项目向导。Step1:如右图,分别指定创建工程的路径,工程名和顶层文件名。Step2:点击 Next按钮,进入页面三,完成器件选择。器件的选择是和实验平台的硬件相关的,根据我们的Basys2实验开发板,它使用的是Spartan3E-XC3S100E-CP132 的器件,找到相应的器件,如图所示:利用向导,建立一个新项目 (2)Step3:后面两步分别是对EDA工具的设定和工程综述,都不作任何操作。点击Finish完成工程创建利用向导,建立一个新项目 (3)新建一个Verilog HDL文件根据右图,向工程添加Verilog HDL文件。 新建一个Verilog HDL文件如右图,文件类型选择Verilog Module,输入文件名称,选择文件保存路径,点击Next。新建一个Verilog HDL文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论