EDA实验中问题及注意事项

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA实验中问题及注意事项

一、实验四总结

1.做得比较好的同学(7个)

32060501沙安澜:报告很详细,严格按照要求写的。给出了所有源程序和仿真波形。 32060507王冠:在文档中画出的原理框图很清晰。报告很详细,严格按照要求写的。给出了所有仿真波形,有详细的设计思路和工作过程分析。

32060614任铁男:完全用Verilog HDL语言在一个程序中实现。并利用Modelsim仿真。 32060618楼奕华:在文档中画出的原理框图很清晰。报告很详细,给出了主要程序的源代码,程序中有详细的注释。回答问题正确。

32060624王克:报告很规范、很用心。给出了所有源程序和仿真波形,并利用Modelsim仿真。

32060718马啸宇、32060730肖晖:预习充分,实验完成得很好。

2.要求重写的同学(13)

实验报告严格按照要求重写(注意给出每个子模块的源代码)。并按学号(不要姓名)建一个文件夹,将所有设计文件(包括源文件和仿真波形、顶层文件等)拷入其中,压缩后一起发给我。

实验报告要求:

1.实验目的

2.实验要求

3.实验内容

4.设计思路

给出原理框图及每部分的说明,说明完成了哪些功能,对于本实验中的关键设计进行详细的说明。并给出每个子模块的源代码。

5.仿真波形及分析

给出主要模块和顶层文件的仿真波形的截图(注意仿真各种情况)。然后对照波形,详细分析其工作过程。

6.对遇到的问题及解决方法进行详细的说明

7.回答“五、实验报告”中提出的问题

(1)袁丁、孙晓良与吕元报告相同!(时钟分频波形是否正确?)

(2)32060515史磊:只写了遇到问题和实验五思考题,按要求重写!

(3)32060522_陈辉:

“此部分由e_clock模块实现。此模块中还集成了复位信号(CLK)和启动/暂停信号(STARTSTOP)的功能。复位信号的高电平有效,可对整个系统异步清零。启动/暂停信号为低电平时秒表开始计时,为高电平时暂停,变低后在原来的数值基础上再计数。”

同郑清吉、袁丁、孙晓良、吕元

(4)32060523_钱恒恒:有些地方与袁丁同?

(5)32060603_杨颖报告完全同陈辉!

(6)32060620_周彬,几乎没有实质内容,无任何波形,按要求重写!

(7)32060626-吴拯宇:几乎完全同袁丁的。

(8)32060931_周亮:与32060919_林煜晨完全相同!

(9)32060932 柴永锋:与32060919_林煜晨几乎完全相同!

(10)32060615 李杨:报告太简单,按要求重写!

(11)32060529周可:报告太简单,按要求重写!

3.设计中有问题的同学(5个),报告重写

(1)32060227陈鹏:“还包括停止计数控制START_STOP、清零控制CLR,均为高有效。”?仿真波形只有一个,而且仿真功能不完整。

(2)32060519郑清吉:顶层仿真波形是否正确?

(3)32060605卢根:自己做的?

(4)32060712王叶:4个实验的报告都写了,但原理框图、设计思路和问题说明都没有。 (5)32060924陶李天:子模块没有仿真波形,工作过程分析没有。

4.未交报告的同学(15)

文成建 蔡恒 翟金标 崔宏达 胡海燕 周玲玲 徐安 徐瑞

孟杰 芦巍 吕军晖 侯尧 李晴 李鑫 刘利峰

二、设计中出现的问题

1.一个变量不能在多个always块中被赋值!这个问题一定要注意!否则编译不能通过。

有的同学说:“在设计中在两个always块中的clr置0模块中都将enable变量置0了,导致编译始终不通过,后来查了课件,发现“一个变量不能在多个always块中被赋值!”,改了源程序后,使enable变量只在一个always块中被赋值,才解决了问题。”

2.在时钟分频子模块中,如何使clkout在计够100个数后才有一个正跳变,并且输出没有毛刺?

如果采用以下写法,则在进行时序仿真时,发现当加法计数器计到97,要跳变为98时,clkout出现一个毛刺!作为输出时钟,这是不允许的!

module clkdiv100 (clr,clkin,clkout,count); // 100分频

input clr,clkin;

output clkout,count;

reg clkout;

reg[6:0] count;

always @(posedge clkin or negedge clr)

begin

if (!clr) count <=0;

else if(count[6:0]==99) count[6:0]<=0;

else count[6:0]<=count[6:0]+1;

clkout<=(count [6:0]==99);// 均采用非阻塞赋值

end

endmodule

有毛刺的仿真波形

在上面的程序中用if_else if-else的结构不太合适,逻辑关系不是十分清晰!容易出现毛刺!实际上应该只有两个大的分支,一个是“if (!clr)”,即当clr有效时,执行清零操作;另一个分支是“else”,即当clr无效时,执行计数操作。

正确、简单的程序如下:

module clkdiv100_simple(clkout,count,clkin,clr);

output clkout,count;

input clkin,clr;

reg[6:0] count;

reg clkout;

always @(posedge clkin)

begin

if (!clr) count <=0;

else

begin

if (count==99) count<=0;

else count<=count+1;

clkout<=(count==99); // clkout只在计数值为99时为"1"

end

end

endmodule

正确的仿真波形如下:

提示:建议在以后的实验中如果没有特别说明,时钟分频子模块均参照clkdiv100_simple.v的写法,这样程序简洁清晰,仿真无毛刺。

相关文档
最新文档