2014-2015-2-G02A3050-1电子电路设计训练(数字EDA部分)实验报告(2015 年5 月20 日)教学班学号姓名组长签名成绩自动化科学与电气工程学院目录目录 .......................................................错误!未定义书签。
实验一、简单组合逻辑和简单时序逻辑............................错误!未定义书签。
实验任务1——简单组合逻辑...........................错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务2——简单时序逻辑...........................错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验小结.............................................错误!未定义书签。
实验二、条件语句和always过程块...............................错误!未定义书签。
实验任务1——利用条件语句实现计数分频时序电路.......错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务2——用always块实现较复杂的组合逻辑电路....错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验小结.............................................错误!未定义书签。
实验三、赋值、函数和任务......................................错误!未定义书签。
实验任务1——阻塞赋值与非阻塞赋值的区别.............错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务2——在Verilog HDL中使用函数...............错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务3——在Verilog HDL中使用任务...............错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验小结.............................................错误!未定义书签。
实验四、有限状态机............................................错误!未定义书签。
实验任务1——基于状态机的串行数据检测器.............错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务2——楼梯灯.................................错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验小结.............................................错误!未定义书签。
实验一、简单组合逻辑和简单时序逻辑实验任务1——简单组合逻辑实验要求(1)设计一个两位数据比较器,比较两个数据a和b。
若两数据相同,则给出结果1,否则给出结果0。
(2)设计一个字节(8位)的比较器,比较两个字节a[7:0]和b[7:0]的大小。
若a大于b,则输出高电平,否则输出低电平。
模块的核心逻辑设计(1)两位数据比较器assign equal=(a==b)?1:0; 错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
....以此类推。
(2)8路数据选择器图 1 8选1数据选择器波形图8路数据选择器输出波形如图7所示,控制端ctl为0~7时对应输出a0~a7。
实验小结通过实验二,我掌握了如下内容:1)if...else条件语句的使用。
2)case条件语句的使用实验三、赋值、函数和任务实验任务1——阻塞赋值与非阻塞赋值的区别实验要求本实验中两个模块"blocking"和"non_blocking"分别采用阻塞赋值和非阻塞赋值语句,从实验结果比较他们的区别。
模块的核心逻辑设计(1)阻塞赋值always@(posedge clk)beginb=a;c=b; ,a,b,c); ,a,b,c); ,a,b,c);end(3)再改变阻塞赋值程序的写法,比较二者的区别(测试程序仅改变调用的阻塞赋值模块)always@(posedge clk) b=a;always@(posedge clk) c=b;测试程序的核心逻辑设计将阻塞与非阻塞赋值模块用同一测试程序测试,比较其输出的不同。
begina=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("___________"); 错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
12!+⨯=n n n result 错误!未指定顺序。
1331113==result 1642==result 错误!未指定顺序。
.else 和case 分支结构的使用。
(3)掌握了用repeat 语句实现for 循环结构的方法。
(4)掌握了在Verilog HDL 中使用任务的方法,回顾了排序算法。
实验四、有限状态机实验任务1——基于状态机的串行数据检测器实验要求设计一个串行数据监测器。
要求是:连续4个或4个以上为1时输出1,其他情况下输出0。
模块的核心逻辑设计always @(posedge clk)if (!rst)state<=Q0;elsestate<=nextstate; 错误!未指定顺序。
错误!未指定顺序。
错误!未指定顺序。
.INACTIVE : if ( in ) beginstate <= PENDING1 ;count<=0;end...PENDING1:beginif(!in) state<=INACTIVE;else if(count < NUM_JITTER-1)count <= count + 1 ;else if(count >=NUM_JITTER-1&&(in)) state=ACTIVE;else state<=ACTIVE;end //我尝试在INACTIVE状态下增加一个等待判断状态PENDING1,且输出采用always块给寄存器变量赋值的形式,但效果不佳,见结果分析部分测试程序的核心逻辑设计(1)基本任务仅测试一盏灯:initial begin // 短开关信号测试switch = 0 ;#100 switch = 1 ;#20 switch = 0 ; //第一个开关信号持续2s#100 switch = 1 ; //10s后第二个开关信号到来#30 switch = 0 ; //第二个开关信号持续3s#40 switch = 1 ; // 4s后又一开关信号到来#60 switch = 0 ;//长开关信号测试#50 switch = 1 ;# switch = 0 ; // 第一个开关信号持续# switch = 1 ; // 后第二个开关信号到来#90 switch = 0 ; //第二个开关信号持续9s#30 switch = 1 ; // 3s后第二个开关信号到来#10 switch = 0 ; //10s后开关信号结束//SUM = 330end三盏灯的测试只需在测试程序中调用3个单盏灯测试程序,且开关信号分为switch[1]~switch[3],表示灯的亮灭的输出变量分为light[1]~light[3]。