北邮电子院专业实验报告Word文件下载.docx

上传人:b****5 文档编号:18679485 上传时间:2022-12-31 格式:DOCX 页数:28 大小:1.81MB
下载 相关 举报
北邮电子院专业实验报告Word文件下载.docx_第1页
第1页 / 共28页
北邮电子院专业实验报告Word文件下载.docx_第2页
第2页 / 共28页
北邮电子院专业实验报告Word文件下载.docx_第3页
第3页 / 共28页
北邮电子院专业实验报告Word文件下载.docx_第4页
第4页 / 共28页
北邮电子院专业实验报告Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

北邮电子院专业实验报告Word文件下载.docx

《北邮电子院专业实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《北邮电子院专业实验报告Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

北邮电子院专业实验报告Word文件下载.docx

initial

begin

$monitor($stime,,"

sel=%ba=%bb=%bout=%b"

sel,a,b,out);

$dumpvars(2,mux_test);

sel=0;

b={`width{1'

b0}};

a={`width{1'

b1}};

#5sel=0;

#5sel=1;

#5$finish;

end

四、仿真结果与波形

LAB2:

简单时序逻辑电路的设计

掌握基本时序逻辑电路的实现。

在VerilogHDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。

在可综合的VerilogHDL模型中,我们常使用always块和@(posedgeclk)或@(negedgeclk)的结构来表述时序逻辑。

在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。

为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位。

`timescale1ns/100ps

modulecounter(cnt,clk,data,rst_,load);

output[4:

0]cnt;

input[4:

0]data;

inputclk;

inputrst_;

inputload;

reg[4:

0]cnt;

always@(posedgeclkornegedgerst_)

if(!

rst_)

#cnt<

=0;

else

if(load)

cnt<

=#3data;

=#4cnt+1;

endmodule

modulecounter_test;

wire[4:

reg[4:

regrst_;

regload;

regclk;

counterc1

t(cnt),

.clk(clk),

.data(data),

.rst_(rst_),

.load(load)

);

initialbegin

clk=0;

foreverbegin

#10clk=1'

b1;

b0;

initial

$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);

taskexpect;

0]expects;

if(cnt!

==expects)begin

$display("

Attime%tcntis%bandshouldbe%b"

$time,cnt,expects);

TESTFAILED"

);

$finish;

endtask

@(negedgeclk)

{rst_,load,data}=7'

b0_X_XXXXX;

@(negedgeclk)expect(5'

h00);

b1_1_11101;

h1D);

b1_0_11101;

repeat(5)@(negedgeclk);

expect(5'

h02);

b1_1_11111;

h1F);

TESTPASSED"

五、思考题

该电路中,rst-是同步还是异步清零端

在的always块中reset没有等时钟,而是直接清零。

所以是异步清零端。

LAB3:

使用预定义的库元件来设计八位寄存器。

八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;

当load=0,寄存器保持。

对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。

`timescale1ns/1ns

moduleclock(clk);

regclk;

outputclk;

initialbegin

clk=0;

foreverbegin

#10clk=1'

end

mux及dffr模块调用代码

muxmux7

(.out(n1[7]),

.sel(load),

.b(data[7]),

.a(out[7])

dffrdffr7

(.q(out[7]),

.d(n1[7]),

.clk(clk),

.rst_(rst_)

muxmux6

(.out(n1[6]),

.b(data[6]),

.a(out[6])

dffrdffr6

(.q(out[6]),

.d(n1[6]),

muxmux5

(.out(n1[5]),

.b(data[5]),

.a(out[5])

dffrdffr5

(.q(out[5]),

.d(n1[5]),

muxmux4

(.out(n1[4]),

.b(data[4]),

.a(out[4])

dffrdffr4

(.q(out[4]),

.d(n1[4]),

muxmux3

(.out(n1[3]),

.b(data[3]),

.a(out[3])

dffrdffr3

(.q(out[3]),

.d(n1[3]),

muxmux2

(.out(n1[2]),

.b(data[2]),

.a(out[2])

dffrdffr2

(.q(out[2]),

.d(n1[2]),

muxmux1

(.out(n1[1]),

.b(data[1]),

.a(out[1])

dffrdffr1

(.q(out[1]),

.d(n1[1]),

muxmux0

(.out(n1[0]),

.b(data[0]),

.a(out[0])

dffrdffr0

(.q(out[0]),

.d(n1[0]),

例化寄存器

registerr1

.data(data),

.out(out),

.load(load),

.clk(clk),

.rst_(rst_)

例化时钟

clockc1

.clk(clk)

添加检测信号

begin

$timeformat(-9,1,"

$monitor("

time=%t,clk=%b,data=%h,load=%b,out=%h"

$stime,clk,data,load,out);

$dumpvars(2,register_test);

LAB4:

用always块实现较复杂的组合逻辑电路

掌握用always实现组合逻辑电路的方法;

了解assign与always两种组合逻辑电路实现方法之间的区别。

仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下。

适当地使用always来设计组合逻辑,会更具实效。

本实验描述的是一个简单的ALU指令译码电路的设计示例。

它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时的反应。

示例中使用了电平敏感的always块,电平敏感的触发条件是指在@后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了case结构来进行分支判断。

在always中适当运用default(在case结构中)和else(子if…else结构中),通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg型。

如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器。

电路描述

always@(opcodeordataoraccum)

if(accum==8'

b00000000)

#zero=1;

else

#zero=0;

case(opcode)

PASS0:

#out=accum;

PASS1:

ADD:

#out=data+accum;

AND:

#out=data&

accum;

XOR:

#out=data^accum;

PASSD:

#out=data;

PASS6:

#out=accum;

PASS7:

default:

#out=8'

bx;

endcase

LAB5:

存储器电路的设计

设计和测试存储器电路。

本实验中,设计一个模块名为mem的存储器仿真模型,该存储器具有双线数据总线及异步处理功能。

由于数据是双向的,所以要注意,对memory的读写在时序上要错开。

自行添加的代码

assigndata=(read)memory[addr]:

8'

hZ;

always@(posedgewrite)

memory[addr]<

=data[7:

0];

LAB6:

设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

明确掌握阻塞赋值与非阻塞赋值的概念和区别;

了解阻塞赋值的使用情况。

在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的。

实际时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,也使用阻塞赋值语句。

`timescale1ns/100ps

moduleblocking(clk,a,b,c);

output[3:

0]b,c;

input[3:

0]a;

inputclk;

reg[3:

always@(posedgeclk)

b=a;

c=b;

Blocking:

a=%d,b=%d,c=%d."

a,b,c);

modulenon_blocking(clk,a,b,c);

output[3:

0]b,c;

input[3:

0]a;

reg[3:

always@(posedgeclk)

b<

=a;

c<

=b;

$display("

Non_blocking:

a=%d,b=%d,c=%d"

modulecompareTop;

wire[3:

0]b1,c1,b2,c2;

reg[3:

forever#50clk=~clk;

$dumpvars(2,compareTop);

a=4'

h3;

_______________________________"

#100a=4'

h7;

hf;

ha;

h2;

#100$display("

$finish;

non_blockingnonblocking(clk,a,b2,c2);

blockingblocking(clk,a,b1,c1);

LAB7:

利用有限状态机进行复杂时序逻辑的设计

掌握利用有限状态机(FSM)实现复杂时序逻辑的方法。

控制器是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。

CPU何时进行读指令,何时进行RAM和I/O端口的读写操作等,都由控制器来控制。

补充代码

nexstate<

=state+1'

h01;

case(state)

1:

beginsel=1;

rd=0;

ld_ir=0;

inc_pc=0;

halt=0;

ld_pc=0;

data_e=0;

ld_ac=0;

wr=0;

2:

rd=1;

3:

ld_ir=1;

4:

5:

beginsel=0;

inc_pc=1;

if(opcode==`HLT)

halt=1;

6:

rd=alu_op;

7:

data_e=!

alu_op;

if(opcode==`SKZ)

inc_pc<

=zero;

if(opcode==`JMP)

ld_pc=1;

0:

ld_ac=alu_op;

inc_pc=(opcode==`SKZ)&

zero||(opcode==`JMP);

if(opcode==`STO)

wr=1;

No.

00000000No.

00000101No.

00000001//1CTEMP:

//1temporaryvariable

00000001//1Dtime:

//1constant144-maxvalue

00000110//1ELIMIT:

//6constant1

//1FAND1:

//FFand

一、

仿真结果与波形

第二部分电路综合

掌握逻辑综合的概念和流程,熟悉采用DesignCompiler进行逻辑综合的基本方法。

二、实验内容

采用SYNOPSYS公司的综合工具DesignCompiler对实验7的做综合。

与实验指导书中相同。

四、门级电路仿真结果与波形

1.文件是verilog语言及的描述还是结构化的描述

是结构化的描述。

2.文件中,对触发器的延迟包括哪些信息

包括对逻辑单元和管脚的上升/下降时延的最大值、最小值和典型值。

第三部分版图设计

掌握版图设计的基本概念和流程,熟悉采用SysnopsysICC工具进行版图设计的方法。

对电路综合输出的门级网表进行布局布线。

布局规划后结果

未产生corering和mesh前

产生corering和mesh后

电源线和电影PAD连接后

fillerPAD填充后

布局后结果

时钟树综合后结果

布线后结果

寄生参数的导出和后仿

1.简述ICC在designsetup阶段的主要工作。

创建设计库,读取网表文件并创建设计单元,提供并检查时间约束,检查时钟。

在对之前的数据与信息进行读取与检查后保存设计单元。

2.为什么要填充fillerpad

fillerpad把分散的pad单元连接起来,把padI/O区域供电连成一个整体。

使它们得到持续供电并提高ESD保护能力。

3.derive_pg_connection的作用是什么

描述有关电源连接的信息。

4.简述floorplan的主要任务。

对芯片大小、输入输出单元、宏模块进行规划,对电源网络进行设计。

5.简述place阶段的主要任务。

对电路中的延时进行估计与分析,模拟时钟树的影响,按照时序要求,对标准化单元进行布局。

6.简述CTS的主要步骤。

设置时钟树公共选项;

综合时钟树;

重新连接扫描链;

使能传播时钟;

Post-CTS布局优化;

优化时钟偏移;

优化时序。

实验总结

经过数周的ASIC专业实验,我对芯片设计流程、VerilogHDL语言、Linux基本指令和Vi文本编辑器有了基本的了解。

虽然之前对芯片设计、VHDL一无所知,但通过实验初步熟悉了ASIC的体系结构和VHDL的基本语法,对电路中时钟、寄生参数、元件布局带来的影响也有了了解。

我在实验中也遇到了许多问题,但我在老师、助教、同学的帮助下解决了这些问题,也有了更多收获。

通过这次ASIC专业实验,我加深了对本专业的认识。

我会继续努力成为合格的电子人。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

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

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