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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

北航电子电路设计verilog实验报告文档格式.docx

1、#100 $stop;end compare m(.equal(equal),.a(a),.b(b);五、仿真结果六、实验总结verilog组合逻辑设计一般常用的语句有两种:持续赋值语句(assign语句)和过程赋值语句(always(*)语句)。两者之间的差别有:持续赋值语句(assign语句)主要用于对wire型变量的赋值,因为wire(线型)的值不能存住,需要一直给值,所以需要用持续赋值。例如:assign c = a + b; 只要a和b有任意变化,都可以立即反映到c上,也就是说c的值是根据a,b的值随时变化的。过程赋值语句(always语句)主要用于reg 型变量的赋值,因为alwa

2、ys语句被执行是需要满足触发条件的,所以always过程块里面的内容不是每时每刻都被执行,因此需要将被赋值的对象定义成寄存器类型,以便这个值能被保持住。本实验测试模块中,为了生成变化的数据信号a和b,采用了#100 a=0;b=1;赋值语句。若需要比较的数据较多,所需赋值语句会增加,采用always # 100 clock=clock产生周期时钟信号然后随机生成数据更简便。选作一:设计一个字节的比较器比较两个字节的大小,如a7:0大于b7:0,则输出高电平,否则输出低电平;并改写测试模型,使其能进行比较全面的测试。三、实验代码模块源代码:module compare_8bit(result,a

3、,b); input 7:0a,b; output result; assign result = (ab)?timescale 1ns/1nscompare_8bit.vmodule test; reg7: wire result; initial begin a=8d0; b=8 #100 a=8d6;b=8d5;d9;d12;d15; #100 $stop; end compare_8bit m(.result(result),.a(a),.b(b);经过改写:./eight.v reg clock; clock=0; always # 50 clock=clock; always(po

4、sedge clock) a=$random%256; b=$random%256; begin #100000 $stop; eight m(.result(result),.a(a),.b(b);四、仿真结果五、实验总结最初测试模块使用了#100 a=8的赋值语句,a,b的每个值都要手动赋予。由于一个字节(8位)有256个可能值,为了进行比较全面的测试,改写为always # 50 clock=clock;让a,b随机生成数据,可通过设置运行时间进行任意次比较。练习二 简单分频时序逻辑电路的设计1、掌握最基本组合逻辑电路的实现方法。2、学习时序电路测试模块的编写。3、学习综合和不同层次的仿

5、真。用always块和(posedge clk)或(negedge clk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果。module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always(posedge clk_in)if(! reset) clk_out=0;else clk_out=clk_out;endtimescale 1ns/100psdefine clk_cycle 50module top;reg clk,reset;wire clk_out;alway

6、s #clk_cycle clk=clk;clk = 0;reset=1;#10 reset=0;#110 reset=1;#100000 $stop;half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out);在可综合的Verilog HDL模型,通常使用always块和(posedge clk)或(negedge clk)的结构来表述时序逻辑。为了能正确地观察到仿真结果,并确定时序电路的起始相位,在可综合风格的模块中,通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。clk_out起始段为红色,是因为它是

7、reg型,且尚未被赋值,仿真工具认为其为不定态。选作二 七段数码管译码电路设计一个七段数码管译码电路。module segdisplay(data,seg);input 3:0 data;output 6:0 seg;reg 6:0 paraseg;always (data) case (data) 4b0000: paraseg=7b1111110;b0001:b0110000;b0010:b1101101;b0011:b1111001;b0100:b0110011;b0101:b1011011;b0110:b0011111;b0111:b1110000;b1000:b1111111;b10

8、01:b1110011;b1010:b0001101;b1011:b0011001;b1100:b0100011;b1101:b1001011;b1110:b0001111;b1111:b0000000; endcaseassign seg=paraseg;module experiment4; wire 6:0 out; reg 3: data = 0; clock = 0; always #50 clock= clock; data = data+1; #10000 $stop; segdisplay segdisplay11(.data(data),.seg(out);在每个上升沿dat

9、a自加,依次从0000加到1111,在把其对应代表七段数码管abcdefg亮暗的7位二进制数赋值给paraseg,即输出out。练习三:利用条件语句实现计数分频时序电路1、掌握条件语句在简单时序模块设计中的使用。2、学习在Verilog模块中应用计数器。3、学习测试模块的编写、综合和不同层次的仿真。仿真一个可综合风格的分频器,将10MB的时钟分频为500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。module fdivision(RESET,F10M,F500K); input F10M,RESET; output F500K; reg F500K;0j; al

10、ways(posedge F10M) if(!RESET) F500K=0; j else if(j=9)=F500K;=j+1; end endmodulemodule test_fdivision; reg F10M,RESET; wire F500K_clk; always #clk_cycle F10M=F10M; RESET=1; F10M=0; #100 RESET=0; #100 RESET=1; fdivision m(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk);我们按照课本上的程序进行了仿真,从仿真结果中可以看到,结果所得的信号的周

11、期是原信号的20倍,即实现了1/20分频。选作三:设计一个单周期形状的周期波形利用10MHZ的时钟,设计一个单周期形状的周期波形。module exp3(RESET,F10M,F_OUT); output F_OUT; reg F_OUT; reg15:RESET)/? F_OUT/? case(j) 199:F_OUT=1; 299: 499:j endcasedefine clk_cycle 50 module test_exp3; wire F; always #clk_cycle F10M=F10M; #50000 $stop; exp3 m2(.RESET(RESET),.F10M(

12、F10M),.F_OUT(F);这个实验只需要把练习三中的程序稍加修改即可得到结果。在实验的过程,一开始我们预设的stop的持续时间太短,导致输出不到一个周期,让我们误以为编写的程序有逻辑问题,从而耽误了很多时间。后来我们根据波形的高低电平持续时间重新计算了步长,根据步长进行时钟翻转的设置,最终得到了正确的结果。练习五:用always块实现较复杂的组合逻辑1、掌握用always实现较大组合逻辑电路的方法。2、进一步了解assign与always两种组合电路实现方法的区别和注意点。3、学习测试模块中随机数的产生和应用。4、学习综合不同层次的仿真,并比较结果。设计一个简单的指令译码电路,该电路通过

13、对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。define plus 3d0define minus 3d1define band 3d2define bor 3d3define unegate 3d4 module alu(out,opcode,a,b); output7: input2:0 opcode; input7:0 a,b;always(opcode or a or b) case(opcode) plus: out = a + b; minus: out = a - b; band: out

14、= a & b; bor: out = a | b; unegate: out = a; default: out = 8hx; endcase ./lx5 m.vmodule alutest; wire7: reg2: parameter times=5; opcode=3h0; repeat(times) begin #100 a=$random%256; opcode=opcode+1;从仿真结果来看,opcode=000时,程序实现a+b的功能;opcode=001时,程序实现a-b的功能;opcode=010时,程序实现a&b的功能;opcode=011时,程序实现a|b的功能;op

15、code=100时,程序实现-a的功能;opcode=101时,系统进入高阻态,输出未知。选作五:运用always块设计一个8路数据选择器一、实验设备 二、实验内容 每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化。module exp5(slt,in0,in1,in2,in3,in4,in5,in6,in7,out);0slt; input3:0in0,in1,in2,in3,in4,in5,in6,in7; output3:0out; reg3:always(in0 or in1 or in2 or in3 or in4 or in5

16、 or in6 or in7 or slt) case(slt) 3d0:out=in0;d1:=in1;d2:=in2;d3:=in3;d4:=in4;d5:=in5;d6:=in6;d7:=in7;timescale 1ns/1ns module test_exp5_2;0slt=0; reg clk; wire 3: always #10 clk=clk; always(posedge clk) slt=slt+1; initial clk=0; in0=1; in1=3; in2=5; in3=7; in4=9; in5=11; in6=13; in7=15; #160 in0=0;

17、in1=2; in2=4; in3=6; in4=8; in5=10; in6=12; in7=14; exp5 m(.slt(slt),.in0(in0),.in1(in1),.in2(in2),.in3(in3),.in4(in4),.in5(in5),.in6(in6),.in7(in7),.out(out);五、实验结果从仿真波形中可以看出,在输入一定时,输出随着stl的变化而变化;当输入改变时,和之前相同stl的情况下,输出也发生了变化,满足了题目的要求。在设计程序的时候,我们将16个数按单数双数分为两组,是为了便于查看实验结果,实际上可以任意将这16个数均分为两组,都可以满足输出随

18、输入变化的要求。本次实验是一个较为复杂的组合逻辑电路,在实现这样的电路的时候,一般考虑条件分支语句(如ifelse或者case等)来实现相应的功能。练习六:在 Verilog HDL中使用函数1、了解函数的定义和在模块设计中的使用。2、了解函数的可综合性问题。3、了解许多综合器不能综合复杂的算术运算。做一个函数调用的示例,采用同步时钟触发运算的执行,每个clk时钟周期执行一次运算,在测试模块中,调用系统任务$display及在时钟的下降沿显示每次运算的结果。module lx6(clk,n,result,reset); output31:0result;0n; input reset,clk;

19、 reg31:reset) result=n*factorial(n)/(n*2)+1); function31:0factorial;0operand;0index; factorial=operand? for(index=2;index=operand;index=index+1) factorial=index*factorial; endfunctionincludelx6 m.vmodule test_lx6;0n,i; reg reset,clk; wire31: n=0; reset=1; #100 reset=0; #100 reset=1; for(i=0;i=15;i=i+1) #200 n=i; always #clk_cycle clk=clk; lx6 m(.clk(clk),.n(n),.result(result),.reset(reset);六、实验结果按照课本上的程序进行仿真,实验结果显示,程序完成了对数据的阶乘运算。我们也借此初步了解了函数的使用方法。选作六:设计一个带控制端的逻辑运算电路分别完成正整数的平方、立方和最大数为5的阶乘的运算,要求可综合。编写测试模块,并给出各种层次的仿真波形,比较它们的不同。module xt6(clk,n,result,reset,select); input1:0select;

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

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