版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Verilog HDL,第九章 硬件描述语言简介,HDL的含义,Hardware Description Language,Verilog HDL与其他HDL比较,Verilog HDL“告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路” VHDL和Verilog HDL类似 ABEL、AHDL“告诉我你想要什么样的电路,我给你提供这样的电路”,什么是Verilog HDL 能够对数字逻辑电路的功能和结构进行描述的一种高级编程语言 PLD/FPGA的设计开发语言 编写程序描述数字电路的功能与结构 描述电路的功能 描述电路的结构 表达具有并行性,Verilog HDL特点,符合C语言语
2、法习惯 简单,容易上手,缩短培训时间,如果有数字电子技术和C语言的基础,稍加学习即可编写能实现的电路。 但也仅仅是语法上的相似而已 并发执行,多条语句可能同时执行,在硬件上,实现不同功能的电路在同一时刻工作 具有时序的概念,硬件电路输入到输出存在延迟。 语法规则死,纠错仿真功能弱,错误信息不完整,较C语言更难发现错误,Verilog HDL语言的描述风格,Verilog HDL语言的描述风格,或者说描述方式,又可分为三类 行为型描述指对行为与功能进行描述,它只描述行为特征,而没有涉及到用什么样的时序逻辑电路来实现,因此是一种使用高级语言的方法,具有很强的通用性和有效性。 数据流型描述指通过as
3、sign连续赋值实现组合逻辑功能的描述。 结构型描述指描述实体连接的结构方式,它通常通过实例进行描述,将Verilog已定义的基元实例嵌入到语言中。,2选1数据选择器及仿真研究,module Mux21 (a,b,s,y); /- input a,b; input s; output y; assign y = (s=0)? a : b; /- endmodule/-,1. assign 语句,2. 表达式1? 表达式2: 表达式3,数据流描述,module Mux21 (a,b,s,y); input a,b; input s; output y; wire d,e;/-1 assign d
4、 = a /-2 endmodule,行为级描述,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,在行为级模型中,逻辑功能描述采用高级语言结构,如, while,wait,if, case。,Logical operators逻辑运算符, input a, b, sl; output out; not u1 (ns
5、l, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb); endmodule,4选1数据选择器实例之一,module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input1:0 sel; reg out; always (in0 or in1 or in2 or in3 or sel) case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out=
6、in2; 2b11: out=in3; default: out=x; endcase endmodule,wire 7:0 bus;/8位矢量网表 bus reg 0:40 addr; /41位矢量寄存器addr reg -1:4 b;/6位矢量寄存器b bus0/bus的第0位 bus2:0/bus的三位最低有效位。注意不能用bus0:2,应和定义中保持一致。 addr0:1/addr的两位最高有效位,数的表示方法,整型常量 decimal, hexadecimal, octal or binary format. 两种表达方法 简单的十进制数. 10,9,156. attention!
7、必须在进制符号前加“”号,并且“”号和进制符号间不能存在空格 进制符号: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 4af / is illegal (hexadecimal format requires h),数字与进制之间可以有空格 5D 3 数字电路中,x表示不定值,z表示高阻态。可在十六进制,八进制和二进制中使用x和
8、z,十六进制中一个x表示有四位都是x,八进制中一个x表示三位都是x,二进制中则表示一位是x。z用法同理。 unsized constants 32bit 10=32d10=32b1010 1=32d1=32b1 当实际数据位数小于定义的位宽时,如果是无符号数,则在左边补零,如果无符号数最左边是“x”,则在左边补“x”,如果无符号数左边是“z”,则在左边补“z” 12h3x=12h03x, 12hzx=12hzzx,在表示长数据时还可以用下划线“_”进行分割以增加程序的可读性, 16 b 1001_0110_1111_zzzz /is legal syntax 8b_1110_1101 /is
9、illegal syntax,case语句的语法结构,case (表达式) 选项值1: 语句1; 选项值2: 语句2; 选项值3: 语句3; default: 缺省语句; endcase,4选1数据选择器实例之二,module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input1:0 sel; reg out;,always (in0 or in1 or in2 or in3 or sel) begin if(sel=2b00) out=in0; else if(sel=2b01) out=in1;
10、 else if(sel=2b10) out=in2; else if(sel=2b11) out=in3; else out=2bx; end endmodule,if (表达式1) 语句1; else if (表达式2) 语句2; else if else 语句n;,if (a=0) if (b=0) c= 1; else 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; re
11、g y, rega; always (a or b or c) begin if(a end endmodule,module ex4reg(y, a, b, c); input a, b, c; output y; reg y, rega; always (a or b or c) begin if(a end endmodule,module inccase(a, b, c, d, e); input a, b, c, d; output e; reg e; always (a or b or c or d) case (a,b) 2b11: e=d ; 2b10: e=c ; endca
12、se endmodule,4位加法器电路及仿真研究,module add_full(A,B,C,Carry,S); input A,B,C; output Carry,S; assign S = ABC; assign Carry = (A endmodule,module add_full4(A,B,C,S); input3:0 A,B; output3:0 S; output4:0 C; assign C0=0; add_full u1(A0,B0,C0,C1,S0), u2(A1,B1,C1,C2,S1), u3(A2,B2,C2,C3,S2), u4(A3,B3,C3,C4,S3);
13、endmodule,实例(Instances),例化(instantiation),设计中我们可能需要调用一些已经定义好的模块,作为我们电路中的单元, 调用这些模块的过程,称为实例化(instantiation),调用完之后,这些电路中的模块单元称为实例(Instance)。实例的使用格式为: ;,模块的定义只是说明该模块的功能与接口,它只提供了一个模板,它要在电路中获得实际应用与实现需要被调用(实例化)。 Verilog中不允许嵌套定义模块,即一对module和endmodule之间只能定义一个模块。但一个模块内可以通过实例的方式多次调用其他模块。,add_full u1(.A(A0),.B
14、(B0),.C(C0),.Carry(C1),.S(S0), u2(.A(A1),.B(B1),.C(C1),.Carry(C2),.S(S1), u3(.A(A2),.B(B2),.C(C2),.Carry(C3),.S(S2), u4(.A(A3),.B(B3),.C(C3),.Carry(C4),.S(S3);,module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0); output a,b,c,d,e,f,g; input D3,D2,D1,D0; /输入4 位BCD 码 reg a,b,c,d,e,f,g; /输出驱动7个笔划段 always (D3 or
15、 D2 or D1 or D0) begin case(D3,D2,D1,D0) /用case 语句进行译码 4d0: a,b,c,d,e,f,g=7b1111110; 4d1: a,b,c,d,e,f,g=7b0110000; 4d2: a,b,c,d,e,f,g=7b1101101; 4d3: a,b,c,d,e,f,g=7b1111001; 4d4: a,b,c,d,e,f,g=7b0110011; 4d5: a,b,c,d,e,f,g=7b1011011; 4d6: a,b,c,d,e,f,g=7b1011111; 4d7: a,b,c,d,e,f,g=7b1110000; 4d8:
16、a,b,c,d,e,f,g=7b1111111; 4d9: a,b,c,d,e,f,g=7b1111011; default: a,b,c,d,e,f,g=7bz; endcase end endmodule,七段数码管译码器及仿真研究,D触发器及仿真研究,例9.6.10 module d_ff (q, d, clk); output q; input d, clk; reg q; always (posedge clk) q=d; endmodule,module d_ff (q1,q2, d, clk); output q1,q2; input d, clk; reg q1,q2; alw
17、ays (posedge clk) begin q1=d; q2= q1; end endmodule,例9.6.12 module d_ff (q1,q2, d, clk); output q1,q2; input d, clk; reg q1,q2; always (posedge clk) begin q1=d; /-1 q2= q1; /-2 end endmodule,计数器及仿真研究,例9.6.13 4位加法计数器 module count4(out,reset,clk); output3:0 out; input reset,clk; reg3:0 out; always (po
18、sedge clk) begin if (reset) out=0; /同步复位 else out=out+1; /计数 end endmodule,同步置数同步清零加法计数器,module count(out,data,load,reset,clk); output7:0 out; input7:0 data; input load,clk,reset; reg7:0 out; always (posedge clk) /clk上升沿触发 begin if (!reset) out = 8h00; /同步清0,低电平有效 else if (!load) out = data; /同步预置 e
19、lse out = out + 1; /计数 end endmodule,异步清零计数器,module count2(out,reset,clk); output7:0 out; input clk, reset; reg7:0 out; always (posedge clk or negedge reset) begin if(!reset) out = 0; else out = out + 1; /计数 end endmodule,环扭型计数器,module johnson(clk,clr,out); input clk,clr; output3:0 out; reg3:0 out;
20、always (posedge clk) begin if (clr) out 1); /右移运算 out3= out0; end endmodule,out 1) a n 或 a n a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。例如: start = 1; /start在初始时刻设为值0001 result = (start2); /移位后,start的值为0100,然后赋给result,module johnson(clk,clr,out); input clk,clr; output3:0 out; reg3:0 out; always (posedg
21、e clk or negedge clr) begin if (!clr) out 1); /右移运算 out3= out0; end end endmodule,module lfsr4_1(clk,Q); input clk; output3:0 Q; wire3:0 Q; wire nQ0; assign nQ0 = Q0; DFF DFF_0(.CLK(clk),.Q(Q0),.D(Q1); DFF DFF_1(.CLK(clk),.Q(Q1),.D(Q2); DFF DFF_2(.CLK(clk),.Q(Q2),.D(Q3); DFF DFF_3(.CLK(clk),.Q(Q3),.
22、D(nQ0); endmodule,有限状态机及其仿真研究,控制电路的核心部分 采用 always 和 case 语句. 状态保存在寄存器中,根据寄存器不同的值(状态)执行不同的操作, case语句用于选择不同的状态和对应各种状态的输出逻辑。 FSM是在时钟沿的同步控制作用下从一个状态转换成另一个状态。 采用寄存器型变量 (a variable of reg data type) 赋值。,设计一个自动售货机的逻辑电路。它的投币口每次只能投入一枚五角或一元的硬币。投入一元五角钱硬币后机器自动给出一枚饮料;投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬币。 逻辑抽象 一元 五角 售出
23、一瓶饮料 找钱 one_dollar half_dollar dispense half_out 状态idle: 未投币前初始状态 状态half: 投入五角 状态one: 投入一元(一元或两五角),一元 五角 售出一瓶饮料 找钱 one_dollar half_dollar dispense half_out,AB/YZ,module machine(one_dollar,half_dollar, collect,half_out,dispense,reset,clk); parameter idle=2b00,half=2b01,one =2b10; input one_dollar,half_dollar,reset,clk; output collect,half_out,dispense; reg collect,half_out,dispense; reg2:0 state; always (posedge clk) begin if(reset) begin dispense=0; collect=0; half_o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南郑州市郑东新区鸿雁小学招聘教师1人笔试备考试题及答案解析
- 2026广东东莞市公安局沙田分局第1批警务辅助人员招聘16人笔试备考试题及答案解析
- 2026安徽黄山市人民政府外事办公室招聘1人笔试模拟试题及答案解析
- 京东快递服务产品定位报告
- 联通云服务顾问面试全解:云通信解决方案要点
- 房地产行业市场分析的数据分析师计划
- 基于深度学习的注塑件缺陷X射线智能检测研究与应用
- 雨课堂学堂在线学堂云《管理信息系统(怀化学院)》单元测试考核答案
- 酒店行业运营管理培训及面试要点
- 建筑师职业资格面试要点分析
- 2026中国造纸化学品行业发展趋势与供需前景预测报告
- 单位信息保密制度
- 露天矿山节后复工安全培训
- 2026年新年开工安全第一课:筑牢复工复产安全防线
- 《2025年新湘教版六年级下册小学信息科技备课教案》
- 建筑施工行业2026年春节节后复工复产安全教育培训
- 2026年湖南单招考试题库新版
- 2026年历史学考研真题及答案解析(科目代码:313)
- 2026年鄂尔多斯职业学院单招综合素质考试模拟测试卷附答案解析
- 智能医学应用基础- 课件全套 娄岩 第1-13章 智能医学基础理论 -智能医学的伦理、法律与社会问题
- 拖轮安全意识培训课件
评论
0/150
提交评论