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

下载本文档

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

文档简介

1、电子系统设计电子系统设计第二讲第二讲verilog hdl语言基础语言基础主要内容主要内容l hdl概述概述nhdl发展史发展史n行为描述行为描述 vs. 结构描述结构描述l verilog hdl基本要素基本要素l 基本基本verilog hdl设计设计n组合逻辑电路单元设计范例组合逻辑电路单元设计范例n时序逻辑电路单元设计范例时序逻辑电路单元设计范例l 硬件描述语言设计规范硬件描述语言设计规范l ise使用入门使用入门l 课程内容回顾课程内容回顾设计示例设计示例例:用基本门电路例:用基本门电路/触发器实现下图所示的状态图触发器实现下图所示的状态图例:用通用中规模集成电路实现下图所示的状态图

2、例:用通用中规模集成电路实现下图所示的状态图0123456/0/1/0/0/0/1/0数字电路课程设计流程回顾数字电路课程设计流程回顾l 组合逻辑设计流程组合逻辑设计流程l 时序逻辑设计流程时序逻辑设计流程中小规模集成电路实现设计示例中小规模集成电路实现设计示例ccvcp0q1q2q3qencildcr0d1d2d3d&ccv74161a2a1a001234567en74151zvcc编码器编码器/译码器设计示例译码器设计示例8-3编码器编码器(verilog hdl设计)设计)3-8译码器译码器(电路图设计)(电路图设计)41mux设计示例设计示例41mux(vhdl设计)设计)41

3、mux(电路图设计)(电路图设计)hdl发展史发展史l hdl:hardware description languagel 原始原始hdl:n 如如abel等等n 仅是对电路连接的简单文字描述仅是对电路连接的简单文字描述l 主流主流hdl:n 如如vhdl、verilog hdl等等n 在结构描述能力基础上具备行为描述能力在结构描述能力基础上具备行为描述能力n 可面向设计以外综合、仿真等应用可面向设计以外综合、仿真等应用l 未来未来hdl:n 如如system c等等n 对大型系统设计、模块化设计等支持度更优对大型系统设计、模块化设计等支持度更优abel语言程序段范例语言程序段范例ahdl语

4、言程序段范例语言程序段范例subdesign flip_flop( d, clk : input;q : output;)variable temp : dff;begintemp.d = d;temp.clk = clk;q = temp.q;end;i want a d-flipflopsubdesign flip_flop( d, clk : input;q : output;)variable temp : dff;begintemp.d = d;temp.clk = clk;q = temp.q;end;i want a d-flipflopsubdesign flip_flop(

5、d, clk : input;q : output;)variable temp : dff;begintemp.d = d;temp.clk = clk;q = temp.q;end;i want a d-flipflopvhdl语言程序段范例语言程序段范例verilog hdl语言程序段范例语言程序段范例hdl设计方法设计方法l行为描述行为描述n 由输入由输入/输出响应关系描述输出响应关系描述n a component is described by its input/output responsel结构描述结构描述n 由低等级的元件由低等级的元件/基本单元的连接关系描述基本单元的连接关

6、系描述n a component is described by interconnecting lower-level components/ primitives行为描述设计方法示意行为描述设计方法示意l只有电路的功能性描述,没有结构描述只有电路的功能性描述,没有结构描述l没有具体的硬件意图没有具体的硬件意图l目的是综合与仿真目的是综合与仿真结构描述设计方法示意结构描述设计方法示意l电路的功能性和结构电路的功能性和结构l涉及具体硬件涉及具体硬件l目的是综合目的是综合从从hdl到电路实现到电路实现l编译编译n hdl语言正确性、可综合性检查语言正确性、可综合性检查l综合综合n 形成对应于形成

7、对应于pld器件内部逻辑电路资源的解释器件内部逻辑电路资源的解释,包括布局布线等,包括布局布线等l仿真仿真n 形成针对上述电路解释的性能表现形成针对上述电路解释的性能表现l下载下载n 按照流文件(按照流文件(stream)格式要求植入)格式要求植入pldverilog hdl发展史发展史lverilog hdl语言最初于语言最初于1983年由年由gateway design automation (gda) 公司为其模拟器产公司为其模拟器产品开发的硬件建模语言品开发的硬件建模语言lcadence在在1989年收购年收购gda后,后,verilog hdl语言于语言于1990年正式对外发布年正式

8、对外发布lopen verilog international ( ovi )成立,以促成立,以促进进verilog语言规范的发展语言规范的发展l1993年,年,ovi推出了推出了2.0版本版本lverilog 语言于语言于1995年成为年成为ieee标准,称为标准,称为ieee std 1364-1995,2001年更新了标准年更新了标准verilog hdl与其他与其他hdl的差异的差异l与与abel、ahdl等语言相比等语言相比n上述语言多应用逻辑等式来描述逻辑功能,侧上述语言多应用逻辑等式来描述逻辑功能,侧重于结构描述方法重于结构描述方法nverilog hdl适合算法级、寄存器传输级

9、适合算法级、寄存器传输级(rtl)、门级、版图级等各类设计描述应用门级、版图级等各类设计描述应用l与与vhdl语言相比语言相比n两者都具备良好的行为描述能力两者都具备良好的行为描述能力nverilog hdl在描述硬件单元的结构时更简单易在描述硬件单元的结构时更简单易读,相比较而言,读,相比较而言,vhdl的描述长度是的描述长度是verilog hdl的两倍的两倍verilog hdl与与pld设计设计l pld设计是设计是verilog hdl的一大应用的一大应用l pld设计仅支持设计仅支持verilog hdl的一个子集的一个子集l 本课程后续只学习和介绍本课程后续只学习和介绍pld设计

10、中支持设计中支持的的verilog hdlverilog hdl基本要素基本要素注意点:注意点:l 大小写敏感大小写敏感l 所有关键词须小写所有关键词须小写l 空格用于增加可读性空格用于增加可读性l 分号是语句终结符分号是语句终结符l 单行注释:单行注释:/l 多行注释:多行注释:/* */l 时间规范用于仿真时间规范用于仿真verilog hdl基本要素图基本要素图端口端口l 端口列表端口列表n列出所有端口名称列出所有端口名称l 端口类型端口类型ninput 输入端口输入端口noutput 输出端口输出端口ninout 双向端口双向端口l 端口声明端口声明n ;例:例:module hell

11、o_world(a,b,c,d,e);input a, b, d;output c, e; assign c = a & b; assign e = d;endmodule数据类型数据类型(data types)l常量常量n 参数(参数(parameter) l变量变量n 线网型(线网型(nets type)u wire型最常用型最常用n 寄存器型(寄存器型(register type)u 标量标量u 向量向量u 数组数组变量变量l 线网型线网型 n 用关键词用关键词wire等声明等声明n 相当于硬件电路里的物理相当于硬件电路里的物理连接,特点是输出值紧跟连接,特点是输出值紧跟输入值变

12、化输入值变化例:例:wire7:0 in, out;assign out=in;l 寄存器型寄存器型 n 用用reg或或integer申明申明n 具有保持作用的元件具有保持作用的元件 注:不表示必将综合成物理注:不表示必将综合成物理(硬件)寄存器!(硬件)寄存器!n 在过程语句在过程语句(always, initial)中赋值中赋值n integer是含符号整数型变量是含符号整数型变量*存储器存储器l二维寄存器数组二维寄存器数组l不能是线网型(不能是线网型(net)n例如:例如:reg31:0 mem 0:1023; / 1k 32 reg31:0 instr;instr = mem2;l注意

13、:注意:n不允许对存储器进行双索引操作不允许对存储器进行双索引操作instr = mem27:0 / 非法!非法!常量常量l parameter可用来定义常量可用来定义常量例:例:parameter size=8; reg size-1:0 a, b;l常量的正确使用在高级编程和大型程序设计常量的正确使用在高级编程和大型程序设计中很重要中很重要数字数字 (numbers) (1)lsized, unsized: nsized: 3b010 / 3位二进制数字,值为位二进制数字,值为010nunsized:u 默认为十进制默认为十进制;u 默认为默认为32-bit.l进制进制n十进制十进制 (d

14、 或或 d)n十六进制十六进制 (h 或或 h)n二进制二进制(b 或或 b)n八进制八进制 (o 或或 o)数字数字 (numbers) (2)l负数负数在在前加负号前加负号n例:例: -8d3 l特殊数符特殊数符n_ (下划线下划线):增加可读性:增加可读性nx或或x (未知数未知数)nz或或z (高阻高阻)l若定义的位宽比实际位数长若定义的位宽比实际位数长n如果高位是如果高位是0, x, z,高位分别补,高位分别补0, x, z;n如果高位是如果高位是1,左边补,左边补0.运算符运算符 (operators)l 1. 算术运算符算术运算符(arithmetic)+加加-减减*乘乘/除除%

15、 取模取模l 2. 逻辑运算符逻辑运算符 (logical)&逻辑与逻辑与|逻辑或逻辑或!逻辑非逻辑非运算符运算符 (operators)l 3. 位运算符位运算符 (bitwise)按位取反按位取反&按位与按位与|按位或按位或按位异或按位异或, 按位同或按位同或l 4.关系运算关系运算 (relational)小于小于大于大于=大于或等于大于或等于l 注注: 左移左移右移右移l8. 条件条件(conditional)?:l9. 位拼接位拼接(concatenation) 运算符优先级运算符优先级l 缺省操作符优先级缺省操作符优先级+,-,!,!, (单目操作符)(单目操作符)

16、*,/,%+,- (双目操作符)(双目操作符),=,!=,=,!=&,&,|&|?:l ()可用于调整优先级()可用于调整优先级高优先级高优先级低优先级低优先级行为级建模行为级建模 (behavior modeling)l过程语句过程语句 (initial, always)l块语句块语句 (begin-end, fork-join)l赋值语句赋值语句 (assign, =, =)l条件语句条件语句 (if-else, case, casez, casex)l循环语句循环语句 (for, forever, repeat, while)l编译向导语句编译向导语句(defin

17、e, include, ifdef, else, endif)过程语句过程语句l initial 用于仿真中的用于仿真中的初始化,初始化,initial语句中的语语句中的语句只执行一次句只执行一次n 模板:模板:initial begin 语句语句1; 语句语句2; ; endl always 块内的语句块内的语句是不断重复执行的是不断重复执行的n 模板:模板:always ()begin / 过程赋值过程赋值 / if-else, case 等选择等选择 / while, repeat, for 循环循环 / task, function调用调用end敏感项说明敏感项说明l 门控锁存器门控锁

18、存器module d_latch(d, clk, q); input d, clk; output reg q; always(d, clk) if (clk) q = d;endmodulel d触发器触发器module flipflop(d, clk, q); input d, clk; output reg q; always(posedge clk) q = d;endmodule赋值语句赋值语句l 连续赋值连续赋值(continuous)n assign为连续赋值语句为连续赋值语句,主要对,主要对wire型变量赋型变量赋值值n例:例:2选选1数据选择器数据选择器module mux2

19、1_1(out, a, b, sel);input a, b, sel;output out;assign out=(sel=0)?a:b;endmodulel 过程赋值过程赋值(procedural)n左边的赋值变量必须是左边的赋值变量必须是reg型变量型变量n阻塞阻塞(blocking)b = a;/该语句结束后立刻赋值该语句结束后立刻赋值n非阻塞非阻塞(non-blocking)b = a;/整个过程块结束时才执整个过程块结束时才执行赋值行赋值阻塞赋值阻塞赋值module example1(d, clk, q1, q2) input d, clk; output reg q1, q2;

20、always(posedge clk) begin q1 = d; q2 = q1; endendmodulel always块内的语句按编写的先后次序顺序执行块内的语句按编写的先后次序顺序执行l 若一个变量由阻塞语句赋值,则该新赋的值会被若一个变量由阻塞语句赋值,则该新赋的值会被该块中后面的所有语句使用该块中后面的所有语句使用非阻塞赋值非阻塞赋值module example2(d, clk, q1, q2) input d, clk; output reg q1, q2; always(posedge clk) begin q1 = d; q2 = q1; endendmodulel 非阻塞

21、赋值可以使每条赋值语句的结果直到非阻塞赋值可以使每条赋值语句的结果直到always块的结尾才能看到块的结尾才能看到l 阻塞赋值语句对语句顺序的依赖可能综合成错误阻塞赋值语句对语句顺序的依赖可能综合成错误的电路,建议用非阻塞赋值语句描述时序电路的电路,建议用非阻塞赋值语句描述时序电路选择语句选择语句l if-else(解释条件语句)(解释条件语句)ifelse ifelse ifelsel case(分支语句)(分支语句)case(敏感表达式敏感表达式)值值1: 语句语句1;值值2:语句:语句2;值值n: 语句语句n;default: 语句语句n+1;endcase基本基本verilog hdl

22、设计范例设计范例组合逻辑电路组合逻辑电路/七段码译码器;七段码译码器;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=7b1101101; 4b0011: seg=7b1111001; 4b0100: seg=7b0110011; 4b0101: seg=7b1011011; 4b0110: seg=7b1011111; 4b0111: seg

23、=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; input d; output reg q,qb; always(posedge clk) begin if(!set & reset) begin q=1; qb=0; end else

24、if (set & !reset) begin q=0; qb=1; end else begin q=d; qb=d; end end endmodule 同步置位、复位的同步置位、复位的d触发器触发器 流水灯设计案例流水灯设计案例l 流水灯需求分析流水灯需求分析n通过通过8个单色个单色led实现实现流水灯显示效果流水灯显示效果l 流水灯设计方案流水灯设计方案n用用case语句实现语句实现n用移位寄存器实现用移位寄存器实现n用有限状态机实现用有限状态机实现状态状态led显示要求显示要求idlestate0 state1state2state3state4state5state6sta

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

26、k or 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

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

28、ate, next_state;always (posedge clk or negedge rst)beginif (!rst)state=8b11111111;elsestate=next_state;endalways(state)beginif (state=8b000000000)next_state=8b11111111;elsenext_state=state1;endendmodulequestions:1.如果流水灯效果要求为双向移动,本程序如何修改?2.如果流水灯跳变节奏需要有变化,本程序如何修改?3.本程序原设计本身是否有不足?有限状态机(有限状态机(fsm)设计基础)设

29、计基础lfsm分米勒型分米勒型(mealy)和摩尔型和摩尔型(moore)两种两种,前者的,前者的输出输出取决于机器状态和输入,后者取决于机器状态和输入,后者的输出与输入无关。的输出与输入无关。lfsm的设计方法有两类:一种是将状态的转的设计方法有两类:一种是将状态的转移和状态的操作写在同一个模块中,另一个移和状态的操作写在同一个模块中,另一个是是将状态转移单独写成一个模块将状态转移单独写成一个模块。后者利于。后者利于综合器优化代码、布局布线。综合器优化代码、布局布线。moore型型fsmalways (w, state)begincase(state) / define state circ

30、lea: 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 blockalways (posedge clk or negedge rst)beginif (!rst)state=a;elsestate=next_state;endendmodulea为初始状态;为初

31、始状态;w为输入;为输入;z为输出为输出module simple (clk, rst, w, z);input clk, rst, w;outputz;regz;reg2:1 state, next_state;parameter2:1 a=2b00,b=2b01, c=2b10;moore型型fsm波形图波形图mealy型型fsm/define the next state and output combination circuitsalways (w,state)begin case(state)a: if(w) begin z=0; next_state=b; end else be

32、gin 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=1b1;/define the sequential blockalways (posedge clk or negedge rst)begin if (!rst) s

33、tate=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,state2= 8b11111000,state3= 8b11110000,state4= 8b11100000,state5= 8b110

34、00000,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:beginif (w)next_state=state1;elsenext_state=state0;endstate1:state2:sta

35、te7:default:next_state。ise 14.7 界面界面利用向导,建立一个新项目利用向导,建立一个新项目 (1)点击上图界面的点击上图界面的new project.启动启动项目向导。项目向导。step1:如右图,:如右图,分别指定创建工程分别指定创建工程的路径,工程名和的路径,工程名和顶层文件名。顶层文件名。step2:点击:点击 next按钮按钮,进入页面三,完成器件,进入页面三,完成器件选择。器件的选择是和实选择。器件的选择是和实验平台的硬件相关的,根验平台的硬件相关的,根据我们的据我们的basys2实验开发实验开发板,它使用的是板,它使用的是spartan3e-xc3s1

36、00e-cp132 的器件,找到相应的器件,找到相应的器件,如图所示的器件,如图所示:利用向导,建立一个新项目利用向导,建立一个新项目 (2)step3:后面两步:后面两步分别是对分别是对eda工工具的设定和工程具的设定和工程综述,都不作任综述,都不作任何操作。点击何操作。点击finish完成工程创完成工程创建建利用向导,建立一个新项目利用向导,建立一个新项目 (3)新建一个新建一个verilog hdl文件文件l根据右图,向工根据右图,向工程添加程添加verilog hdl文件。文件。 新建一个新建一个verilog hdl文件文件l如右图,文件类如右图,文件类型选择型选择verilog module,输入文,输入文件名称,选择文件件名称,选择文件保存路径,点击保存路径,点击next。新建一个新建一个verilog hdl文件文件l进入端口定义模进入端口定义模块,可直接点击块,可直接点击next(端口定义(端口定义可以在程序中进行可以在程序中进行描述)。描述)。新建一个新建一个verilog hdl文件文件l进入文件信息总进入文件信息总结页面,点击结页面,点击finish完成完成verilog hdl文件的添加。文

温馨提示

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

评论

0/150

提交评论