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

下载本文档

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

文档简介

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

2、ale_mux(out,sel,b,a); parameter size=1; outputsize-1:0 out;inputsize-1:0b,a;input sel;assign out = (!sel)?a: (sel)?b:size1bx;endmoduledefi ne width 8 timescale 1 ns/1 nsmodule mux_test;regwidth:1a,b; wirewidth:1out; reg sel; scale_mux#(width)m1(.out(out),.sel(sel),.b(b),.a(a);initialbegin$monitor($s

3、time,sel=%b a=%b b=%b out=%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 $finish; end endmodule四、 仿真结果与波形LAB 2 :简单时序逻辑电路的设计一、实验目的掌握基本时序逻辑电路的实现。二、实验原理在 Verilog HDL 中,相对于组合逻辑电路,时序逻辑电路也有规定的

4、表述方式。在可综 合的Verilog HDL 模型中,我们常使用 always块和 (posedge clk)或(门egedge clk)的结 构来表述时序逻辑。在 always 块中,被赋值的信号都必须定义为 reg 型,这是由时序逻辑电路的特点所决 定的对于 reg 型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了正确地 观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位。三、源代码timescale 1 ns/100 psmodule counter(cnt,clk,data,rst_,load); output4:0cnt

5、 ;input 4:0data;inputclk;inputrst_;inputload;reg 4:0cnt;always(posedge clk or negedge rst_) if(!rst_)# cnt=0;else if(load) cnt=#3 data;else cnt=#4 cnt + 1;endmodule timescale 1 ns/1 ns module counter_test;wire4:0cnt;reg 4:0data;regrst_;regload;regclk;counter c1(t (cnt),.clk (clk),.data(data),.rst_(r

6、st_),.load(load);initial beginclk=0;forever begin#10 clk=1b1;#10 clk=1b0;endendinitialbegin$timeformat(-9,1,ns,9);$monitor(time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b,$stime,data,clk,rst_,load,cnt);$dumpvars(2,counter_test);endtask expect;input 4:0expects;if(cnt !=expects)begin$display(At time %t

7、cnt is %b and should be %b,$time,cnt,expects);$display(TEST FAILED);$finish;endendtaskinitialbegin(negedge clk)rst_,load,data=7b0_X_XXXXX;(negedge clk)expect(5h00);rst_,load,data=7b1_1_11101;(negedge clk)expect(5h1D);rst_,load,data=7b1_0_11101;repeat(5)(negedge clk); expect(5h02);rst_,load,data=7b1_

8、1_11111;(negedge clk)expect(5h1F); rst_,load,data=7b0_X_XXXXX;(negedge clk)expect(5h00);$display(TEST PASSED); $finish;end endmodule四、仿真结果与波形五、 思考题 该电路中, rst- 是同步还是异步清零端? 在的 always 块中 reset 没有等时钟,而是直接清零。所以是异步清零端。LAB 3 :简单时序逻辑电路的设计一、实验目的使用预定义的库元件来设计八位寄存器。二、实验原理 八位寄存器中,每一位寄存器由一个二选一 MUX 和一个触发器 dffr 组成,

9、当 load=1 , 装载数据;当 load=0 ,寄存器保持。对于处理重复的电路,可用数组条用的方式,使电 路描述清晰、简洁。三、源代码timescale 1 ns /1 nsmodule clock(clk);reg clk; output clk;initial beginclk=0; forever begin #10 clk=1b1;#10 clk=1b0;endend endmodule mux 及 dffr 模块调用代码mux mux7 (.out(n17), .sel(load), .b(data7), .a(out7) );dffr dffr7 (.q(out7),.d(n1

10、7),.clk(clk), .rst_(rst_);mux mux6 (.out(n16), .sel(load), .b(data6), .a(out6);dffr dffr6(.q(out6), .d(n16), .clk(clk), .rst_(rst_);mux mux5 (.out(n15), .sel(load), .b(data5), .a(out5);dffr dffr5 (.q(out5), .d(n15), .clk(clk), .rst_(rst_);mux mux4 (.out(n14), .sel(load), .b(data4), .a(out4);dffr dff

11、r4(.q(out4), .d(n14), .clk(clk), .rst_(rst_);mux mux3 (.out(n13), .sel(load), .b(data3), .a(out3); dffr dffr3 (.q(out3), .d(n13), .clk(clk), .rst_(rst_);mux mux2 (.out(n12), .sel(load), .b(data2), .a(out2);dffr dffr2(.q(out2), .d(n12), .clk(clk), .rst_(rst_);mux mux1 (.out(n11), .sel(load), .b(data1

12、), .a(out1) );dffr dffr1(.q(out1), .d(n11), .clk(clk), .rst_(rst_);mux mux0 (.out(n10), .sel(load), .b(data0), .a(out0) );dffr dffr0(.q(out0), .d(n10), .clk(clk), .rst_(rst_); 例化寄存器register r1(.data(data),.out(out),.load(load),.clk(clk),.rst_(rst_);例化时钟clock c1(.clk(clk);添加检测信号initialbegin$timeforma

13、t(-9,1,ns,9);$monitor(time=%t,clk=%b,data=%h,load=%b,out=%h,$stime,clk,data,load,out);$dumpvars(2,register_test);end四、仿真结果与波形LAB 4 :用 always 块实现较复杂的组合逻辑电路一、实验目的掌握用 always 实现组合逻辑电路的方法;了解assign与always两种组合逻辑电路实现方法之间的区别。二、实验原理仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下。适当地使用 always 来设计组合逻辑,会更具实效。本实验描述的是一个

14、简单的 ALU 指令译码电路的设计示例。 它通过对指令的判断, 对输入数据执行相应的操作,包括加、减、 或和传数据,并且无论是指令作用的数据还 是指令本身发生变化,结果都要做出及时的反应。示例中使用了电平敏感的 always 块,电平敏感的触发条件是指在 后括号内电平 列表的任何一个电平发生变化就能触发 always块的动作,并且运用了 case结构来进行 分支判断。在always中适当运用default (在case结构中)和else (子ifelse结构中),通常 可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg 型。如果不使用 default或else对缺省项进行说明,易产生意想

15、不到的锁存器。三、源代码电路描述always(opcode or data or accum)beginif(accum=8b00000000)# zero=1;else# zero=0; case(opcode) PASS0: # out =accum; PASS1: # out =accum;ADD: # out = data + accum;AND: # out =data&accum;XOR: # out =dataAaccum;PASSD: # out=data;PASS6:# out=accum;PASS7:# out=accum;default:# out=8bx;endcase

16、 end四、仿真结果与波形LAB 5 :存储器电路的设计一、实验目的设计和测试存储器电路。二、实验原理 本实验中,设计一个模块名为 mem 的存储器仿真模型,该存储器具有双线数据总线及 异步处理功能。由于数据是双向的,所以要注意,对 memory 的读写在时序上要错开。三、源代码自行添加的代码assign data= (read)?memoryaddr:8hZ;always (posedge write) beginmemoryaddr=data7:0;end四、仿真结果与波形LAB 6 :设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别一、实验目的 明确掌握阻塞赋值与非阻塞赋值的概念和区别; 了

17、解阻塞赋值的使用情况。二、实验原理 在 always 块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解 为并发执行的。 实际时序逻辑设计中, 一般情况下非阻塞赋值语句被更多的使用, 有时 为了在同一周期实现相互关联的操作,也使用阻塞赋值语句。三、源代码timescale 1 ns/ 100 psmodule blocking(clk,a,b,c); output3: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=

18、%d.,a,b,c); endendmoduletimescale 1 ns/ 100 psmodule non_blocking(clk,a,b,c); output3:0 b,c;input3:0 a;input clk;reg 3:0b,c;always (posedge clk) beginb=a;c=b; $display(Non_blocking:a=%d,b=%d,c=%d,a,b,c);end endmoduletimescale 1 ns/ 100 ps module compareTop; wire 3:0 b1,c1,b2,c2;reg3:0a;reg clk;initi

19、albeginclk=0;forever #50 clk=clk;endinitial$dumpvars (2,compareTop);initialbegina=4h3;$display();# 100 a =4h7;$display();# 100 a =4hf;$display();# 100 a =4ha;$display();# 100 a =4h2;$display();# 100 $display();$finish;end non_blocking nonblocking(clk,a,b2,c2);blocking blocking(clk,a,b1,c1); endmodul

20、e四、仿真结果与波形LAB 7 :利用有限状态机进行复杂时序逻辑的设计一、实验目的掌握利用有限状态机 (FSM) 实现复杂时序逻辑的方法。二、实验原理控制器是 CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件。 CPU 何时进行读指令,何时进行 RAM 和 I/O 端口的读写操作等,都由控制器来控制。三、源代码 补充代码 nexstate=state+1h01;case(state)1:begin sel=1;rd=0;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end2:begin sel=1;rd=1;ld_i

21、r=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end3:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end4:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end5:begin sel=0;rd=0;ld_ir=0;inc_pc=1;ld_pc=0;data_e=0;ld_ac=0;wr=0;if(opcode=HLT)halt=1;end6:beg

22、in sel=0;rd=alu_op;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 7:begin sel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=0;wr=0;if(opcode=SKZ) inc_pc=zero;if(opcode=JMP) ld_pc=1;end0:begin sel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=alu_op;inc_pc=(opcode=SKZ)&zer o|(opcode=JM

23、P);if(opcode=JMP)ld_pc=1;if(opcode=STO)wr=1;No.00000000No.00000000No.00000101No.00000001/1CTEMP:/1temporary variable00000001/1Dtime:/ 1con sta nt144 - max value00000110/1ELIMIT:/ 6con sta nt 1仿真结果与波形end第二部分电路综合ucli call;runRUNNING THE ADVAN匚ED DIAGOSTIC TESTTHIS TEST SHOULD HALT WITH PC 二 10 FC INST

24、R OF DATA ADR00 LDA5 bb00OLAND37c9102X0R斗9t)0203SKZ12093帖ADD25且0506SKZ1260607JMP10709XOR49c0903ADD25a9aSbSTOBddSbBeLIDA5ba9cedADD25d9deeSKZ1269e10HLT31GHALTEDAT PC10一、实验目的掌握逻辑综合的概念和流程,熟悉采用Design Compiler进行逻辑综合的基本方法。二、实验内容采用SYNOPSYS公司的综合工具 Design Compiler对实验7的做综合。三、源代码与实验指导书中相同。四、门级电路仿真结果与波形五、思考题1. 文件是verilog语言及的描述还是结构化的描述? 是结构化的描述。2. 文件中,对触发器的延迟包括哪些信息?包括对逻辑单元和管脚的上升 /下降时延的最大值、最小值和典型值。第三部分版图设计一、实验目的掌握版图设计的基本概念和流程,熟悉采用Sysnopsys ICC工具进行版图设计的方法。二、实验内容对电路综合输出的门级网表进行布局

温馨提示

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

评论

0/150

提交评论