北航verilog实验报告_第1页
北航verilog实验报告_第2页
北航verilog实验报告_第3页
北航verilog实验报告_第4页
北航verilog实验报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、北京航空航天大学电子电路设计数字部分实验报告实验一 简单组合逻辑设计2实验二 简单分频时序逻辑电路的设计3一实验目的:1掌握最基本组合逻辑电路的实现方法。32学习时序电路测试模块的编写。33学习综合和不同层次的仿真。3实验三 利用条件语句实现计数分频时序电路5实验四 阻塞赋值与非阻塞赋值的区别7实验五 用always块实现较复杂的组合逻辑:10实验六 在 Verilog HDL中使用函数12实验七 在Verilog HDL中使用任务(task)14实验八 利用有限状态机进行时序逻辑的设计17实验九 楼梯灯19实验思考与总结29学 院: 学号: 姓名: 实验一 简单组合逻辑设计一实验目的:1掌握

2、基本组合逻辑电路的实现方法。2初步了解两种基本组合逻辑电路的生成方法。3学习测试模块的编写。4通过综合和布局布线了解不同层次仿真的物理意义。二实验设备:安装Modelsim-6.5c的PC机。三实验内容:描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出结果1,否则给出结果0四综合仿真结果实验二 简单分频时序逻辑电路的设计一实验目的:1掌握最基本组合逻辑电路的实现方法。2学习时序电路测试模块的编写。3学习综合和不同层次的仿真。二实验设备:安装Modelsim-6.5c的PC机。三实验内容:用always块和(posedge clk)或(negedge clk)的结构表述一个1/

3、2分频器的可综合模型,观察时序仿真结果四实验代码module half_clk(reset,clk_in,clk_out); input clk_in,reset; output clk_out; reg clk_out; always(posedge clk_in) begin if(!reset) clk_out=0; else clk_out=clk_out; end endmoduletimescale 1ns/100psdefine clk_cycle 50module top; reg clk,reset; wire clk_out; always #clk_cycle clk=c

4、lk; initial begin clk=0; reset=-1; #10 reset=0; #110 reset=1; #100000 $stop; end half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out);endmodule五综合仿真结果实验三 利用条件语句实现计数分频时序电路一实验目的:1掌握条件语句在简单时序模块设计中的使用。2学习在Verilog模块中应用计数器。3学习测试模块的编写、综合和不同层次的仿真。二实验设备:安装Modelsim-6.5c的PC机。三实验内容:仿真一个可综合风格的分频器,将10MB的时钟分频为

5、500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。四实验代码module fdivision(RESET,F10M,F500K); input RESET,F10M; output F500K; reg F500K; reg7:0j; always (posedge F10M) if(!RESET) begin F500K <= 0; j<=0; end else begin if(j=9) begin j<=0; F500K = F500K; end else j<=j+1; endendmodule timescale 1ns/1ps

6、define clk_cycle 50module division_Top; reg F10M,RESET; wire F500K_clk; always #clk_cycle F10M=F10M; initial begin RESET=1; F10M=0; #100 RESET=0; #100 RESET=1; #10000 $stop; end fdivision fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk);endmodule 五综合仿真结果实验四 阻塞赋值与非阻塞赋值的区别一实验目的:1通过实验,掌握阻塞赋值与非阻塞赋值

7、的概念和区别。2了解非阻塞和阻塞赋值的不同使用场合。3学习测试模块的编写、综合和不同层次的仿真。二实验设备:安装Modelsim-6.5c的PC机。三实验内容:两个模块,一个阻塞赋值,一个非阻塞赋值,观察两者之间的区别四实验代码module blocking(clk,a,b,c); output 3:0b,c; input 3:0a; input clk; reg 3:0b,c; always (posedge clk) begin b=a; c=b; $display("Blocking:a=%d,b=%d,c=%d",a,b,c); end endmodule/non_

8、blocking.vmodule non_blocking(clk,a,b,c); output 3:0b,c; input 3:0a; input clk; reg 3:0b,c; always (posedge clk) begin b<=a; c<=b; $display("Non_Blocking:a=%d,b=%d,c=%d",a,b,c); endendmodule/comepareTop.vtimescale 1ns/100psmodule conpareTop; wire3:0b1,c1,b2,c2; reg3:0a; reg clk; init

9、ial begin clk=0; forever #50 clk=clk; end initial begin a=4'h3; $display("_"); #100 a=4'h7; $display("_"); #100 a=4'hf; $display("_"); #100 a=4'ha; $display("_"); #100 a=4'h2; $display("_"); #100 $display("_"); $stop; en

10、d non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);endmodule五综合仿真结果实验五 用always块实现较复杂的组合逻辑:一实验目的:1掌握用always实现较大组合逻辑电路的方法。2进一步了解assign与always两种组合电路实现方法的区别和注意点。3学习测试模块中随机数的产生和应用。4学习综合不同层次的仿真,并比较结果二实验设备:安装Modelsim-6.5c的PC机。三实验内容:设计一个简单的指令译码电路,该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并

11、且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。四实验代码define plus 3'd0define minus 3'd1define band 3'd2define bor 3'd3define unegate 3'd4module alu(out,opcode,a,b); output 7:0out; reg 7:0out; input 2:0opcode; input 7:0a,b; always (opcode or a or b) begin case(opcode) plus: out=a+b; minus: out=a-

12、b; band: out=a&b; bor: out=a|b; unegate: out=a; default: out=8'hx; endcase endendmoduletimescale 1ns/1nsmodule alutest; wire 7:0out; reg 7:0a,b; reg 2:0opcode; parameter times=5; initial begin a=$random%256; b=$random%256; opcode=3'h0; repeat(times) begin #100 a=$random%256; b=$random%25

13、6; opcode=opcode+1; end #100 $stop; end alu alu1(out,opcode,a,b); endmodule五综合仿真结果实验六 在 Verilog HDL中使用函数一实验目的:1了解函数的定义和在模块设计中的使用。2了解函数的可综合性问题。3了解许多综合器不能综合复杂的算术运算。二实验设备:安装Modelsim-6.5c的PC机。三实验内容:做一个函数调用的示例,采用同步时钟触发运算的执行,每个clk时钟周期执行一次运算,在测试模块中,调用系统任务$display及在时钟的下降沿显示每次运算的结果。四实验代码module tryfunct(clk,n

14、,result,reset); output 31:0result; input 3:0n; input reset,clk; reg 31:0result; always (posedge clk) begin if(!reset) result<=0; else begin result<=n*factorial(n)/(n*2)+1); end end function 31:0factorial; input 3:0operand; reg 3:0index; begin factorial=operand? 1:0; for(index=2;index<=opera

15、nd;index=index+1) factorial=index*factorial; end endfunctionendmodule /测试模块代码timescale 1ns/100psdefine clk_cycle 50module tryfunctTop; reg 3:0n,i; reg reset,clk; wire 31:0result; initial begin clk=0; n=0; reset=1; #100 reset=0; #100 reset=1; for(i=0;i<=15;i=i+1) begin #200 n=i; end #100 $stop; en

16、d always #clk_cycle clk=clk; tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset);endmodule五综合仿真结果练习题仿真结果实验七 在Verilog HDL中使用任务(task)一实验目的:1掌握任务在Verilog模块设计中的应用。2学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。二实验设备:安装Modelsim-6.2b的PC机。三实验内容:利用电平敏感的always块和一个比较两变量大小排序的任务,设计出个并行输入数的高速排序组合逻辑。四实验代

17、码module sort4(ra,rb,rc,rd,a,b,c,d); output 3:0ra,rb,rc,rd; input 3:0a,b,c,d; reg 3:0ra,rb,rc,rd; reg 3:0va,vb,vc,vd; always (a or b or c or d) begin va,vb,vc,vd=a,b,c,d; sort2(va,vc); sort2(vb,vd); sort2(va,vb); sort2(vc,vd); sort2(vb,vc); ra,rb,rc,rd=va,vb,vc,vd; end task sort2; inout 3:0x,y; reg 3

18、:0tmp; if(x>y) begin tmp=x; x=y; y=tmp; end endtaskendmodule timescale 1ns/100psmodule task_Top; reg 3:0a,b,c,d; wire 3:0 ra,rb,rc,rd; initial begin a=0; b=0; c=0; d=0; repeat(50) begin #100 a=$random%15; b=$random%15; c=$random%15; d=$random%15; end #100 $stop; end sort4 sort4(.a(a),.b(b),.c(c),

19、.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd);endmodule 五综合仿真结果练习题仿真结果实验八 利用有限状态机进行时序逻辑的设计一实验目的:1掌握利用有限状态机实现一般时序逻辑分析的方法。2掌握用Verilog编写可综合的有限状态机的标准模板。3掌握用Verilog编写状态机模块的测试文件的一般方法。二实验设备:安装Modelsim-6.2b的PC机。三实验内容:设计一个简单的状态机,功能是检测一个5位的二进制序列“10010”。四实验代码module seqdet(x,z,clk,rst,state); input x,clk,rst; output z;

20、 output 2:0state; reg 2:0state; wire z; parameter IDLE='d0,A='d1,B='d2,C='d3,D='d4,E='d5,F='d6,G='d7; assign z=(state=E&&x=0)?1:0; always (posedge clk) if(!rst) begin state<=IDLE; end else casex(state) IDLE:if(x=1) begin state<=A; end A:if(x=0) begin sta

21、te<=B; end B:if(x=0) begin state<=C; end else begin state<=F; end C:if(x=1) begin state<=D; end else begin state<=G; end D:if(x=0) begin state<=E; end else begin state<=A; end E:if(x=0) begin state<=C; end else begin state<=A; end F:if(x=1) begin state<=A; end else begi

22、n state<=B; end G:if(x=1) begin state<=F; end default:state<=IDLE; endcaseendmoduletimescale 1ns/1nsmodule seqdet_Top; reg clk,rst; reg 23:0data; wire 2:0state; wire z,x; assign x=data23; always #10 clk=clk; always (posedge clk) data=data22:0,data30; initial begin clk=0; rst=1; #2 rst=0; #3

23、0 rst=1; data='b1100_1001_0000_1001_0100; #500 $stop; end seqdet m(x,z,clk,rst,state);endmodule五综合仿真结果实验九 楼梯灯一实验目的:掌握用Verilog编写简单程序二实验设备:安装Modelsim-6.2b的PC机。三实验内容:Ø 楼下到楼上依次有3个感应灯:灯1、灯2、灯3。当行人上下楼梯时,各个灯感应到后自动点亮,若在8s内感应信号消失,则点亮8s,若感应信号存在时间超过8s,则感应信号消失4s后灯自动关闭。Ø 任务1:做出如上逻辑电路设计并仿真;Ø 任务

24、2:考虑去抖情况,对于感应信号到达存在毛刺(小于0.5s),设计合适逻辑并剔出。任务3:若为节约能源,下一个灯点亮的同时将自动关闭上一个灯,做出如上逻辑设计并仿真(仅考虑一个人的情况)四实验代码module stairled(light,switch,clk10,rst); input clk10,rst; input2:0switch; output2:0light; reg2:0state1,state2,state3; reg7:0count1,count2,count3; reg2:0light; reg2:0counter1,counter2,counter3; parameter

25、IDLE1=3'b000,IDLE2=3'b000,IDLE3=3'b000, state1_main=3'b001,state2_main=3'b001,state3_main=3'b001, state1_pos=3'b010,state2_pos=3'b010,state3_pos=3'b010, state1_neg=3'b011,state2_neg=3'b011,state3_neg=3'b011, state1_spe_01=3'b100,state2_spe_01=3'

26、;b100,state3_spe_01=3'b100, state1_spe_02=3'b101,state2_spe_02=3'b101,state3_spe_02=3'b101; /* The first always block!To deal with light1&switch1! */ always(posedge clk10) if(!rst) begin state1<=IDLE1; count1<=8'b0; counter1<=3'b0; end else if(switch0=1'b1&am

27、p;&counter1<5)counter1<=counter1+1; else case(state1) IDLE1: if(switch0='b1) begin state1<=state1_pos; count1<=79; end else begin state1<=IDLE1; light0<=0; end state1_main: if(count1>0) begin count1<=count1-1; end else if(switch0=0) begin state1<=state1_neg; end el

28、se if(switch0=1) begin state1<=state1_spe_01; end state1_spe_01: if(switch0=0) begin state1<=state1_spe_02; count1<=39; end else state1<=state1_spe_01; state1_spe_02: if(count1>0) begin count1<=count1-1; end else state1<=state1_neg; state1_neg: begin light0<='b0; state1&l

29、t;=IDLE1; counter1<=3'b0; end state1_pos: begin light0<=1; state1<=state1_main; end default:state1<=IDLE1; endcase /* The second always block!To deal with light2&switch2! */ always(posedge clk10) if(!rst) begin state2<=IDLE2; count2<=8'b0; counter2<=3'b0; end els

30、e if(switch1=1'b1&&counter2<5)counter2<=counter2+1; else case(state2) IDLE2: if(switch1='b1) begin state2<=state2_pos; count2<=79; end else begin state2<=IDLE2; light1<='b0; end state2_main: if(count2>0) begin count2<=count2-1; end else if(switch1=0) begin

31、 state2<=state2_neg; end else if(switch1=1) begin state2<=state2_spe_01; end state2_spe_01: if(switch1=0) begin state2<=state2_spe_02; count2<=39; end else state2<=state2_spe_01; state2_spe_02: if(count2>0) begin count2<=count2-1; end else state2<=state2_neg; state2_neg: begi

32、n light1<='b0; state2<=IDLE2; counter2<=3'b0; end state2_pos: begin light1<='b1; state2<=state2_main; end default:state2=IDLE2; endcase /* The third always block!To deal with light3&switch3! */ always(posedge clk10) if(!rst) begin state3<=IDLE3; count3<=8'b0;

33、 counter3<=3'b0; end else if(switch2=1'b1&&counter3<5)counter3<=counter3+1; else case(state3) IDLE3: if(switch2='b1) begin state3<=state3_pos; count3<=79; end else begin state3<=IDLE3; light2=0; end state3_main: if(count3>0) begin count3<=count3-1; end els

34、e if(switch2=0) begin state2<=state3_neg; end else if(switch2=1) begin state3<=state3_spe_01; end state3_spe_01: if(switch2=0) begin state3<=state3_spe_02; count3<=39; end else state3<=state3_spe_01; state3_spe_02: if(count3>0) begin count3<=count3-1; end else state3<=state3_neg; state3_neg: begin light1<='b0; stat

温馨提示

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

评论

0/150

提交评论