ASIC实验报告
- 格式:docx
- 大小:612.63 KB
- 文档页数:11
可编程ASIC设计实训报告1.引言1.1 概述概述:可编程ASIC(Application-Specific Integrated Circuit)设计是一种针对特定应用领域进行定制优化的集成电路设计方法。
与传统的ASIC 设计相比,可编程ASIC设计可以在不改变硬件的情况下,通过重新编程实现不同的功能和逻辑。
在本报告中,我们将介绍可编程ASIC设计的基本概念和原理,以及在实训中搭建设计环境和进行设计实例分析的具体过程和方法。
通过本报告的学习,读者可以深入了解可编程ASIC设计的实践应用,以及进一步掌握ASIC设计的相关技术和方法。
文章结构部分的内容可以包括对整篇文章的组织架构和每个部分的内容概述。
可以介绍文章的逻辑顺序以及每个部分的重点内容和目的。
同时,文章结构部分也可以包括对整篇文章的写作目的和读者对象的介绍。
": , "3.2 成果展示": ,"3.3 展望":请编写文章1.2 文章结构部分的内容1.3 目的目的部分:通过本报告的撰写和实训内容的呈现,旨在让读者了解可编程ASIC设计的基本概念和原理,掌握实训环境搭建的方法和技巧,以及通过设计实例分析进行实际操作,从而提升对可编程ASIC设计的理解和应用能力。
同时,通过总结和成果展示,展示实训成果,激发更多人对可编程ASIC设计领域的兴趣,为未来的发展展望提供参考。
2.正文2.1 可编程ASIC设计简介可编程ASIC(Application Specific Integrated Circuit)是一种专门定制的集成电路,与传统的ASIC相比,可编程ASIC具有更高的灵活性和可编程性。
可编程ASIC设计允许工程师在硅片上实现特定的电路功能,同时又可以根据需求进行修改和重新配置,从而实现多种功能的实现。
可编程ASIC设计的主要特点包括灵活性、可编程性和高性能。
通过使用可编程ASIC,设计人员可以快速构建复杂的数字电路,同时减少电路设计的时间和成本。
电子工程学院ASIC专业实验报告班级:姓名:学号:班内序号:第一部分语言级仿真LAB 1:简单的组合逻辑设计一、实验目的掌握基本组合逻辑电路的实现方法;二、实验原理本实验中描述的是一个可综合的二选一开关,它的功能是当sel = 0时,给出out = a,否则给出结果out = b;在Verilog HDL中,描述组合逻辑时常使用assign结构;equal=a==b1:0是一种在组合逻辑实现分支判断时常用的格式;parameter定义的size参数决定位宽;测试模块用于检测模块设计的是否正确,它给出模块的输入信号,观察模块的内部信号和输出信号;三、源代码module scale_muxout,sel,b,a;parameter size=1;outputsize-1:0 out;inputsize-1:0b,a;input sel;assign out = sela:selb:{size{1'bx}};endmodule`define width 8`timescale 1 ns/1 nsmodule mux_test;reg`width:1a,b;wire`width:1out;reg sel;scale_mux`widthm1.outout,.selsel,.bb,.aa;initialbegin$monitor$stime,,"sel=%b a=%b b=%b out=%b",sel,a,b,out;$dumpvars2,mux_test;sel=0;b={`width{1'b0}};a={`width{1'b1}};5sel=0;b={`width{1'b1}};a={`width{1'b0}};5sel=1;b={`width{1'b0}};a={`width{1'b1}};5sel=1;b={`width{1'b1}};a={`width{1'b0}};5 $finish;endendmodule四、仿真结果与波形LAB 2:简单时序逻辑电路的设计一、实验目的掌握基本时序逻辑电路的实现;二、实验原理在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式;在可综合的Verilog HDL模型中,我们常使用always块和posedge clk或negedge clk的结构来表述时序逻辑;在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg 型数据,如果未对它进行赋值,仿真工具会认为它是不定态;为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位;三、源代码`timescale 1 ns/100 psmodule countercnt,clk,data,rst_,load;output4:0cnt ;input 4:0data;input clk;input rst_;input load;reg 4:0cnt;alwaysposedge clk or negedge rst_ifrst_cnt<=0;elseifloadcnt<=3 data;elsecnt<=4 cnt + 1;endmodule`timescale 1 ns/1 nsmodule counter_test;wire4:0cnt;reg 4:0data;reg rst_;reg load;reg clk;counter c1t cnt,.clk clk,.datadata,.rst_rst_,.loadload;initial beginclk=0;forever begin10 clk=1'b1;10 clk=1'b0;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;$dumpvars2,counter_test;endtask expect;input 4:0expects;ifcnt ==expectsbegin$display"At time %t cnt is %b and should be %b", $time,cnt,expects;$display"TEST FAILED";$finish;endendtaskinitialbeginnegedge clk{rst_,load,data}=7'b0_X_XXXXX;negedge clkexpect5'h00;{rst_,load,data}=7'b1_1_11101;negedge clkexpect5'h1D;{rst_,load,data}=7'b1_0_11101;repeat5negedge clk;expect5'h02;{rst_,load,data}=7'b1_1_11111;negedge clkexpect5'h1F;{rst_,load,data}=7'b0_X_XXXXX;negedge clkexpect5'h00;$display"TEST PASSED";$finish;endendmodule四、仿真结果与波形五、思考题该电路中,rst-是同步还是异步清零端在的always块中reset没有等时钟,而是直接清零;所以是异步清零端;LAB 3:简单时序逻辑电路的设计一、实验目的使用预定义的库元件来设计八位寄存器;二、实验原理八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;当load=0,寄存器保持;对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁; 三、源代码`timescale 1 ns /1 nsmodule clockclk;reg clk;output clk;initial beginclk=0;forever begin10 clk=1'b1;10 clk=1'b0;endendendmodulemux及dffr模块调用代码mux mux7.outn17,.selload,;dffr dffr7 .qout7, .dn17, .clkclk, .rst_rst_ ;mux mux6 .outn16, .selload, .bdata6, .aout6;dffr dffr6 .qout6, .dn16, .clkclk, .rst_rst_ ;mux mux5 .outn15, .selload, .bdata5, .aout5;dffr dffr5 .qout5, .dn15, .clkclk, .rst_rst_ ;mux mux4 .outn14, .selload, .bdata4, .aout4;dffr dffr4 .qout4, .dn14, .clkclk, .rst_rst_ ;.selload, .bdata3, .aout3;dffr dffr3 .qout3, .dn13, .clkclk, .rst_rst_ ;mux mux2 .outn12, .selload, .bdata2, .aout2;dffr dffr2 .qout2, .dn12, .clkclk, .rst_rst_ ;mux mux1 .outn11, .selload, .bdata1, .aout1;dffr dffr1 .qout1, .dn11, .clkclk, .rst_rst_ ;mux mux0 .outn10, .selload, .bdata0, .aout0;dffr dffr0 .qout0, .dn10,;例化寄存器register r1.datadata,.outout,.loadload,.clkclk,.rst_rst_;例化时钟clock c1.clkclk;添加检测信号initialbegin$timeformat-9,1,"ns",9;$monitor"time=%t,clk=%b,data=%h,load=%b,out=%h",$stime,clk,data,load,out;$dumpvars2,register_test;end四、仿真结果与波形LAB 4:用always块实现较复杂的组合逻辑电路一、实验目的掌握用always实现组合逻辑电路的方法;了解assign与always两种组合逻辑电路实现方法之间的区别;二、实验原理仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下;适当地使用always来设计组合逻辑,会更具实效;本实验描述的是一个简单的ALU指令译码电路的设计示例;它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时的反应;示例中使用了电平敏感的always块,电平敏感的触发条件是指在后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了case结构来进行分支判断;在always中适当运用default在case结构中和else子if…else结构中,通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg型;如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器;三、源代码电路描述alwaysopcode or data or accumbeginifaccum==8'b00000000zero=1;elsezero=0;caseopcodePASS0: out =accum;PASS1: out =accum;ADD: out = data + accum;AND: out =data&accum;XOR: out =data^accum;PASSD: out=data;PASS6: out=accum;PASS7: out=accum;default: out=8'bx;endcaseend四、仿真结果与波形LAB 5:存储器电路的设计一、实验目的设计和测试存储器电路;二、实验原理本实验中,设计一个模块名为mem的存储器仿真模型,该存储器具有双线数据总线及异步处理功能;由于数据是双向的,所以要注意,对memory的读写在时序上要错开;三、源代码自行添加的代码assign data= readmemoryaddr:8'hZ;always posedge writebeginmemoryaddr<=data7:0;end四、仿真结果与波形LAB 6:设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别一、实验目的明确掌握阻塞赋值与非阻塞赋值的概念和区别;了解阻塞赋值的使用情况;二、实验原理在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的;实际时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,也使用阻塞赋值语句;三、源代码`timescale 1 ns/ 100 psmodule blockingclk,a,b,c;output3:0b,c;input 3:0a;input clk;reg 3:0b,c;alwaysposedge clkbeginb =a;c =b;$display"Blocking: a=%d,b=%d,c=%d.",a,b,c;endendmodule`timescale 1 ns/ 100 psmodule non_blockingclk,a,b,c;output3:0 b,c;input3:0 a;input clk;reg 3:0b,c;always posedge clkbeginb<=a;c<=b;$display"Non_blocking:a=%d,b=%d,c=%d",a,b,c;endendmodule`timescale 1 ns/ 100 psmodule compareTop;wire 3:0 b1,c1,b2,c2;reg3:0a;reg clk;initialbeginclk=0;forever 50 clk=~clk;endinitial$dumpvars 2,compareTop;initialbegina=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"_______________________________";$finish;endnon_blocking nonblockingclk,a,b2,c2;blocking blockingclk,a,b1,c1;endmodule四、仿真结果与波形LAB 7:利用有限状态机进行复杂时序逻辑的设计一、实验目的掌握利用有限状态机FSM实现复杂时序逻辑的方法;二、实验原理控制器是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件;CPU何时进行读指令,何时进行RAM和I/O端口的读写操作等,都由控制器来控制;三、源代码补充代码nexstate<=state+1'h01;casestate1: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_ir=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;end 5:begin sel=0;rd=0;ld_ir=0;inc_pc=1;ld_pc=0;data_e=0;ld_ac=0;wr=0;ifopcode==`HLThalt=1;end6:beginsel=0;rd=alu_op;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end7:beginsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=alu_op;ld_ac=0;wr=0;ifopcode==`SKZinc_pc<=zero;ifopcode==`JMPld_pc=1;end0:beginsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=alu_op;ld_ac=alu_op;inc_pc=opcode==`SKZ&zero||opcode==`JMP;ifopcode==`JMPld_pc=1;ifopcode==`STOwr=1;endNo.00000000 No.00000000 No.00000101 No.00000001 // 1C TEMP: //1 temporary variable00000001 // 1D time: // 1 constant 144 - max value 00000110 // 1E LIMIT: // 6 constant 1一、仿真结果与波形第二部分电路综合一、实验目的掌握逻辑综合的概念和流程,熟悉采用Design Compiler进行逻辑综合的基本方法;二、实验内容采用SYNOPSYS公司的综合工具Design Compiler对实验7的做综合;三、源代码与实验指导书中相同;四、门级电路仿真结果与波形五、思考题1.文件是verilog语言及的描述还是结构化的描述是结构化的描述;2.文件中,对触发器的延迟包括哪些信息包括对逻辑单元和管脚的上升/下降时延的最大值、最小值和典型值;第三部分版图设计一、实验目的掌握版图设计的基本概念和流程,熟悉采用Sysnopsys ICC工具进行版图设计的方法;二、实验内容对电路综合输出的门级网表进行布局布线;三、源代码与实验指导书中相同;四、仿真结果与波形布局规划后结果未产生core ring和mesh前产生core ring和mesh后电源线和电影PAD连接后filler PAD填充后布局后结果时钟树综合后结果布线后结果寄生参数的导出和后仿五、思考题1.简述ICC在design setup阶段的主要工作;创建设计库,读取网表文件并创建设计单元,提供并检查时间约束,检查时钟;在对之前的数据与信息进行读取与检查后保存设计单元;2.为什么要填充filler padfiller pad把分散的pad单元连接起来,把pad I/O区域供电连成一个整体;使它们得到持续供电并提高ESD保护能力;3.derive_pg_connection的作用是什么描述有关电源连接的信息;4.简述floorplan的主要任务;对芯片大小、输入输出单元、宏模块进行规划,对电源网络进行设计;5.简述place阶段的主要任务;对电路中的延时进行估计与分析,模拟时钟树的影响,按照时序要求,对标准化单元进行布局;6.简述CTS的主要步骤;设置时钟树公共选项;综合时钟树;重新连接扫描链;使能传播时钟;Post-CTS布局优化;优化时钟偏移;优化时序;实验总结经过数周的ASIC专业实验,我对芯片设计流程、Verilog HDL语言、Linux基本指令和Vi文本编辑器有了基本的了解;虽然之前对芯片设计、VHDL一无所知,但通过实验初步熟悉了ASIC的体系结构和VHDL的基本语法,对电路中时钟、寄生参数、元件布局带来的影响也有了了解;我在实验中也遇到了许多问题,但我在老师、助教、同学的帮助下解决了这些问题,也有了更多收获;通过这次ASIC专业实验,我加深了对本专业的认识;我会继续努力成为合格的电子人;。
ASIC技术实验报告姓名:电子协会学号:2007050104xx 指导老师:高嵩实验二1位全加器VHDL文本输入设计一、实验内容设计1位全加器二、实验步骤:1. 新建一工作文件夹adder;2. 编辑文件文本文件or2a.vhd、adder.vhd、f_adder.vhd,三个文件全部保存在adder文件夹中;3. 选择器件型号为EPM7128S-PL8410,进行综合;4. 编辑波形仿真文件f_adder.gdf,启动仿真器Simulator,观察输出波形的情况,仿真波形如图:5. 锁定引脚,编译并编程下载;6. 采用NO.1结构图进行硬件测试,结果正确;三、编译程序如下所示:--或门逻辑描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a ISPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a ISBEGINc<=a OR b;END ARCHITECTURE one;--半加器描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;1ENTITY adder ISPORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END ENTITY adder;ARCHITECTURE fh1 OF adder ISBEGINso<=NOT(a XOR (NOT b));co<=a AND b;END ARCHITECTURE fh1;--1位二进制全加器顶层设计描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder ISPORT(ain,bin,cin:IN STD_LOGIC;cout,sum:OUT STD_LOGIC);END ENTITY f_adder;ARCHITECTURE fd1 OF f_adder ISCOMPONENT adderPORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END COMPONENT;COMPONENT or2aPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f:STD_LOGIC;BEGINu1:adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e);u2:adder PORT MAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2a PORT MAP(a=>d,b=>f,c=>cout);END ARCHITECTURE fd1;实验五2选1多路选择器VHDL设计一、实验内容:实现2选1多路选择器的VHDL完整描述,可以直接综合出实现相应功能的逻辑电路及其功能器件。
北京邮电大学ASIC原理课程实验实验报告设计要求:(3,1,8)卷积码编码器学院:电子工程学院专业:电子信息科学与技术班级:学号:姓名:2013年6月20日一、设计要求)卷积码编码器,并对其进行仿真。
3,1,8verilog语言编写一个(运用二、卷积码编码器原理卷积码拥有良好的纠错性能,是一种被广泛应用于移动通信的信道编码系统。
一个(n,k,m)卷积码编码器由k个输入,具有m阶存储的n个输出的线形时序电路实现。
通常,n和k是较小的整数,且k<n,但m比较大。
当k=1时,信息序列不再分成小块,以便可以连续处理。
卷积码(n,k,m)表示码率R=k/n,编码器级数m=s-1,其中s是码约束长度。
反向CDMA信道使用(3,1,8)卷积码,码率R=1/3,约束长度为9,由于k =1,n=3,m=8,则该卷积编码器包含单个输入端,一个8级移位寄存器,三个模2加法器和一个3向编码器输出的连续转向器。
编码器每输入一位信息比特将产生三位编码输出。
这些编码符号中,第一个输出符号G0是生成序列g1⑴编码产生的符号,第二个输出符号G1是由生成序列g1⑵编码产生的符号,最⑶编码产生的符号,如下图所示。
是由生成序列g1后一个输出符号G2该电路由一个八位寄存器、三个码生成逻辑、一个时隙发生器和一个四选一由时隙发clk1C[1:0]和G1G0、和G2,码选择信号mux复用器构成。
的输入为Yout。
生器产生,输出信号即为整个电路的输出时,电路清零。
,异步清零信号置为0rst=0卷积编码器的初始状态用rst,初始状态之后输出的第一个编码符号由生成0卷积编码器的初始状态全为⑵,)g1101101111=g1g1序列⑴编码产生。
这里,三个生成序列分别为⑴(。
=(111001001)⑶=(110110011), g1.即三个生成多项式分别为:C0=1+X+X2+X3+X5+X6+X8 (557)C1=1+X+X4+X5+X7+X8 (663)C2=1+X3+X6+X7+X8 (711)三、实验设计与实现根据以上实验要求,我们首先设想了分为几个模块,然后将各个模块进行整合实现编码器的功能,根据我们的设想编写相应的verilog程序,进行调试、实现。
《ASIC设计》课程实验实验报告学院:电子工程学院班级:姓名:学号:班内序号:组员:指导老师:2014年5月实验一 多路选择器的设计一、实验目的:1、掌握门级电路与行为级电路设计的区别;2、掌握逻辑电路设计方法;3、熟悉测试程序的编写;4、注意代码规范性要求。
二、实验内容:1、设计一个有两位选择信号的四选一多路选择器,可以根据控制信号从两个或多个输入源中选择一个予以输出。
2、用基本逻辑门来实现多路选择器,即门级语言进行描述。
3、用行为级语言进行描述,通过case 语句重新设计仿真。
4、编写多路选择器的测试激励模块,并通过Synopsys 工具进行仿真。
s2 s1 outi3 i2 i1 i0 四选一 多路选择器三、实验过程及结果:1、门级语言描述:测试文件:仿真波形:由仿真波形可以看出,当两位选择信号是s[1:0]=00=0时,选择第0路输入源予以输出,当s[1:0]=01=1时,选择第1路输入源予以输出,当s[1:0]=10=2时,选择第2路输入源予以输出,当s[1:0]=11=3时,选择第3路输入源予以输出,实现了四选一多路选择器的功能。
2、行为级语言描述:测试文件:仿真波形:仿真波形分析同门级语言描述仿真分析。
四、实验思考题:1、门级电路与行为级电路设计的主要区别是什么?答:行为级是行为的描述,即对所需实现功能的语言描述;而门级是实例引用,很多行为级描述是不能逻辑综合的。
2、比较门级电路与行为级电路的仿真波形截图,说出其不同点。
答:由于门级电路的截图没有输出中间状态s1n、s0n、y0、y1、y2和y3,因此门级电路与行为级电路在仿真波形图上看不出有什么区别。
而事实上门级电路有中间状态而行为级电路则没有。
3、如果设计中改用开关级建模,你的思路是什么?答:若使用开关级建模,则利用开关导通与高阻来决定输出,采用4个cmos 开关,输入为四位i0~i3,s0、s1为控制信号,两个wire型中间变量bar0、sbar1。
asic实验报告ASIC实验报告引言ASIC(Application-Specific Integrated Circuit)是一种专用集成电路,它被广泛应用于各种领域,包括通信、计算机、医疗、汽车等。
本实验报告旨在介绍ASIC的基本原理、设计流程以及应用案例,以便更好地理解和应用这一技术。
一、ASIC的基本原理ASIC是根据特定应用需求而设计的集成电路,相比通用集成电路(如微处理器),ASIC具有更高的性能和更低的功耗。
ASIC的设计基于硬件描述语言(HDL),如Verilog或VHDL,通过对电路逻辑的描述来实现特定功能。
ASIC的设计流程包括电路设计、逻辑综合、布局布线和验证等步骤,最终生成可用于生产的掩模。
二、ASIC的设计流程1. 电路设计:在这一阶段,根据应用需求和功能规格书,设计师使用HDL语言描述电路的逻辑功能。
这包括组合逻辑和时序逻辑的设计,并考虑到时钟频率、功耗和面积等方面的优化。
2. 逻辑综合:逻辑综合将HDL描述的电路转化为门级电路的表示形式。
在这一过程中,综合工具会根据约束条件(如时钟频率)进行优化,并生成电路的结构和时序信息。
3. 布局布线:布局布线是将逻辑综合结果映射到物理层面的过程。
此阶段包括将逻辑电路映射到物理单元(如逻辑门、寄存器)和进行连线布局,以满足时序和电气约束。
4. 验证:验证是ASIC设计流程中至关重要的一步。
通过仿真和验证工具,设计师可以验证电路的功能和时序,并进行调试和优化。
三、ASIC的应用案例1. 通信领域:ASIC在通信领域中扮演着重要的角色。
例如,ASIC可以用于实现高性能的调制解调器,以提供更快速和可靠的数据传输。
此外,ASIC还可以用于实现各种通信协议的编解码器,如以太网、USB和HDMI等。
2. 计算机领域:ASIC在计算机领域中也有广泛的应用。
例如,ASIC可以用于实现高性能的图形处理器(GPU),以提供更好的图形渲染和计算性能。
ASIC实验总结报告学院:班级:姓名:学号:序号:HDB3码制变换的功能与时序验证一、实验目的1、学习和掌握利用Verilog进行专用集成电路设计的流程与方法。
2、熟悉编写较完整的测试模块进行接近真实的完整测试。
3、熟悉仿真软件Modelsim的使用方法。
二、实验要求用Verilog HDL进行HDB3解码电路描述,并写出测试文件,电路仿真结果正确。
取时钟频率=2M,信号频率=2M。
三、实验原理1、HDB3码由功率谱的特性,我们知道,NRZ 单极性不归零码不适合在信道上传输,传号交替反转码(AMI码)为一种双极性码,为了克服AMI 码连零可能较多的缺点,必须提出新的编码方案,对NRZ码中的连零作适当的处理。
高密度双极性码就是针对这一问题而提出来的一种编码方案。
所谓高密度,是指传输码中“l”码的密度较高,连“0”码的个数最多为n 个,这种码叫HDBn码。
在实用中,n 一般等于3,这就是HDB3 码。
当连零数不大于3 时,HDB3 码与AMI 码的编码规则相同。
当连零数超过3 时,以四个连零作为“一节”,分别用不同的取代节取代这四个连零。
取代节有两种,分别为“000V”和“B00V”,这里的B 和V 均为传号脉冲。
这样,传输码中的连零数就被控制在3 个以内。
在取代节中,V 叫做破坏点,用它在码流中破坏极性交替这一原则,以便接收端识别。
B 码是为了平衡正负极性而加入的一个附加传号,它并不破坏极性交替的原则,因此又称它为非破坏点。
HDB3 码的取代原则为:(1)出现四个连零用取代节取代;(2)当相邻破坏点V 中间有奇数个原始传号(不包括B 码)时,用"000V”取代;(3)当相邻破坏点V 中间有偶数个原始传号时,用"B00V'取代;(4)用"B00V'取代时,B 码和V 码与它们前面一个原始传号(或V 码)极性相反;(5)用"000V'取代时,V 码与它前面的传号极性相同。
ASIC设计实验报告学号:20072599姓名:庄俊慧专业:微电子指导老师:王丹实验日期:2010.5一.实验目的:使用综合工具(Design Compiler)对一个8 位全加器逻辑综合,并产生一个门级网表;利用该网表使用自动布局布线工具(Silicon Ensemble)生成一个全加器的版图二.实验要求:在综合工具的条件使用下要求生成一个8位全加器的版图。
三.实验步骤:首先输入8 位全加器verilog 代码:module adder8 (Cout,S,A,Cin);output Cout;output [7:0] S;input[7:0] A;input[7:0] B;inputCin;reg[8:0] SUM;reg[7:0] S;regCout;wire [7:0] A,B;always@(AorB or Cin)beginSUM [8:0] =A+B+Cin;S = SUM [7:0];Cout = SUM [8];endendmodule读入代码:设置3 个相关工艺库:编译:综合后的顶层结构:下面进行自动布局布线,打开Silicon Ensemble (sedsm&):导入库的转换格式:准备工作完成开始布局布线:出图并圈定芯片:保存之。
然后进行如下步骤: 设置电源环放置输入输出放置单元得:添加管脚后可得:打开icfb&输入“tutorial”作为库的名字,“adder8”为单元名字,“autoRouted”作为图像名字打开View 中的autoRouted将提取图转换为版图,这里需要改变几个参数点击AddCriteria 然后做如下图的几个改动:保存后最后layout:实验总结:做了以上实验以后,我基本熟悉了综合工具(Design Compiler)的各项基本操作。
提升了自己的实践能力,并初步了解了版图的制作方法我想以后在版图制作中我会更加熟练地。
ASIC专业实验实验报告实验名称:8位RISC_CPU的设计学号:班级:姓名:指导老师:报告提交日期:一实验要求1.基本要求:依照实验内容做实验,必须将实验在规定时间内完成。
在对CPU整个系统进行语言级功能仿真结果正确之后,对其中的控制块进行综合,检查其功耗和最高工作速度,进行门级仿真,并且保证门级仿真结果正确之后,进行控制器模块的版图设计及验证。
2.更高要求(可选):完成整个CPU的版图设计或者完成一个帧同步检测电路的版图设计。
二实验内容本实验完成一个8位RISI_CPU系统。
(RISC:Reduced Instruction Set Computer)它是一种80年代才出现的CPU,与一般的CPU相比,不仅只是简化了指令系统,而且通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。
从实现的方法上,它的时序控制信号部件使用了硬布线逻辑,而不是采用微程序控制方式,故产生控制序列的速度要快得多,因为省去了读取指令的时间。
它由八个独立的逻辑部件所组成:(1)时钟发生器(5)数据控制器(2)指令寄存器(6)状态控制器(3)累加器(7)程序计数器(4)ALU(8)地址选择器三 RISC_CPU的基本架构一个基本的CPU要包括三部分功能:数据存储、数据运算和控制部分。
与之相对应的硬件结构也分为三部分:存储器、数据通路和控制器。
存储器存放指令和数据;数据通路包括ALU、程序计数器等,主要功能是对操作数进行运算,得到结果,并产生程序计数器的值,作为要执行的下一条指令的地址;控制器内有指令寄存器,它对指令进行译码,产生相应的控制信号,完成对存储器和数据通路部分的控制。
存储器、数据通路和控制器这三部分的基本关系下图所示:图2-1 CPU基本结构存储器中存放了要执行的指令和相应数据。
存储器的读写信号由控制器给出。
存储器的地址来源有两个:程序计数器和指令寄存器。
在取新指令时,用程序计数器的值作为存储器地址;在执行指令时,用指令中的地址部分作为存储器地址。
数据通路主要包括累加器、程序计数器和算术逻辑单元。
累加器用于保存参加运算的数据以及运算的中间结果。
实际上,累加器也是寄存器,不过,它有特殊性,即许多指令执行过程以累加器为中心。
往往在运算指令前,累加器中存放一个操作数,指令执行后,由累加器保存运算结果。
另外输入输出指令一般也通过累加器来完成。
程序计数器指向下一条要执行的指令。
由于程序一般存放在内存的一个连续区域,所以,顺序执行程序时,每取一个指令字节,程序计数器便加一。
算术逻辑单元是专门用来处理各种运算的数据信息的,它可以进行加、减、乘、除算术运算和与、或、非、异或等逻辑运算。
控制器产生相应的控制信号送到时序和控制逻辑电路,从而,组合成外部电路所需要的时序和控制信号。
这些信号送往其他部件,以控制这些部件协调工作。
对图2-1中的结构进行细化,可以得到一个简单的架构,如下图所示。
该CPU采用总线结构,即控制器所需的指令和数据通路所需的数据都是从总线上得到的。
图2-2 CPU的简单架构四 RISC-CPU模块的划分计算机进行信息处理可分为两个步骤:一、将数据和程序(即指令序列)输入到计算机的存储器中。
二、从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。
CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。
因此它必须具有以下基本功能:取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。
分析指令:即指令译码。
是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。
执行指令:根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。
由功能分析,RISC-CPU应至少包含八个基本组成部件,即:时钟发生器、指令寄存器、累加器、算术逻辑单元、数据输出控制器、地址多路器、程序计数器、状态控制器,各个模块之间的互连关系如下图:图2-3 RISC-CPU结构图1.时钟发生器(clkgen):产生一系列的时钟信号送往CPU 其他部件;2.指令寄存器(register):存储指令;3.累加器(accum):存放算术逻辑单元当前的结果,它也是算术逻辑单元双目运算中的一个数据来源;4.算术逻辑单元(alu):根据输入的8 种不同操作码分别实现相应的加、与、读、写、异或,跳转等指令;5.数据输出控制器(datactl):控制累加器的数据输出;6.状态控制器(control):CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件;7.程序计数器(counter):提供指令地址,以便读取指令;8.地址多路器(adr):选择输出的地址是PC(程序计数)地址还是跳转的目标地址。
五实验过程LAB1简单的组合逻辑设计目的:掌握基本组合逻辑电路的实现方法在Verilog HDL中,描述组合逻辑结构常使用assign结构。
LAB2简单时序逻辑电路的设计目的:掌握基本时序逻辑电路的实现在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式,在可综合的Verilog HDL模型,我们通常使用always块和@(posedgeclk)或@(negedgeclk)的结构来表述时序逻辑。
!在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的,对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态,为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号rst_,当rst_为低电平时,对电路中的寄存器进行复位。
LAB3简单时序逻辑电路的设计目的:使用预定义的库文件来设计八位寄存器在本实验中,对于处理重复的电路,可用数组调用的方式,使电路的描述清晰,简洁。
LAB4用always块实现较复杂的组合逻辑电路目的:1.掌握用always实现组合逻辑电路的方法;2.了解assign与always两种组合逻辑电路实现方法之间的区别仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方会显得冗长且效率低下。
而适当地采用always来设计组合逻辑,往往会更具实效。
在本实验中使用了电平敏感的always块,所谓电平敏感的触发条件是指在@后的括号内电平列表中的任何一个电平发生变化,就能触发always块的动作,并且运用了case结构来进行分支判断,不但设计思想得到直观的体现,而且代码看起来非常整齐、便于理解。
LAB5存储器电路的设计目的:设计和测试存储器电路在本实验中,设计一个模块名为mem的存储器仿真模型,该存储器模型具有双向数据总线及异步处理功能。
由于数据是双向的,所以要注意,对memory的读写在时序上要错开。
在设计中,当read为高电平时,读出memory的数据到data上;在write的上升沿,将data总线上的数据写入memory。
LAB6设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别目的:1.明确掌握阻塞赋值与非阻塞赋值的概念和区别2.了解阻塞赋值的使用情况阻塞赋值与非阻塞赋值,在教材中我们已经了解了它们之间在语法上的区别以及综合后所得到的电路结构上的区别。
在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。
实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。
LAB7利用有限状态机进行复杂时序逻辑的设计目的:掌握利用有限状态机(FSM)实现复杂时序逻辑的方法状态控制器是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。
CPU何时进行读指令,何时进行RAM和I/O端口的读写等操作,都由控制器来控制。
本状态机由八个时钟周期组成,前四个时钟周期用来从存储器取数据,后四个时钟周期发出不同的控制信号,以控制指令的进行。
LAB8通过模块之间的调用实现自顶向下CPU的设计目的:学习和使用层次化、结构化设计方法现代硬件系统的设计过程与软件系统的开发相似,设计一个大规模的集成电路往往由模块多层次的引用和组合构成。
层次化、结构化的设计过程,能使复杂的系统容易控制和调试。
在Verilog HDL中,被引用的子模块在综合时作为其父模块的一部分被综合,形成相应的电路结构。
在进行模块实例引用时,必须注意的是模块之间对应的端口,即子模块的端口与父模块的内部信号必须明确无误地一一对应,否则容易产生意想不到的后果。
在本实验中,实现了一个RISC_CPU系统。
它的八个独立逻辑部件已分别在前面的设计中完成,在这里将它们合并为一个模块显得目的明确、层次清晰。
六仿真和综合1CPU的测试测试代码@00 101_01110 // 00 LDA DATA1 ACC=AA100_01110 // 01 XOR DATA1^ACC ACC=00001_00000 // 02 SKZ000_00000 // 03 HLT010_01110 // 04 ADD DATA1 ACC=AA011_01111 // 05 AND DATA2&ACC ACC=00001_00000 // 06 SKZ000_00000 // 07 HLT101_01111 // 08 LDA DATA2 ACC=55110_10000 // 09 STO DATA DATA=55001_00000 // 0A SKZ111_01101 // 0B JMP HLT PASS 0D000_00000 // 0C HLT000_00000 // 0D HLT PASS@0E 10101010 // 0E DATA1=AA01010101 // 0F DATA2=5500000000 // 10 DATA=00测试结果及其分析由测试代码可知,程序在0d处结束,仿真结果是正确的,测试通过。
2综合综合后的门级电路图power report由上图可知,此电路的功耗满足要求。
timing report由上图可知,此电路的时延与电路的时钟周期相比很小,工作速度满足要求。
3门级电路仿真门级电路仿真结果此时,延迟为3000ps或者2000ps,精确度只能到千位。
添加+maxdelays选项后的门级仿真结果添加maxdelays后,延迟变化为3430ps,2430ps,2730ps,1700ps,2690ps等等两图比较可知,maxdelays限制了门级电路的延迟时间。
七.版图设计设计完成的版图综合后仿真结果增加maxdelays与否不影响电路延迟。
八实验过程中的遇到的问题及解决办法1)用格雷码来给状态机的各个状态值编码(lab7)在电路中当有两个或两个以上输入变量同时发生变化时,电路可能出现功能冒险(俗称毛刺),为了避免功能冒险影响电路的工作,所以给状态机的各个状态值用格雷码来编码。