Verilog实验报告(电子)_第1页
Verilog实验报告(电子)_第2页
Verilog实验报告(电子)_第3页
Verilog实验报告(电子)_第4页
Verilog实验报告(电子)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 西安邮电大学Verilog HDL大作业报告书学院名称:电子工程学院学生姓名:专业名称:电子信息工程班 级:实验一 异或门设计一、实验目的 (1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=xy+xy,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真 1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。2、步骤1、建立工程2、添加文件到工程3、编

2、译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真实验描述如下:module my_and(a_out,a1,a2); output a_out; input a1,a2; wire s1; nand(s1,a1,a2); nand(a_out,s1,1b1); endmodule module my_not(n_out,b); output n_out; input b; nand(n_out,b,1b1); endmodule module my_or(o_out,c1,c2); output o_out; input c1,c2; wire s1,s2; nand(s1,c

3、1,1b1); nand(s2,c2,1b1); nand(o_out,s1,s2); endmodule module MY_XOR(z,x,y); output z; input x,y; wire a1,a2,n1,n2; my_not STEP01(n1,x); my_not STEP02(n2,y); my_and STEP03(a1,n1,y); my_and STEP04(a2,n2,x); my_or STEP05(z,a1,a2); Endmodule module stimulus; reg X,Y; wire OUTPUT; MY_XOR xor01(OUTPUT,X,Y

4、); initial begin $monitor($time,X=%b,Y=%b - OUTPUT=%bn,X,Y,OUTPUT); end initial begin X = 1b0; Y = 1b0; #5 X = 1b1; Y = 1b0; #5 X = 1b1; Y = 1b1; #5 X = 1b0; Y = 1b1; end endmodule2、 实验结果波形图:3、 分析和心得 通过这次的实验,我基本熟悉Modelsim 软件,掌握了Modelsim 软件的编译、仿真方法。同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。实验二 二进制全加器设计一、实验目的 (

5、1)熟悉Verilog HDL 元件实例化语句的作用(2)熟悉全加器的工作原理(3)用Verilog HDL 语言设计一位二进制全加器,并仿真,验证其功能二、实验内容一位全加器使用乘积项之和的形式可以表示为:sum=abc_in+a bc_in+a b c_in+ab c_inc_out=ab+bc_in+ac_in其中a,b和c_in为输入,sum和c_out为输出,只使用与门,或门,非门实现一个一位全加器,写出Verilog描述,限制是每个门最多只能有四个输入端。编写激励模块对其功能进行检查,并对全部的输入组合输入组合进行测试。实验要求用 Verilog HDL 语言描述一位全加器,并使用

6、 modelsim仿真验证结果。 module fulladd(sum,c_out,a,b,c_in); output sum,c_out; input a,b,c_in; wire s1,s2,s3,s4,a1,b1,c_in1,c1,c2,c3; and(s1,a,b,c_in); not(a1,a); not(b1,b); not(c_in1,c_in); and(s2,a1,b,c_in1); and(s3,a1,b1,c_in); and(s4,a,b1,c_in1); and(c1,a,b); and(c2,b,c_in); and(c3,a,c_in); or(sum,s1,s2

7、,s3,s4); or(c_out,c1,c2,c3);endmodule module stimulus; reg A,B,C_IN; wire SUM,C_OUT; fulladd FA1(SUM,C_OUT,A,B,C_IN); initial begin $monitor($time,A=%b, B=%b,C_IN=%b,-C_OUT=%b,SUM=%bn,A,B,C_IN,C_OUT,SUM); end /? initial begin A=1d0;B=1d0;C_IN=1b0; #5 A=1d0;B=1d0;C_IN=1b1; #5 A=1d0;B=1d1;C_IN=1b0; #5

8、 A=1d0;B=1d1;C_IN=1b1; #5 A=1d1;B=1d0;C_IN=1b0; #5 A=1d1;B=1d0;C_IN=1b1; #5 A=1d1;B=1d1;C_IN=1b0; #5 A=1d1;B=1d1;C_IN=1b1; End实验结果波形:三分析和心得通过这次试验我熟悉了Verilog HDL 元件例化语句的作用 ,并且熟悉全加器的工作原理 。在一位全加器的过程中,也了解了如何调用模块。 实验三 使用JK触发器设计一个计数器一、实验目的 (1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序

9、设计开发二、实验内容 一个同步计数器可以使用主从JK触发器来设计。设计一个同步计数器,其逻辑图和JK触发器的逻辑图如书中图所示。清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q3:0。技术规范:本次试验中共有三个模块,分别是JK主从触发器设计模块,计数器设计模块及激励模块。对于JK触发器,共有四个输入端(j,k,clear,clock),两个输出端(q,qb

10、ar),根据其实际电路结构做出相应的设计;对于计数器模块,有三个输入端(clear,clock,counter_clock),四个输出(Q3:0),使用的是四个JK触发器和门电路组合,采用同步清零和同步脉冲构成四位同步计数器;激励模块中根据技术模块输入端口进行相关赋值以便进行仿真观察;三实验步骤:1在modulesim软件中使用数据流建模进行四位计数器设计及输入;2.进行编译及仿真。四源代码:JK触发器模块:module m_c_jkff(q,qbar,J,K,clear,clock);output q,qbar;input J,K,clear,clock;wire a,b,c,d,y,yba

11、r,cbar;assign cbar=clock;assign #1 a=(J & qbar & clock & clear), b=(K & q & clock), y=(a & ybar), ybar=(y & b & clear), c=(y & cbar), d=(ybar & cbar);assign #1 q=(c & qbar);assign #1 qbar=(d & clear & q); endmodule计数器模块:module four_count_ff(Q,clear,clock,count_enable);output 3:0 Q;input clear,clock,

12、count_enable;wire a1,a2,a3;assign a1=count_enable & Q0, a2=a1&Q1, a3=a2&Q2; m_c_jkff m1(Q0,count_enable,count_enable,clear,clock); m_c_jkff m2(Q1,a1,a1,clear,clock); m_c_jkff m3(Q2,a2,a2,clear,clock); m_c_jkff m4(Q3,a3,a3,clear,clock); endmodule激励模块:module stimulus;reg clock,clear,count_enable; wire

13、 3:0 Q; initial $monitor($time,Count Q = %b Clear = %b,Q3:0,clear); four_count_ff f1(Q,clear,clock,count_enable);initialbegin clear=1b0; count_enable=1b1; #10 clear=1b1;/#1 count_enable=1b1; /#50 clear=1b0; /#100 count_enable=1b0;/#100 clear=1b0; /#50 clear=1b1; /#50 count_enable=1b1; endinitial beg

14、in clock=1b0; forever #20 clock=clock; endinitial #1000 $finish;Endmodule波形图: 实验四 八功能算术运算单元一、实验目的 (1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容使用case语句设计八门功能的算术运算单元(ALU),输入信号a,b为4位,功能选择信号select为3位,输出信号out为5位。忽略输出结果中的上溢和下溢。3 实验步骤: 1 在modulesim软件中使用case语句设计八门功能的算术运算单元(AL

15、U) 2. 进行编译及仿真。module alu(out,a,b,select); output 4:0 out; input 3:0 a, b; input 2:0 select; reg 4:0 out; always (a or b or select) begin case (select) 3b000 : out = a; 3b001 : out = a+b; 3b010 : out = a-b; 3b011 : out = a/b; 3b100 : out = a%b; 3b101 : out = a1; 3b111 : out = ab; default : $display(I

16、nvalid ALU control signal); endcase endendmodule module stimulus; reg 3:0 A,B; reg 2:0 SELECT; wire 4:0 OUT; initial $monitor($time, A= %b B= %b SELECT= %b OUT= %b ,A3:0,B3:0,SELECT2:0,OUT4:0); alu alu1(OUT,A,B,SELECT); initial begin A = 4b0011;B = 4b1011;SELECT = 3b000; repeat(7) begin SELECT = #10

17、 3b001+SELECT; end #10 A = 4b1111;B = 4b1001;SELECT = 3b000; repeat(7) begin SELECT = #10 3b001+SELECT; end #10 A = 4b0000;B = 4b0000;SELECT = 3b000; repeat(7) begin SELECT = #10 3b001+SELECT; end #10 A = 4b1111;B = 4b1111;SELECT = 3b000; repeat(7) begin SELECT = #10 3b001+SELECT; end end endmodule

18、波形图: 四实验中遇到的问题及解决方法:“清零信号clear低电平有效,输入数据在时钟信号clock上升沿被锁存,触发器在clock下降沿输出;当count-enable为低电平时停止计数。”一开始不能理解,后来经过同学的指导明白了过程。总之,至此实验特别有意义。 实验五 八位ALU功能的函数一、实验目的 (1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容 设计一个实现八位ALU功能的函数,输入信号a,b为4位,功能选择信号select为3位,输出信号out为5位。忽略输出结果中的上溢和下溢。

19、3 实验步骤: 1 在modulesim软件中设计一个实现八位ALU功能的函数。 2. 进行编译及仿真。module bit8_ALU(out,a,b,select); output 4:0 out; input 3:0 a,b; input 2:0 select; reg 4:0 out; / reg 3:0 a,b; / reg 2:0 select; always (a or b or select) begin out = bit8_function(a,b,select); end /?8?ALU? function 4:0 bit8_function; input 3:0 a,b;

20、 input 2:0 sel; parameter S0 = 3b000, S1 = 3b001, S2 = 3b010, S3 = 3b011, S4 = 3b100, S5 = 3b101, S6 = 3b110, S7 = 3b111; begin case(sel) S0:bit8_function = a; S1:bit8_function = a+b; S2:bit8_function = a-b; S3:bit8_function = a/b; S4:bit8_function = a%b; S5:bit8_function = a1; S7:bit8_function = (a

21、b); default : $display(Invalid ALU control signal); endcase end endfunction endmodule、module stimulus; reg 3:0 A,B; reg 2:0 SELECT; wire 4:0 OUT; bit8_ALU alu(OUT,A,B,SELECT); initial begin $monitor($time,A=%b, B=%b, SELECT=%b, - OUT=%bn,A,B,SELECT,OUT); end initial begin A=4b0000;B=4b0000; SELECT=3

22、b000; repeat(7) begin SELECT = #10 SELECT + 3b001; end #100 A=4b1111;B=4b0000; SELECT=3b000; repeat(7) begin SELECT = #10 SELECT + 3b001; end #100 A=4b0000;B=4b1111; SELECT=3b000; repeat(7) begin SELECT = #10 SELECT + 3b001; end #100 A=4b0011;B=4b0011; SELECT=3b000; repeat(7) begin SELECT = #10 SELE

23、CT + 3b001; end #100 A=4b1111;B=4b1111; SELECT=3b000; repeat(7) begin SELECT = #10 SELECT + 3b001; end endEndmodule波形图:四实验中遇到的问题及解决方法: 这个题目比较简单,因为与之前的实验内容基本相同,只是变化成为函数的形式而已,因此做实验时没有遇到什么大问题。 实验六 状态自动机一、实验目的 (1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容 使用同步有限状态自动机方法设计一个

24、电路,它的引脚in接受一位的输入流。每当检测到模式10101时,输出引脚reset被赋值为高电平引脚。reset引脚以同步方式初始化电路。输入引脚clk 用于给电路提供时针信号。使用身边现有的任何工艺库综合该电路,优化电路,使其达到最快速度。把同样的激励应用到RTL和们级网表上,比较它们的输出三实验步骤: 1 在modulesim软件中使用同步有限状态自动机方法设计一个电路。2. 进行编译及仿真。module select(in,clk,reset,match);input in;input clk;input reset;output match;wire match;wire 4:0 NE

25、XT_STATE;reg 4:0 PRES_STATE;parameter s1=5b00000;parameter s2=5b00001;parameter s3=5b00010;parameter s4=5b00101;parameter s5=5b01010;parameter s6=5b10101;function 5:0 fsm;input fsm_in;input 4:0 fsm_PRES_STATE;reg fsm_match;reg 4:0 fsm_NEXT_STATE; begin case(fsm_PRES_STATE) s1: begin if(fsm_in=1b1) b

26、egin fsm_match=1b0; fsm_NEXT_STATE=s2; end else if(fsm_in=1b0) begin fsm_match=1b0; fsm_NEXT_STATE=s1; end end s2: begin if(fsm_in=1b1) begin fsm_match=1b0; fsm_NEXT_STATE=s2; end else if(fsm_in=1b0) begin fsm_match=1b0; fsm_NEXT_STATE=s3; end end s3: begin if(fsm_in=1b1) begin fsm_match=1b0; fsm_NEXT_STATE=s4; end else if(fsm_in=1b0) begin fsm_match=1b0; fsm_NEXT_STATE=s1; end end s4: begin if(fsm_in=1b1) begin fsm_match=1b0; fsm_NEXT_STATE=s2; end else if(fsm_in=1b0) begin fsm_match=1b0; fsm_NEXT_STATE=s5; end end s5: begin if(fsm_in=1b1) begin fsm_matc

温馨提示

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

评论

0/150

提交评论