电子电路设计训练数字EDA部分.docx

上传人:b****6 文档编号:3065907 上传时间:2022-11-17 格式:DOCX 页数:31 大小:492.41KB
下载 相关 举报
电子电路设计训练数字EDA部分.docx_第1页
第1页 / 共31页
电子电路设计训练数字EDA部分.docx_第2页
第2页 / 共31页
电子电路设计训练数字EDA部分.docx_第3页
第3页 / 共31页
电子电路设计训练数字EDA部分.docx_第4页
第4页 / 共31页
电子电路设计训练数字EDA部分.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

电子电路设计训练数字EDA部分.docx

《电子电路设计训练数字EDA部分.docx》由会员分享,可在线阅读,更多相关《电子电路设计训练数字EDA部分.docx(31页珍藏版)》请在冰豆网上搜索。

电子电路设计训练数字EDA部分.docx

电子电路设计训练数字EDA部分

 

2014-2015-2-G02A3050-1

电子电路设计训练(数字EDA部分)

 

实验报告

(2015年5月20日)

教学班

学号

姓名

组长

签名

成绩

 

自动化科学与电气工程学院

实验一、简单组合逻辑和简单时序逻辑

1.1实验任务1——简单组合逻辑

1.1.1实验要求

(1)设计一个两位数据比较器,比较两个数据a和b。

若两数据相同,则给出结果1,否则给出结果0。

(2)设计一个字节(8位)的比较器,比较两个字节a[7:

0]和b[7:

0]的大小。

若a大于b,则输出高电平,否则输出低电平。

1.1.2模块的核心逻辑设计

(1)两位数据比较器

assignequal=(a==b)?

1:

0;//用连续赋值语句assign对结果equal赋值,a=b时,equal输出为1,否则为0

(2)字节数据比较器

assignres=(a>b)?

1:

0;//用连续语句assign对结果equal赋值,a>b时equal输出为1,否则输出为0

1.1.3测试程序的核心逻辑设计

(1)两位数据比较器

always#50clock=~clock;//产生周期性跳变的时钟,50个时间单位跳变一次

always@(negedgeclock)//always后的语句表示时序控制,每次时钟下降沿时刻产生不同的a和b

begin

a={$random}%2;

b={$random}%2;//每次随机产生a和b

end

initial

begin#100000000$stop;end//系统任务,暂停仿真以观察波形

(2)字节数据比较器

a={$random}%256;

b={$random}%256;//a和b从0~255共256个数中随机产生,即可生成8位字节数据

1.1.4仿真实验关键结果及其解释

(1)两位数据比较器

图1两位数据比较器波形图

如图1所示,a和b相同时equal输出为高电平,否则输出低电平。

(2)字节数据比较器

图2字节数据比较器波形图

如图2所示,a>b时,res输出高电平,否则res输出低电平。

1.2实验任务2——简单时序逻辑

1.2.1实验要求

设计一个分频器,将时钟波形二分频。

1.2.2模块的核心逻辑设计

always@(posedgeclk_in)//always语句后表示时序控制,每次clk_in时钟上升沿时刻进行动作

begin

if(!

reset)clk_out=0;//reset信号为低电平时,输出清零

elseclk_out=~clk_out;//reset为高电平时,输出时钟clk_out在输入时钟clk_in的上升沿时刻翻转

end

1.2.3测试程序的核心逻辑设计

always#`clk_cycleclk=~clk;//产生输入时钟

initial

begin

clk=0;

reset=1;

#10reset=0;//reset给低电平,输出清零

#110reset=1;//reset复位

#100000$stop;//系统任务,暂停仿真以便观察波形

end

1.2.4仿真实验关键结果及其解释

图3二分频器的波形图

如图3所示,输入时钟clk被二分频输出。

1.3实验小结

通过实验一,我掌握了如下内容:

1)assign连续赋值语句的使用。

2)always,initial块的使用。

3)reg,wire等数据类型的适用范围

4)调用被测试模块的方法

 

实验二、条件语句和always过程块

2.1实验任务1——利用条件语句实现计数分频时序电路

2.1.1实验要求

(1)设计20分频计数器,将10MHz的时钟分频为500kHz的时钟。

(2)利用10MHz的时钟,设计一个给定单周期形状的周期波形。

2.1.2模块的核心逻辑设计

(1)20分频计数器

begin

if(j==9)//对计数器进行判断,计十个数翻转一次,则一个周期计20个数,即实现20分频

begin

j<=0;//输出时钟翻转的同时计数器置零

F500K<=~F500K;

end

else

j<=j+1;//若还没计到十个数,继续计数

end

(2)给定单周期形状的波形

begin

if(j<=20)

begin

FDIV<=0;

j<=j+1;//前20个输入时钟周期,计数器计数,但输出不跳变

end

elseif((j>20)&&(j<=30))

begin

FDIV<=1;

j<=j+1;//中间10个时钟周期输出跳变成高电平,保持计数

end

elseif((j>30)&&(j<=50))

begin

FDIV<=0;

j<=j+1;//后20个时钟周期输出跳变成低电平,保持计数

end

else

j<=0;//计数器清零

end

2.1.3测试程序的核心逻辑设计

(1)20分频计数器

always#`clk_cycleF10M_clk=~F10M_clk;//产生输入的10MHz时钟

initial

begin

RESET=1;

F10M_clk=0;

#100RESET=0;//reset给低电平,输出清零

#100RESET=1;//reset复位

#10000$stop;//系统任务,暂停仿真以便观察波形

end

(2)给定单周期形状的波形

begin

RESET=1;

F10M_clk=0;

#100RESET=0;

#100RESET=1;

#100000$stop;

end//与

(1)一致

2.1.4仿真实验关键结果及其解释

(1)20分频计数器

图420分频计数器波形图

如图4所示,10MHz的时钟F10M被20分频成500kHz的时钟F500k。

(2)给定单周期形状的波形

图5给定单周期形状的波形图

如图5所示,生成了题目要求形状的周期波形图。

2.2实验任务2——用always块实现较复杂的组合逻辑电路

2.2.1实验要求

(1)设计一个指令译码电路,对输入数据执行相应的操作,包括加、减、与、或和求反。

(2)运用always块设计一个8路数据选择器。

要求:

每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应变化。

2.2.2模块的核心逻辑设计

(1)指令译码电路

always@(opcodeoraorb)//电平敏感的always块,当输入数据a,b或控制信号opcode变化时,输出发生变化

begin

case(opcode)

`plus:

out=a+b;//控制信号为'plus时,输出等于a+b

`minus:

out=a-b;//控制信号为'minus时,输出等于a-b

`band:

out=a&b;//控制信号为'band时,输出等于a&b

`bor:

out=a|b;//控制信号为'bor时,输出等于a|b

`unegate:

out=~a;//控制信号为'unegate时,输出等于~a

default:

out=8'hx;//未收到指令时,输出任意态

endcase

(2)8路数据选择器

always@(ctlora0ora1ora2ora3ora4ora5ora6ora7)//电平敏感模块,控制信号ctl或输入a0~a7变化时,输出发生变化

begin

case(ctl)

`ctl0:

out=a0;

`ctl1:

out=a1;

`ctl2:

out=a2;

`ctl3:

out=a3;

`ctl4:

out=a4;

`ctl5:

out=a5;

`ctl6:

out=a6;

`ctl7:

out=a7;//控制端为ctl0~ctl7对应输出a0~a7

default:

out=4'dx;//未收到指令时,输出任意态

endcase

2.2.3测试程序的核心逻辑设计

(1)指令译码电路

begin

a={$random}%256;//从0~255共256个数中随机生成一个数作为输入a

b={$random}%256;//从0~255共256个数中随机生成一个数作为输入b

opcode=3'h0;//控制信号设为初值0,即'plus,求和

repeat(times)//repeat循环语句使控制及输入信号重复变化

begin

#100a={$random}%256;

b={$random}%256;

opcode=opcode+1;//每一时钟到来时,输入a,b改变一随机数,控制信号+1

end

#100$stop;//系统任务,暂停仿真以观察输出波形

end

(2)8路数据选择器

begin

a0={$random}%16;

a1={$random}%16;

a2={$random}%16;

a3={$random}%16;

a4={$random}%16;

a5={$random}%16;

a6={$random}%16;

a7={$random}%16;//从0~15中随机生成输入a0~a7

ctl=3'd0;//控制端置ctl0

repeat(times)//repeat语句重复改变输入

begin

#100a0={$random}%16;

a1={$random}%16;

a2={$random}%16;

a3={$random}%16;

a4={$random}%16;

a5={$random}%16;

a6={$random}%16;

a7={$random}%16;//随机生成a0~a7

ctl=ctl+1;//控制端每次加1

end

#100$stop;

end

2.2.4仿真实验关键结果及其解释

(1)指令译码电路

图6指令译码电路波形

指令译码电路输出波形如图所示。

控制信号opcode为0时,输出为a+b;控制信号opcode为1时,输出为a-b;......以此类推。

(2)8路数据选择器

图78选1数据选择器波形图

8路数据选择器输出波形如图7所示,控制端ctl为0~7时对应输出a0~a7。

2.3实验小结

通过实验二,我掌握了如下内容:

1)if...else条件语句的使用。

2)case条件语句的使用

实验三、赋值、函数和任务

3.1实验任务1——阻塞赋值与非阻塞赋值的区别

3.1.1实验要求

本实验中两个模块"blocking"和"non_blocking"分别采用阻塞赋值和非阻塞赋值语句,从实验结果比较他们的区别。

3.1.2模块的核心逻辑设计

(1)阻塞赋值

always@(posedgeclk)

begin

b=a;

c=b;//阻塞赋值,a赋给b,b赋给c

$display("Blocking

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

当前位置:首页 > 法律文书 > 调解书

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

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