北邮电子院专业试验报告_第1页
北邮电子院专业试验报告_第2页
北邮电子院专业试验报告_第3页
北邮电子院专业试验报告_第4页
北邮电子院专业试验报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、电子工程学院ASIC专业实验报告班级:姓名:学号:班内序号:rJ、 IrI I0第一部分语言级仿真LAB1:简单的组合逻辑设计一、实验目的掌握基本组合逻辑电路的实现方法。二、实验原理本实验中描述的是一个可综合的二选一开关,它的功能是当sel=O时,给出out=a,否则给出结果 out=b。在VerilogHDL中,描述组合逻辑时常使用assign结构。equal=(a=b)?1:0 是一种在组合逻辑实现分支判断时常用的格式。parameter定义的size参数决定位宽。测试模块用于检测模块设计的是否正确,它给出 模块的输入信号,观察模块的内部信号和输出信号。三、源代码mux.vmodulesc

2、ale_mux(out,sel,b,a); parametersize=1;outputsize-1:0out; in putsize-1:0b,a; I .- 1in putsel;assig no ut=(!sel)?a:(sel)?b: size1bx;en dmodulemux_test.vdefi newidth8timescale1 ns/1 nsmodulemux_test;regwidth:1a,b;wirewidth:1out;regsel;scale_mux#(width)m1(.out(out),.sel(sel),.b(b),.a(a);in itialbegin$mo

3、 nitor($stime,sel=%ba=%bb=%bout=%b,sel,a,b,out);$dumpvars(2,mux_test);sel=O;b=width1bO;a=width1b1;#5sel=0;b=width1b1;a=width1b0;#5sel=1;b=width1b0;a=width1b1;#5sel=1;b=width1b1;a=width1b0;#5$fi ni sh;enden dmodule四、仿真结果与波形LAB2简单时序逻辑电路的设计一、实验目的fA ! I . 掌握基本时序逻辑电路的实现。二、实验原理在VerilogHDL中,相对于组合逻辑电路,时序逻辑电

4、路也有规定的表述方式。在可综合的VerilogHDL模型中,我们常使用 always块和(posedgeclk)或(门egedgeclk)的结构来表述时序逻辑。在always块中,被赋值的信号都必须定义为 reg型,这是由时序逻辑电路的特点所决定的对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了正确地观察到仿真结果,在可综合的模块中我们通 常定义一个复位信号 rst-,当它为低电平时对电路中的寄存器进行复位。三、源代码coun ter.v11 111 i ; 1 】timescalel ns/100psmoduleco un ter(c nt,clk,data,rst_,l

5、oad);output4:0cnt;in put4:0data;in putclk;in putrst_;in putload;reg4:0c nt;.- Ialways(posedgeclkor negedgerst_)if(!rst_)#1.2cnt=0;elseif(load)cn t=#3data;elsecn t=#4c nt+1;en dmodulecoun ter_test.vtimescalel ns/1 nsmoduleco un ter_test;wire4:0cnt;reg4:0data;regrst_;regload;regclk;coun tercl(.cnt(c n

6、t),.clk(clk),.data(data),rst_(rst_),o ad(load);in itialbegi nclk=0;foreverbegin#10clk=1b1;#10clk=1b0;endendin itialbegin$timeformat(-9,1, ns,9);$mo nitor(time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b, $stime,data,clk,rst_,load,c nt);_ I I$dumpvars(2,co un ter_test);_ 11 1 endtaskexpect;in put4:0expe

7、cts;if(cn t!=expects)begi n$display(Attime%tcntis%ba ndshouldbe%b,$time,c nt,expects);$display(TESTFAILED);$fin ish;ienden dtaskin itialbegin(n egedgeclk)rst_,load,data=7bO_X_XXXXX;( negedgeclk)expect(5h00);rst_,load,data=7b1_1_11101;( negedgeclk)expect(5h1D);rst_,load,data=7b1_0_11101;repeat(5) (n

8、egedgeclk);expect(5h02);rst_,load,data=7b1_1_11111;( negedgeclk)expect(5h1F);rst_,load,data=7b0_X_XXXXX;( negedgeclk)expect(5h00);$display(TESTPASSED);$fin ish;enden dmodule四、仿真结果与波形五、思考题该电路中,rst-是同步还是异步清零端? 在counter.v的always块中reset没有等时钟,而是直接清零。所以是异步清零端。LAB3:简单时序逻辑电路的设计一、实验目的使用预定义的库元件来设计八位寄存器。二、实验原理

9、八位寄存器中,每一位寄存器由一个二选一MUX个触发器dffr组成,当load=1,装载数据;当load=0,寄存器保持。对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。三、源代码clock.vtimescalel ns/1 ns moduleclock(clk);regclk;outputclk;in itialbegi nclk=0;foreverbegin#10clk=1b1;#10clk=1b0;、 11 1 endenden dmodule mux及dffr模块调用代码 muxmux7 (.out( n17), .sel(load), .b(data7), .a(out7

10、) );dffrdffr7(.q(out7), .d( n17), .clk(clk), .rst_(rst_) );muxmux6(.out (n 16),.sel(load),.b(data6),.a(out6);dffrdffr6(.q(out6), d( n16), clk(clk), rst_(rst_) ); muxmux5 (out (n 15), .sel(load), .b(data5), .a(out5) );dffrdffr5 (.q(out5), .d( n15), .clk(clk), .rst_(rst_) );muxmux4 (.out( n14), .sel(l

11、oad), .b(data4), .a(out4) );dffrdffr4 (.q(out4), .d( n14), .clk(clk), .rst_(rst_) );muxmux3 (.out (n 13), .sel(load), .b(data3), .a(out3) );dffrdffr3 (.q(out3), .d( n13), .clk(clk), .rst_(rst_) );muxmux2 (.out( n12), .sel(load), .b(data2), .a(out2)精心整理); dffrdffr2 (.q(out2), d( n12), clk(clk), rst_(

12、rst_) ); muxmuxl (out (n 11), .sel(load), b(data1), .a(out1) );dffrdffrl (q(out1), d( n11), clk(clk), rst_(rst_) ); muxmuxO (out (n 10), .sel(load), b(data0), .a(out0) ); dffrdffrO (q(out0), d( n10), clk(clk), rst_(rst_) );例化寄存器 registerrl ( data(data), out(out), o ad(load), clk(clk), rst_(rst_) );例

13、化时钟 clockci (clk(clk);添加检测信号精心整理in itialbegin$timeformat(-9,1, ns,9);$mo nitor(time=%t,clk=%b,data=%h,load=%b,out=%h,$stime,clk,data,load,out); $dumpvars(2,register_test);end四、仿真结果与波形LAB4:用always块实现较复杂的组合逻辑电路一、实验目的掌握用always实现组合逻辑电路的方法; 了解assign与always两种组合逻辑电路实现方法之间的区别。二、实验原理仅使用assign结构来实现组合逻辑电路,在设计中

14、会发现很多地方显得冗长且效率低下。适当地使用 always来设计组合逻辑,会更具实效。本实验描述的是一个简单的ALU指令译码电路的设计示例。它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时 的反应。示例中使用了电平敏感的always块,电平敏感的触发条件是指在后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了 case结构来进行分支判断。在always中适当运用default (在case结构中)和else (子ifelse结构中),通常可以综合为纯 组合逻辑,尽管被赋值的变量一定要

15、定义为reg型。如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器。三、源代码电路描述always(opcodeordataoraccum)beginif(accum=8b00000000)#1.2zero=1;else I#1.2zero=0;case(opcode)PASS0:#3.5out=accum;PASS1:#3.5out=accum;ADD:#3.5out=data+accum;AND:#3.5out=data&accum;XOR:#3.5out=dataAaccum;PASSD:#3.5out=data;PASS6:#3.5out=accum;PASS7

16、:#3.5out=accum;default:#3.5out=8bx;endcaseend四、仿真结果与波形LAB5存储器电路的设计一、实验目的设计和测试存储器电路。二、实验原理由于数本实验中,设计一个模块名为 mem勺存储器仿真模型,该存储器具有双线数据总线及异步处理功能。 据是双向的,所以要注意,对memory的读写在时序上要错开。三、源代码自行添加的代码assig ndata=(read)?memoryaddr:8hZ;always(posedgewrite)begin memoryaddr=data7:0; end四、仿真结果与波形LAB6:设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

17、一、实验目的明确掌握阻塞赋值与非阻塞赋值的概念和区别;了解阻塞赋值的使用情况。二、实验原理在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的。实际 时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,使用阻塞赋值语句。三、源代码blocki ng.vtimescalel ns/100psmoduleblocki ng(clk,a,b,c);output3:0b,c;in put3:0a;in putclk;.- Ireg3:0b,c;always(posedgeclk)I_beginb=a;c=b;$displa

18、y(Blocki ng:a=%d,b=%d,c=%d.,a,b,c);enden dmodulenon _block in g.vtimescalel ns/100psmodule non _block in g(clk,a,b,c);output3:0b,c;in put3:0a;in putclk;reg3:0b,c;精心整理always(posedgeclk)beginb=a;c=b;$display(Non_blocki ng:a=%d,b=%d,c=%d,a,b,c); enden dmodulecompareTop.vtimescalel ns/100psmodulecompare

19、Top;wire3:0b1,c1,b2,c2;reg3:0a;regclk;in itialbeginclk=0;forever#50clk=clk;endin itial$dumpvars(2,compareTop);in itialbegi na=4h3;$display();#100a=4h7;$display();#100a=4hf;$display();#100a=4ha;$display();#100a=4h2;I$display();#100$display();$fini sh;end non _block ingnon block in g(clk,a,b2,c2);bloc

20、ki ngblocki ng(clk,a,b1,c1);en dmodule四、仿真结果与波形LAB7:利用有限状态机进行复杂时序逻辑的设计一、实验目的掌握利用有限状态机(FSM)实现复杂时序逻辑的方法。二、实验原理控制器是cpu的控制核心,用于产生一系列的控制信号,启动或停止某些部件。CPU可时进行读指令,何时进行RAM和I/O端口的读写操作等,都由控制器来控制。精心整理三、源代码补充代码n exstate=state+1hO1;case(state)1:begi nsel=1;rd=0;ld_ir=0;i nc_pc=O;halt=O;ld_pc=O;data_e=O;ld_ac=O;wr

21、=O;e nd2:begi nsel=1;rd=1;ld_ir=0;i nc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;e nd3:begi nsel=1;rd=1;ld_ir=1;i nc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;e nd4:begi nsel=1;rd=1;ld_ir=1;i nc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;e nd5:begi nsel=0;rd=0;ld_ir=0;i nc_pc=1;ld_pc=0;data_e=0;ld_ac

22、=0;wr=0; if(opcode=HLT)halt=1;end6:begi nsel=0;rd=alu_op;ld_ir=0;i nc_pc=O;halt=O;ld_pc=O;data_e=O;ld_ac=O;wr=O;e nd 7:begi nsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=0;wr=0;if(opcode=SKZ)in c_pc=zero;if(opcode=JMP)ld_pc=1;endO:begi nsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=alu_

23、op;i nc_pc=(opcode=SKZ )&z ero|(opcode=JMP);if(opcode=JMP)ld_pc=1;if(opcode=STO)wr=1;enddefault:begi nsel=1b,Z;rd=1bZ;ldl_i r=1bZ;i nc_pc=1b,Z; halt=1bZ;ld_pc=1bZ;data_e=1bZ;l d_ac=1bZ;wr=1b Z;endendcaseendcon trol_test.vI/*TESTBENCHFORCONTROLLER*/timescalel ns/1nsmodulec on trol_test;reg8:0respo ns

24、e0:127;reg3:0stimulus0:15;reg2:0opcode;regclk;regrst_;regzero;in tegeri,j;reg(3*8):1m nemo nic;/In sta ntiatec on trollercon trolcl(rd ,wr ,ld_ir,ld_ac,ld_pc,in c_pc,halt,data_e,sel ,opcode,zero,clk ,rst_);/Defin eclockin itialbegi nclk=1;foreverbegin#10clk=0;#10clk=1;endend/Gen erate mnemoni cforde

25、bugg in gpurposesalways(opcode)begincase(opcode)3h0:m nemo ni c=HLT;3h1:m nemo ni c=SKZ;3h2:m nemo ni c=ADD;3h3: mnemon ic=AND;.- I3h4:m nemo ni c=XOR;3h5:m nemo ni c=LDA;3h6:m nemo ni c=STO;3h7:m nemo ni c=JMP;default:m nemon ic=?;endcaseend/Mon itorsig nalsin itialbegin$timeformat(-9,1, ns,9);$dis

26、play(timerdwrld_irld_acld_pci nc_pchaltdata_eselopcodezerostate);$display();/$shm_ope n(waves.shm);/$shm_probe(A);精心整理$shm_probe(c1.state);end/Applystimulusin itialbegin$readmemb(stimulus.pat,stimulus);rst_=1;(n egedgeclk)rst_=0;(n egedgeclk)rst_=1;for(i=0;i=15;i=i+1)(posedgeld_ir)(n egedgeclk)opcod

27、e,zero=stimulusi;end/Checkresp onsein itialbegin$readmemb(resp on se.pat,resp on se);(posedgerst_)for(j=0;j=127;j=j+1)(n egedgeclk)begin$display(%t%b%b%b%b%b%b%b%b%b%b%b%b,$time,rd,wr,ld_ir,ld_ac,ld_pc,i nc_pc,halt,data_e,sel,opcode,zero,c1.state);if(rd,wr,ld_ir,ld_ac,ld_pc,i nc_pc,halt,data_e,sel!=

28、resp on sej)begi n:blkreg8:0r;r=resp on sej;$display(ERROR-respo nseshouldbe:);$display(%t%b%b%b%b%b%b%b%b%b,$time,r8,r7,r6,r5,r4,r3,r2,r1,r0);$display(TESTFAILED);$stop;$fin ish;endend$display(TESTPASSED);$stop;$fin ish;enden dmodule四、仿真结果与波形LAB8:通过模块间的调用实现自顶向下CPU勺是设计一、实验目的精心整理学习和使用层次化、结构化设计方法。二、实验

29、原理VerilogHDL中,上层模块引用下层模块与C语言中程序调用有些类似,被引用的子模块在综合时作为其父模块的一部分被综合,形成相应的电路结构。在进行模块实例引用时,必须注意的是模块之间对应的端口, 即子模块端口与父模块的内部信号必须是一一对应。三、源代码CPUtest1.datopcode_opera nd/addrassemblycode/00111_11110/00BEGIN:JMPTST_JMP 000_00000/01HLT/JMPdid no tworkatall 000_00000/02HLT/JMPdid no tloadPC,itskipped101_11010/03JMP

30、_OK:LDADATA_1 001_00000/04SKZ. _ I1 I000_00000/05HLT/SKZorLDAdid notwork 101_11011/06LDADATA_2001_00000/07SKZ111 01010/08JMPSKZ OK 000_00000/09HLT/SKZorLDAdid notwork 110_11100/0ASKZ_OK:STOTEMP/store non -zerovalue in TEMP 101_11010/0BLDADATA_1110 11100/0CSTOTEMP/storezerovaluei nTEMP101_11100/0DLDA

31、TEMP 001_00000/0ESKZ/checktoseeifSTOworked000_00000/0FHLT/STOdid no twork100_11011/10XORDATA_2 001_00000/11SKZ/checktoseeifXORworked111_10100/12JMPXOR_OK 000_00000/13HLT/XORdid no tworkatall 100_11011/14XOR_OK:XORDATA_2 001_00000/15SKZIOOO_OOOOO/16HLT/XORdid notswitchallbits OOO_OOOOO/17END:HLT/CONG

32、RATULATIONS-TEST1PASSED!111_00000/18JMPBEGIN/ru ntestagai n 1A00000000/1ADATA_1:/co nsta ntOO(hex)1E111_OOO11/1ETST_JMP:JMPJMP_OK 000_00000/1FHLT/JMPisbroke n CPUtest2.dat/opcode_opera nd/addrassemblycode/00101_11011/00BEGIN:LDADATA_2 011_11100/01ANDDATA_31OO_11O11/O2XORDATA_2001_00000/03SKZ 000_000

33、00/04HLT/ANDdoes n twork 010_11010/05ADDDATA_1001_00000/06SKZ111_01001/07JMPADD_OK 000_00000/08HLT/ADDdoes n twork 100_11100/09XORDATA_3 010_11010/0AADDDATA_1/FFplus1makes-1 110_11101/0BSTOTEMP101_11010/0CLDADATA_1 010_11101/0DADDTEMP/-1plus1shouldmakezero 001_00000/0ESKZ000_00000/0FHLT/ADDDoes n tw

34、ork OOO_OOOOO/1OEND:HLT/CONGRATULATIONS-TEST2PASSED! 111_00000/11JMPBEGIN/ru ntestagai n 1A00000001/1ADATA_1:/co nsta nt1(hex) 00000000/1DTEMP:CPUtest3.dat /opcode_opera nd/addrassemblycode /111_00011/OOJMPLOOP/jumptotheaddressofLOOP 03101_11011/03LOOP:LDAFN2/loadvaluei nFN2 in toaccum 110_11100/04S

35、TOTEMP/storeaccumulatori nTEMP 010_11010/05ADDFN1/addvaluei nFN1toaccumulator 110_11011/06STOFN2/storeresulti nFN2 101_11100/07LDATEMP/loadTEMPi ntotheaccumulator 110_11010/08STOFN1/storeaccumulatori nFN1 100_11101/09XORLIMIT/compareaccumulatortoLIMIT 001_00000/0ASKZ/ifaccum=0,skiptoDONE 111_00011/O

36、BJMPLOOP/jumptoaddressofLOOP OOO_OOOOO/OCDONE:HLT/e ndofprogram 101_11111/0DAGAIN:LDAONE 11O_11O1O/OESTOFN1 1O1_1111O/OFLDAZEROI110_11011/10STOFN2 111_00011/11JMPLOOP/jumptoaddressofLOOP 1A00000001/1AFN1:/variable-stores1stFib.No. 00000000/1BFN2:/variable-stores2 ndFib.No. 00000000/1CTEMP:/temporary

37、variable 00000000/1EZERO:/co nsta ntO 00000001/1FONE:/co nsta nt1CPUtest4.dat自己编写的CPUtest,实现乘法器 /opcode_opera nd/addrassemblycode/03111_00100/03JMPLOOP/jumptotheaddressofLOOP 1O1_11O11/O4LOOP:LDADATA2/A=5 010_11010/05ADDDATA1/A=5+5=10 11O_11O11/O6STODATA2/DATA2=1O 101_11101/07LDATIME/A=TIME011_11111

38、/08ANDTIME/A=TIME010_11100/09ADDTEMP/A=TIME+1110_11101/0ASTOTIME/TIME=TIME+1100_11110/0BXORLIMIT/compareaccumulatortoLIMIT001_00000/0CSKZ/ifaccum=0,skiptoDONE111_00100/0DJMPLOOP/jumptoaddressofLOOPucll% call test(2);runRUNNING THE ADVANCED DIAG05TIC TEST THIS TEST SHOULD HALT WITH PC 二 10 PC INSTR OP DATA ADR四、1A00000101/1Adata1:/5variable-stores1stFi b.No.00000101/1Bdata2:/5variable-stores2 ndFib.No.00000001/1CTEMP:/1temporaryvariable00000001/1Dtime:/1co nsta nt144-maxvalue 00000110/1ELIMIT:/6co

温馨提示

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

评论

0/150

提交评论