ImageVerifierCode 换一换
格式:DOCX , 页数:116 ,大小:52.23KB ,
资源ID:7950820      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7950820.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(verilog编程151例.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

verilog编程151例.docx

1、verilog编程151例目录【例 3.1】4 位全加器 5【例 3.2】4 位计数器 5【例 3.3】4 位全加器的仿真程序 5【例 3.4】4 位计数器的仿真程序 6【例 3.5】“与-或-非”门电路 6【例 5.1】用case 语句描述的4 选1 数据选择器 6【例 5.2】同步置数、同步清零的计数器 7【例 5.3】用always 过程语句描述的简单算术逻辑单元 7【例 5.4】用initial 过程语句对测试变量A、B、C 赋值 8【例 5.5】用begin-end 串行块产生信号波形 8【例 5.6】用fork-join 并行块产生信号波形 8【例 5.7】持续赋值方式定义的2 选

2、1 多路选择器 9【例 5.8】阻塞赋值方式定义的2 选1 多路选择器 9【例 5.9】非阻塞赋值 9【例 5.10】阻塞赋值 9【例 5.11】模为60 的BCD 码加法计数器 10【例 5.12】BCD 码七段数码管显示译码器 10【例 5.13】用casez 描述的数据选择器 11【例 5.14】隐含锁存器举例 11【例 5.15】用for 语句描述的七人投票表决器 11【例 5.16】用for 语句实现2 个8 位数相乘 12【例 5.17】用repeat 实现8 位二进制数的乘法 12【例 5.18】同一循环的不同实现方式 13【例 5.19】使用了include 语句的16 位加法

3、器 13【例 5.20】条件编译举例 14【例 6.1】加法计数器中的进程 14【例 6.2】任务举例 14【例 6.3】测试程序 15【例 6.4】函数 16【例 6.5】用函数和case 语句描述的编码器(不含优先顺序) 16【例 6.6】阶乘运算函数 16【例 6.7】测试程序 17【例 6.8】顺序执行模块1 17【例 6.9】顺序执行模块2 18【例 6.10】并行执行模块1 18【例 6.11】并行执行模块2 18【例 7.1】调用门元件实现的4 选1 MUX 19【例 7.2】用case 语句描述的4 选1 MUX 19【例 7.3】行为描述方式实现的4 位计数器 19【例 7.

4、4】数据流方式描述的4 选1 MUX 19【例 7.5】用条件运算符描述的4 选1 MUX 20【例 7.6】门级结构描述的2 选1MUX 20【例 7.7】行为描述的2 选1MUX 20【例 7.8】数据流描述的2 选1MUX 20【例 7.9】调用门元件实现的1 位半加器 20【例 7.10】数据流方式描述的1 位半加器 21【例 7.11】采用行为描述的1 位半加器 21【例 7.12】采用行为描述的1 位半加器 21【例 7.13】调用门元件实现的1 位全加器 21【例 7.14】数据流描述的1 位全加器 22【例 7.15】1 位全加器 22【例 7.16】行为描述的1 位全加器 2

5、2【例 7.17】混合描述的1 位全加器 22【例 7.18】结构描述的4 位级连全加器 23【例 7.19】数据流描述的4 位全加器 23【例 7.20】行为描述的4 位全加器 23【例 8.1】$time 与$realtime 的区别 23【例 8.2】$random 函数的使用 24【例 8.3】1 位全加器进位输出UDP 元件 24【例 8.4】包含x 态输入的1 位全加器进位输出UDP 元件 24【例 8.5】用简缩符“?”表述的1 位全加器进位输出UDP 元件 25【例 8.6】3 选1 多路选择器UDP 元件 25【例 8.7】电平敏感的1 位数据锁存器UDP 元件 26【例 8

6、.8】上升沿触发的D 触发器UDP 元件 26【例 8.9】带异步置1 和异步清零的上升沿触发的D 触发器UDP 元件 27【例 8.12】延迟定义块举例 27【例 8.13】激励波形的描述 27【例 8.15】用always 过程块产生两个时钟信号 28【例 8.17】存储器在仿真程序中的应用 28【例 8.18】8 位乘法器的仿真程序 28【例 8.19】8 位加法器的仿真程序 29【例 8.20】2 选1 多路选择器的仿真 30【例 8.21】8 位计数器的仿真 30【例 9.1】基本门电路的几种描述方法 31【例 9.2】用bufif1 关键字描述的三态门 32【例 9.3】用assi

7、gn 语句描述的三态门 32【例 9.4】三态双向驱动器 32【例 9.5】三态双向驱动器 32【例 9.6】3-8 译码器 33【例 9.7】8-3 优先编码器 33【例 9.8】用函数定义的8-3 优先编码器 33【例 9.9】七段数码管译码器 34【例 9.10】奇偶校验位产生器 34【例 9.11】用if-else 语句描述的4 选1 MUX 35【例 9.12】用case 语句描述的4 选1 MUX 35【例 9.13】用组合电路实现的ROM 35【例 9.14】基本D 触发器 36【例 9.15】带异步清0、异步置1 的D 触发器 36【例 9.16】带同步清0、同步置1 的D 触

8、发器 37【例 9.17】带异步清0、异步置1 的JK 触发器 37【例 9.18】电平敏感的1 位数据锁存器 38【例 9.19】带置位和复位端的1 位数据锁存器 38【例 9.20】8 位数据锁存器 38【例 9.21】8 位数据寄存器 38【例 9.22】8 位移位寄存器 38【例 9.23】可变模加法/减法计数器 39【例 9.24】4 位Johnson 计数器(异步复位) 39【例 9.25】2568 RAM 模块 39【例 9.26】25616 RAM 块 40【例 9.27】4 位串并转换器 40【例 9.28】用函数实现简单的处理器 40【例 9.29】微处理器的测试代码 41

9、【例 9.30】乘累加器(MAC)代码 42【例 9.31】乘累加器的测试代码 43【例 10.1】非流水线方式8 位全加器 43【例 10.2】4 级流水方式的8 位全加器 44【例 10.3】两个加法器和一个选择器的实现方式 45【例 10.4】两个选择器和一个加法器的实现方式 45【例 10.5】状态机设计的例子 45【例 10.6】自动转换量程频率计控制器 46【例 10.7】8 位全加器 48【例 10.8】8 位寄存器 48【例 10.9】累加器顶层连接文本描述 49【例 10.10】用include 描述的累加器 49【例 10.11】阻塞赋值方式描述的移位寄存器1 49【例 1

10、0.12】阻塞赋值方式描述的移位寄存器2 49【例 10.13】阻塞赋值方式描述的移位寄存器3 50【例 10.14】非阻塞赋值方式描述的移位寄存器 50【例 10.15】长帧同步时钟的产生 50【例 10.16】引入了D 触发器的长帧同步时钟的产生 51【例 11.1】数字跑表 51【例 11.2】4 位数字频率计控制模块 53【例 11.3】4 位数字频率计计数子模块 53【例 11.4】频率计锁存器模块 54【例 11.5】交通灯控制器 54【例 11.6】“梁祝”乐曲演奏电路 56【例 11.7】自动售饮料机 59【例 11.8】多功能数字钟 60【例 11.9】电话计费器程序 64【

11、例 12.1】8 位级连加法器 67【例 12.2】8 位并行加法器 67【例 12.3】8 位超前进位加法器 67【例 12.4】8 位并行乘法器 68【例 12.5】44 查找表乘法器 69【例 12.6】8 位加法树乘法器 70【例 12.7】11 阶FIR 数字滤波器 71【例 12.8】16 位高速数字相关器 72【例 12.9】(7,4)线性分组码编码器 73【例 12.10】(7,4)线性分组码译码器 74【例 12.11】(7,4)循环码编码器 74【例 12.12】(7,4)循环码纠错译码器 75【例 12.13】CRC 编码 76王金明:Verilog HDL 程序设计教程

12、- 1 -【例 3.1】4 位全加器module adder4(cout,sum,ina,inb,cin);output3:0 sum;output cout;input3:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;endmodule【例 3.2】4 位计数器module count4(out,reset,clk);output3:0 out;input reset,clk;reg3:0 out;always (posedge clk)beginif (reset) out=0; /同步复位else out=out+1; /计数endend

13、module【例 3.3】4 位全加器的仿真程序timescale 1ns/1nsinclude adder4.vmodule adder_tp; /测试模块的名字reg3:0 a,b; /测试输入信号定义为reg 型reg cin;wire3:0 sum; /测试输出信号定义为wire 型wire cout;integer i,j;adder4 adder(sum,cout,a,b,cin); /调用测试对象always #5 cin=cin; /设定cin 的取值initialbegina=0;b=0;cin=0;for(i=1;i16;i=i+1)#10 a=i; /设定a 的取值end

14、程序文本- 2 -initialbeginfor(j=1;j16;j=j+1)#10 b=j; /设定b 的取值endinitial /定义结果显示格式begin$monitor($time,%d + %d + %b=%b,%d,a,b,cin,cout,sum);#160 $finish;endendmodule【例 3.4】4 位计数器的仿真程序timescale 1ns/1nsinclude count4.vmodule coun4_tp;reg clk,reset; /测试输入信号定义为reg 型wire3:0 out; /测试输出信号定义为wire 型parameter DELY=1

15、00;count4 mycount(out,reset,clk); /调用测试对象always #(DELY/2) clk = clk; /产生时钟波形initialbegin /激励信号定义clk =0; reset=0;#DELY reset=1;#DELY reset=0;#(DELY*20) $finish;end/定义结果显示格式initial $monitor($time,clk=%d reset=%d out=%d, clk, reset,out);endmodule【例 3.5】“与-或-非”门电路module AOI(A,B,C,D,F); /模块名为AOI(端口列表A,B,

16、C,D,F)input A,B,C,D; /模块的输入端口为A,B,C,Doutput F; /模块的输出端口为F王金明:Verilog HDL 程序设计教程- 3 -wire A,B,C,D,F; /定义信号的数据类型assign F= (A&B)|(C&D); /逻辑功能描述endmodule【例 5.1】用case 语句描述的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 i

17、n3 or sel) /敏感信号列表case(sel)2b00: out=in0;2b01: out=in1;2b10: out=in2;2b11: out=in3;default: out=2bx;endcaseendmodule【例 5.2】同步置数、同步清零的计数器module count(out,data,load,reset,clk);output7:0 out;input7:0 data;input load,clk,reset;reg7:0 out;always (posedge clk) /clk 上升沿触发beginif (!reset) out = 8h00; /同步清0,

18、低电平有效else if (load) out = data; /同步预置else out = out + 1; /计数endendmodule【例 5.3】用always 过程语句描述的简单算术逻辑单元define add 3d0define minus 3d1define band 3d2define bor 3d3define bnot 3d4程序文本- 4 -module alu(out,opcode,a,b);output7:0 out;reg7:0 out;input2:0 opcode; /操作码input7:0 a,b; /操作数always(opcode or a or b)

19、 /电平敏感的always 块begincase(opcode)add: out = a+b; /加操作minus: out = a-b; /减操作band: out = a&b; /求与bor: out = a|b; /求或bnot: out=a; /求反default: out=8hx; /未收到指令时,输出任意态endcaseendendmodule【例 5.4】用initial 过程语句对测试变量A、B、C 赋值timescale 1ns/1nsmodule test;reg A,B,C;initialbeginA = 0; B = 1; C = 0;#50 A = 1; B = 0;

20、#50 A = 0; C = 1;#50 B = 1;#50 B = 0; C = 0;#50 $finish ;endendmodule【例 5.5】用begin-end 串行块产生信号波形timescale 10ns/1nsmodule wave1;reg wave;parameter cycle=10;initialbegin王金明:Verilog HDL 程序设计教程- 5 -wave=0;#(cycle/2) wave=1;#(cycle/2) wave=0;#(cycle/2) wave=1;#(cycle/2) wave=0;#(cycle/2) wave=1;#(cycle/2

21、) $finish ;endinitial $monitor($time,wave=%b,wave);endmodule【例 5.6】用fork-join 并行块产生信号波形timescale 10ns/1nsmodule wave2;reg wave;parameter cycle=5;initialforkwave=0;#(cycle) wave=1;#(2*cycle) wave=0;#(3*cycle) wave=1;#(4*cycle) wave=0;#(5*cycle) wave=1;#(6*cycle) $finish;joininitial $monitor($time,wav

22、e=%b,wave);endmodule【例 5.7】持续赋值方式定义的2 选1 多路选择器module MUX21_1(out,a,b,sel);input a,b,sel;output out;assign out=(sel=0)?a:b;/持续赋值,如果sel 为0,则out=a ;否则out=bendmodule【例 5.8】阻塞赋值方式定义的2 选1 多路选择器module MUX21_2(out,a,b,sel);input a,b,sel;程序文本- 6 -output out;reg out;always(a or b or sel)beginif(sel=0) out=a;

23、/阻塞赋值else out=b;endendmodule【例 5.9】非阻塞赋值module non_block(c,b,a,clk);output c,b;input clk,a;reg c,b;always (posedge clk)beginb=a;c=b;endendmodule【例 5.10】阻塞赋值module block(c,b,a,clk);output c,b;input clk,a;reg c,b;always (posedge clk)beginb=a;c=b;endendmodule【例 5.11】模为60 的BCD 码加法计数器module count60(qout,

24、cout,data,load,cin,reset,clk);output7:0 qout;output cout;input7:0 data;input load,cin,clk,reset;reg7:0 qout;always (posedge clk) /clk 上升沿时刻计数王金明:Verilog HDL 程序设计教程- 7 -beginif (reset) qout=0; /同步复位else if(load) qout=data; /同步置数else if(cin)beginif(qout3:0=9) /低位是否为9,是则beginqout3:0=0; /回0,并判断高位是否为5if

25、(qout7:4=5) qout7:4=0;elseqout7:4=qout7:4+1; /高位不为5,则加1endelse /低位不为9,则加1qout3:0=qout3:0+1;endendassign cout=(qout=8h59)&cin)?1:0; /产生进位输出信号endmodule【例 5.12】BCD 码七段数码管显示译码器module decode4_7(decodeout,indec);output6:0 decodeout;input3:0 indec;reg6:0 decodeout;always (indec)begincase(indec) /用case 语句进行

26、译码4d0:decodeout=7b1111110;4d1:decodeout=7b0110000;4d2:decodeout=7b1101101;4d3:decodeout=7b1111001;4d4:decodeout=7b0110011;4d5:decodeout=7b1011011;4d6:decodeout=7b1011111;4d7:decodeout=7b1110000;4d8:decodeout=7b1111111;4d9:decodeout=7b1111011;default: decodeout=7bx;endcaseend程序文本- 8 -endmodule【例 5.13

27、】用casez 描述的数据选择器module mux_casez(out,a,b,c,d,select);output out;input a,b,c,d;input3:0 select;reg out;always (select or a or b or c or d)begincasez(select)4b?1: out = a;4b?1?: out = b;4b?1?: out = c;4b1?: out = d;endcaseendendmodule【例 5.14】隐含锁存器举例module buried_ff(c,b,a);output c;input b,a;reg c;alwa

28、ys (a or b)beginif(b=1)&(a=1) c=a&b;endendmodule【例 5.15】用for 语句描述的七人投票表决器module voter7(pass,vote);output pass;input6:0 vote;reg2:0 sum;integer i;reg pass;always (vote)beginsum=0;王金明:Verilog HDL 程序设计教程- 9 -for(i=0;i=6;i=i+1) /for 语句if(votei) sum=sum+1;if(sum2) pass=1; /若超过4 人赞成,则pass=1else pass=0;end

29、endmodule【例 5.16】用for 语句实现2 个8 位数相乘module mult_for(outcome,a,b);parameter size=8;inputsize:1 a,b; /两个操作数output2*size:1 outcome; /结果reg2*size:1 outcome;integer i;always (a or b)beginoutcome=0;for(i=1; i=size; i=i+1) /for 语句if(bi) outcome=outcome +(a (i-1);endendmodule【例 5.17】用repeat 实现8 位二进制数的乘法module mult_repeat(outcome,a,b);parameter size=8;inputsize:1 a

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1