verilog hdl 实验报告
eda电子设计使用verilog语言电子琴实验报告
电子设计自动化课程设计报告
院系:信息工程学院
专业:电子信息工程
学号:
姓名:
指导教师:
2013 年月日
目录
1设计目的 (3)
2题目描述与要求 (3)
3课程设计报告内容 (3)
3.1设计原理与思路 (3)
3.2操作过程 (4)
3.3设计和调试过程中出现的问题及解决方法 (7)
4设计总结和心得体会 (8)
一、课程设计目的
使用VerilogHDL语言进行前端设计,并使用Quaruts软件在实验箱上实现仿真,实现硬件电子琴。电子琴要求有8个音阶,使用外部时钟信号32MHz,能同步显示音阶。
二、课程设计题目描述和要求
题目:简易电子琴的设计
主要功能:(1)设计一个八音电子琴。
(2)由键盘输入控制音响,同时可自动演奏乐曲。
(3)用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。
三、课程设计报告内容
3.1设计原理与思路
系统由数控分频器、乐曲存储模块以及发声模块组成。数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。由发声模块产生音符对应的频率的信号来使扬声器发音。
(1)模块automusic
模块automsic由auto信号来选择发声的方式,auto=0时系统自动播放内置的音乐,auto=1时由键盘来手动演奏音乐。
(2)模块TONE
模块Tone是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。
VHDL实验报告JK触发器、同步计数器
Verilog HDL实验报告
Verilog 实验报告题目:JK触发器、同步计数器系部名称:通信工程
专业名称:通信工程
班级:
班内序号:
学生姓名:
时间:2010.11.28
一、实验内容:
用JK触发器构成同步计数器:
设计一个同步计数器,其逻辑图和JK触发器的逻辑图所示。清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出,当count_enable信号为低电平时停止计数。写出同步计数器的verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
二、实验原理图:
JK触发器构成同步计数器
源代码:
//主模块
module synchronous_counter(clear,clock,count_enable,Q);
input clear,clock,count_enable;
output [3:0] Q;
wire qbar1,qbar2,qbar3,qbar0;
wire a,b,c;
assign a = Q[0] & count_enable;
assign b = a & Q[1];
assign c = b & Q[2];
JK_flip_flop myJK(count_enable,count_enable,clock,clear,Q[0],qbar0);
JK_flip_flop myJK1(a,a,clock,clear,Q[1],qbar1);
JK_flip_flop myJK2(b,b,clock,clear,Q[2],qbar2);
Verilog实验报告(电子)参考模板
西安邮电大学Verilog HDL大作业报告书
学院名称:电子工程学院
学生姓名:
专业名称:电子信息工程
班级:
实验一异或门设计
一、实验目的
(1)熟悉Modelsim 软件
(2)掌握Modelsim 软件的编译、仿真方法
(3)熟练运用Modelsim 软件进行HDL 程序设计开发
二、实验内容
my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=x’y+xy’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真
1、实验要求
用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤
1、建立工程
2、添加文件到工程
3、编译文件
4、查看编译后的设计单元
5、将信号加入波形窗口
6、运行仿真
实验描述如下:
module my_and(a_out,a1,a2);
output a_out;
input a1,a2;
wire s1;
nand(s1,a1,a2);
nand(a_out,s1,1'b1);
endmodule
module my_not(n_out,b);
output n_out;
input b;
nand(n_out,b,1'b1); endmodule
module my_or(o_out,c1,c2);
output o_out;
input c1,c2;
wire s1,s2;
nand(s1,c1,1'b1);
nand(s2,c2,1'b1);
nand(o_out,s1,s2); endmodule
module MY_XOR(z,x,y);
VerilogHDL实验报告
VerilogHDL实验报告
实验一Modelsim仿真软件的使用
一、实验目的
(1)熟悉Modelsim 软件
(2)掌握Modelsim 软件的编译、仿真方法
(3)熟练运用Modelsim 软件进行HDL 程序设计开发
二、实验内容
1、实验要求
用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤
1、建立工程
2、添加文件到工程
3、编译文件
4、查看编译后的设计单元
5、将信号加入波形窗口
6、运行仿真
3、方法
moduleyihuo (a,b,c);
inputa,b;
output c;
assign c=a^b;
endmodule
测试程序:
module t_yihuo;
reg a,b; wire c;
initial begin a=0; forever #20 a=~a; end initial begin b=0; forever #30 b=~b; end
yihuou1(a,b,c);
endmodule
二、实验结果
波形图:
三、分析和心得
通过这次的实验,我基本熟悉Modelsim软件,掌握了Modelsim软件的编译、仿真方法。同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。
实验二简单组合电路设计
一、实验目的
(1)掌握基于Modelsim的数字电路设计方法
(2)熟练掌握HDL 程序的不同实现方法
二、实验内容
1、实验要求
设计一个三人表决器(高电平表示通过),实验内容如下:
(1)三个人,一个主裁判,两个副裁判;
(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
FPGA实验报告实验
西南科技大学
实验报告
课程名称:基于FPGA的现代数字系统设计
实验名称:基于HDL十进制计数、显示系统设计姓名:
学号:
班级:通信1301
指导教师:刘桂华
西南科技大学信息工程学院制
基于HDL十进制计数、显示系统设计
一、实验目的
1、掌握基于语言的ISE 设计全流程;
2、熟悉、应用VerilogHDL描述数字电路;
3、掌握基于Verilog的组合和时序逻辑电路的设计方法;
4、掌握chipscope 片内逻辑分析仪的使用与调试方法。
二、实验原理
1、实验内容:设计具有异步复位、同步使能的十进制计数器,其计数结
果可以通过七段数码管、发光二极管等进行显示。
2、模块端口信号说明:
输入信号:
Clk_50m ---系统采样时钟
clk -------待计数的时钟
clr ---------异步清零信号,当clr=0,输出复位为0,当clr=1,
正常计数
ena---------使能控制信号,当ena=1,电路正常累加计数,否
则电路不工作
输出信号:
q[6:0]---------驱动数码管,显示计数值的个位
cout -----------1bit 数据,显示计数值向十位的进位
COM-----------共阳级数码管,公共端(接地,参考开发板原理
图
3、以自顶向下的设计思路进行模块划分:
整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟clk,先通过消抖模块消抖后,再输出至后续使用。
1)十进制计数器模块设计
输入: CLK -------待计数的时钟
CLR ---------异步清零信号,当CLR =0,输出复位为0,当CLR =1,正常计数。
Verilog HDL 实验报告
实验一Modelsim仿真软件的使用一、实验目的
(1)熟悉Modelsim 软件
(2)掌握Modelsim 软件的编译、仿真方法
(3)熟练运用Modelsim 软件进行HDL 程序设计开发
二、实验内容
1、实验要求
用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤
1、建立工程
2、添加文件到工程
3、编译文件
4、查看编译后的设计单元
5、将信号加入波形窗口
6、运行仿真
3、方法
moduleyihuo (a,b,c);
inputa,b;
output c;
assign c=a^b;
endmodule
测试程序:
module t_yihuo;
reg a,b;
wire c;
initial
begin
a=0;
forever #20 a=~a;
end
initial
begin
b=0;
forever #30 b=~b;
end
yihuou1(a,b,c);
endmodule
二、实验结果
波形图:
三、分析和心得
通过这次的实验,我基本熟悉Modelsim软件,掌握了Modelsim软件的编译、仿真方法。同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。
实验二简单组合电路设计
一、实验目的
(1)掌握基于Modelsim的数字电路设计方法
(2)熟练掌握HDL 程序的不同实现方法
二、实验内容
1、实验要求
设计一个三人表决器(高电平表示通过),实验内容如下:
(1)三个人,一个主裁判,两个副裁判;
(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真。
verilog实验报告
verilog实验报告
Verilog实验报告
引言:
Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。它是一种高
级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。
实验一:基本门电路设计
在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。
我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算
符和条件语句实现了与门的功能。然后,我创建了一个测试模块,用于验证与
门的正确性。通过输入不同的组合,我能够验证与门的输出是否符合预期。
接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。通
过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。
实验二:时序电路设计
在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变
其输出。
我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据
的存储和传输功能。然后,我创建了一个测试模块,用于验证寄存器的正确性。
通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。
接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。
我还添加了一个复位输入,用于将计数器的值重置为初始状态。通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。
Verilog实验报告
Verilog实验报告
实验一简单组合逻辑电路的设计
一实验要求
1.用verilog HDL语言描写出简单的一位数据比较器及其测试程序;
2.用测试程序对比较器进行波形仿真测试;画出仿真波形;
3.总结实验步骤和实验结果。
二实验原理与内容
4.这是一个可综合的数据比较器,很容易看出它的功能是比较数据a
与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在
Verilog HDL中,描述组合逻辑时常使用assign结构。注意
equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的
格式。
5.模块源代码
测试模块:
6.波形图:
四结实验步骤和实验结果
由图可看出,每当输入的电位值不同时输出为0,这与实验要求一致,相同时输出为1,故此程序是可行的。
实验三在verilog HDL中使用函数
一实验要求
1.掌握函数在模块中的使用
2.用测试程序进行波形仿真测试;画出仿真波形
3.总结实验步骤和实验结果
二实验原理与内容
与一般的程序设计语言一样;verilog HDL也可以使用函数已是应对不同变量采取同一运算的操作。verilog HDL函数在综合时被理解成具有独立运算功能的电路,每调用一次函数相当于改变这部分电路的输入以得到相应的计算结果。
模块源代码:
module ex3(clk,n,result,reset);
output[31:0] result;
input[3:0] n;
input reset,clk;
reg[31:0] result;
always @(posedge clk)
begin
if(!reset)result <= 0;
verilog HDL课题报告
一、实验目的
通过此设计的编程和下载运行,初步掌握Verilog HDL语言的always 块语句及基本编程结构。
二、实验过程
(1)新建工程;
通过“file”→“new project wizard…”菜单命令启动新项目向导,利用向导,建立一个新项目。
(2)输入设计程序
在file菜单下,单击“new”命名,弹出对话框,选择Verilog HDL File 选项,建立Verilog HDL文件,输入下面程序:
module liushuideng(ledout,clk);
output[8:0]ledout;
input clk;
reg[8:0]ledout;
reg[23:0]counter;
initial
ledout=8'b11111111;
always@(posedge clk)
begin
counter=counter+1;
if(counter==24'b110000000000000000000000)
begin
ledout=ledout<<1;
if(ledout==8'b00000000)
ledout=8'b11111111;
counter=0;
end
end
endmodule
(3)指定管脚和设置不用引脚
启动pin planner工具,弹出对话框,在“location”列,选择要分配的
位置,为每个电路端子都分配适当的脚位。在Assignments菜单下,单击Device…命令,进入Device & Pin Options对话框,在切换到Unused Pins页,在Reserved all unused pins栏目中,选择As input tri-stated,回到Setting对话框,单击“确定”。
时序逻辑电路的Verilog_HDL实现实验报告
时序逻辑电路的Verilog HDL 实现
一.实验要求
(1):编写JK 触发器、8位数据锁存器、数据寄存器的Verilog HDL 程序,并实现其仿真及其测试程序;
(2):在实验箱上设计含异步清零和同步使能的计数器。
(3):进行波形仿真测试后;画出仿真波形。
(4):写出实验心得
二.实验内容:
(1)1.JK 触发器的元件符号如图7.14所示,其中J 、K 是数据输入端,CLR 是复位控制输入端,当CLR=0时,触发器的状态被置为0态;CLK 是时钟输入端;Q 和QN 是触发器的两个互补输出端。
JK 触发器的状态方程为
Q n+1 =J Q n +K Q n
JK 触发器的verilog HDL 程序
module jkff_rs(clk,j,k,q,rs,set); input clk,j,k,set,rs;
output reg q;
always@(posedge clk,negedge rs,negedge set)
begin if(!rs) q<=1'b0;
else if(!set) q<=1'b1;
else case({j,k})
2'b00:q<=q;
2'b01:q<=1'b0;
2'b10:q<=1'b1;
2'b11:q<=~q;
default:q<=1'bx;
endcase
end
endmodule
JK 触发器的功能:带异步清0,异步置1(低电平有效)
JK 触发器的仿真结果
JK 触发器的元件符号
2.8位数据锁存器锁存器元件符号如图所示。CLR是复位控制输入端,当CLR=0时,8位数据输出Q[7..0]=00000000。ENA是使能控制输入端,当ENA=1时,锁存器处于工作状态,输出Q[7..0]=D[7..0];ENA=0时,锁存器的状态保持不变。OE是三态输出控制端,当OE=1时,输出为高阻态;OE=0时,锁存器为正常输出状态。
VHDL实验报告汇总
实验一4选一多路选择器
一:实验目的及实验环境
目的
1、熟悉ModelSim SE 6.5c的verilog 的文本设计流程,组合电路的设计、仿真和测试。
2、用verilog语言完成设计4选一多路选择器。
3、熟悉文本输入及仿真步骤。
4、初步了解可编程器件设计的全过程。
环境
1、P C 机一台
2、M odelSim SE 6.5c
二. 实验内容
1、用verilog语言完成设计4选一多路选择器,
2、用结构建模及数据流建模两种方法实现。
3、对于所设计的程序进行编译,检查纠错。
4、程序完善之后进行程序的仿真并进行波形的记录与分析
三.实验步骤
1、建立工程
2、添加文件到工程
3、编译文件
4、查看编译后的设计单元
5、将信号加入波形窗口
6、运行仿真
四.运行结果
五.总结
本次实验让我更加的熟悉modelsim使用方法,以及使用时应该注意的问题。在试验中也学习到了Verilog语法。在实验中我们应该注意verilog的格式要求,在用编程语言编程的时候,要自习留意语法标准,整理好逻辑思维的同时保证格式的正确。否则就会浪费大量的时间来完成实验。试验开始到结束这一过程中,我遇到了很多困难,后来都在同学的提醒和帮助下克服了。相信有了这次对这个语言和这个软件的接触,我们都有了更加深入的理解。
六.源代码
module mux41(a,b,c,d,s1,s0,out);
input[1:0] a,b,c,d;
input s1,s0;
output[1:0] out;
reg[1:0] out;
always @(a or b or c or d or s
Verilog HDL实验报告
HDL实验报告
专业电子科学与技术
姓名
学号
指导老师
1 实验一Modelsim仿真软件的使用
1.1 实验目的
(1)熟悉Modelsim 软件;
(2)掌握Modelsim 软件的编译、仿真方法;
(3)熟练运用Modelsim 软件进行HDL 程序设计开发。
1.2 实验步骤
(1)学习使用Modelsim软件;
(2)分析原理及功能;
(3)用Verilog HDL编写程序;
(4)编写测试程序进行仿真;
(4)观察波形,分析仿真结果是否正确。
1.3 实验内容
用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。
1.4.1 程序
module my_xor(ina,inb,out);
input ina,inb;
output out;
assign out=ina^inb;
endmodule
module t_xor;
reg ina,inb;
wire out;
initial
begin
ina=1'b0;
forever #20 ina=~ina;
end
initial
begin
inb=1'b0;
forever #10 inb=~inb;
end
my_xor tt(.ina(ina),.inb(inb),.out(out));
endmodule
2 实验二简单组合电路设计
2.1 实验目的
(1)掌握基于Modelsim 的数字电路设计方法;
(2)熟练掌握HDL 程序的不同实现方法
2.2 实验步骤
(1)分析原理及功能;
(2)根据原理用Verilog HDL编写程序;
(3)编写测试程序进行仿真;
(4)观察波形,分析仿真结果是否正确。
verilog hdl电子时钟实验报告
电子时钟:
电子时钟的功能:可以显示时间,还可以修改时间。
结构图NO.7:此电路适合于设计时钟、定时器、秒表等。因为可利用键8和键5分别控制时钟的清零和设置时间的使能;利用键7、5和1进行时、分、秒的设置。
D16D15D14D13D12D11D9D8PIO47
D7PIO46
D6PIO45
D5PIO44
D4PIO43
D3PIO42
D2PIO41
PIO40
D1NO.7
实验电路结构图
S P E A K E R
扬声器
FPGA/CPLD 目标芯片
1
2
3
4
5
6
7
8
PIO0
PIO2PIO3PIO4PIO5PIO6PIO7单脉冲
单脉冲单脉冲
键1
键2
键3
键4
键5
键6
键7
键8
PIO47-PIO40PIO39-PIO36
PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16
译码器译码器译码器译码器译码器
译码器
实验代码:
模块一:时间显示
//clk:秒功能的时钟信号,为1Hz 的脉冲信号 //time_set_en:时间设置使能信号 //time_clear(键8):时钟显示的清零
//hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set:设置后的小时、分、秒 //hourh,hourl:小时的高低位 //minh,minl:分的高低位 //sech,secl:秒的高低位
//cout:进位输出,即计满24小时,向天产生的进位输出信号
module
time_count(clk,time_set_en,time_clear,hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set,h ourh,hourl,minh,minl,sech,secl);
verilog实验
实验二:组合逻辑电路设计
一、实验目的:
学习组合逻辑电路,学习译码器的功能与定义,学习Verilog语言。
二、实验内容:
编写3-8译码器的Verilog 代码并仿真,编译下载验证。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境、AR1000核心板、SOPC-MBoard板、ByteBlaster II 下载电缆。
四、实验原理
译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。
译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。另一种是将一种代码转换成另一种代码,所以也称为代码变换器。
五、实验过程
1.代码
2.编译成功
3.波形simulation
4.仿真波形图
实验三:时序逻辑电路设计(一)
一、实验目的:
学习时序逻辑电路,学习计数器的原理,学习Verilog。
二、实验内容:
编写一个带预置输入,清零输入,可加/可减计数器的Verilog 代码并仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
计数器是数字系统中用的较多的基本逻辑器件。它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
可编程逻辑器件实验报告
实验1:四位加减法器设计
1。实验任务:设计带借位、进位的4位二进制减法、加法器。
2。实验要求:要考虑借位、进位。在软件环境下,编写源文件并用器件实现。
3。实验过程:
(1)原理分析:多位减加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器,串行进位是将全加器进行级联构成的,这种方式电路会比较简单。本次实验中采用了自底向上(Bottom—Up)的分层次电路设计方法。实际上,Verilog HDL 语言中的加减运算符为程序设计提供了很大的便利,此次实验又采用它实现了加减法器.
(2)Verilog HDL源文件设计:
[1]。利用算术运算符的程序设计:
module adderandsubtracter(s,k,cin,cout);
input cin,k;
parameter[3:0] aa = 4'b0100;
parameter[3:0]bb = 4'b0101;
output cout;
output[3:0] s;
reg cout,s;
always@(k)
begin
if(k == 1)
{cout,s}〈= aa+bb+cin;
else
{cout,s}<= aa-bb—cin;
end
endmodule
[2]。自底向上(Bottom—Up)的分层次电路设计方法的Verilog HDL源文件。
module Adderandsubtracter1 bit (k,A,B,Cin ,Sum,Cout );
input A,B,Cin,k;
output Sum,Cout;
parameter[3:0] A = 4'b0100;
寄存器实验报告
寄存器实验报告
一、实验目的
1. 了解寄存器的分类方法,掌握各种寄存器的工作原理;
2. 学习使用Verilog HDL 语言设计两种类型的寄存器。
二、实验设备
PC 微机一台,TD-EDA 实验箱一台,SOPC 开发板一块。
三、实验内容
寄存器中二进制数的位可以用两种方式移入或移出寄存器。第一种方法是以串行的方式将数据每次移动一位,这种方法称之为串行移位(Serial Shifting),线路较少,但耗费时间较多。第二种方法是以并行的方式将数据同时移动,这种方法称之为并行移位(Parallel Shifting),线路较为复杂,但是数据传送的速度较快。因此,按照数据进出移位寄存器的方式,可以将移位寄存器分为四种类型:串行输入串行输出移位寄存器(Serial In- Serial Out)、串行输入并行输出移位寄存器(Serial In- Parallel Out)、并行输入串行输出移位寄存器(Parallel In- Serial Out)、并行输入并行输出移位寄存器(Parallel In-Parallel Out)。
本实验使用Verilog HDL 语言设计一个八位并行输入串行输出右移移位寄存器(Parallel In- Serial Out)和一个八位串行输入并行输出寄存器(Serial In- Parallel Out),分别进行仿真、引脚分配并下载到电路板进行功能验证。
四、实验步骤
1.并行输入串行输出移位寄存器实验步骤
1). 运行Quartus II 软件,选择File New Project Wizard 菜单,工程名称及顶层文件名称为SHIFT8R,器件设置对话框中选择Cyclone 系列EP1C6Q240C8 芯片,建立新工程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Verilog HDL数字系统设计
实验报告汇总
任课教师
实验者姓名
学号
实验指导教师
Verilog HDL 数字系统设计报告 1 姓名 学号 时间 地点
实验题目 阻塞赋值与非阻塞赋值的区别
一. 实验目的与要求
(1) 通过实验,掌握阻塞赋值与非阻塞赋值的概念与区别; (2) 了解非阻塞赋值和阻塞赋值的不同使用场合; (3) 学习测试模块的编写,综合和不同层次的仿真。
二.实验环境
仿真软件:modlsim6.2SE
三.实验内容
阻塞赋值与非阻塞赋值,在教材中已经了解了他们之间在语法上的区别以及综合后所得到的
评 阅
电路结构上的区别。在always块中,阻塞赋值可以理解为赋值语句是并发执行的。时序逻辑设计中,通常都使用非阻塞赋值语句,而在实现组合逻辑的assign结构中,或者always快结构中都必须采用阻塞赋值语句。
四.系统框图
五.实验波形图
六.实验体会
(1)一开始使用modelsimSE6.2时候不知道建立工作区的方法。后面请教了毕老师才知道如何来建立工作区。
(2)编译时候错误看不懂,细心找才发现‘ ` 两个符号有区别
(3)波形找不到,后来发现时没有放大。
七.代码附录:
源代码:
// ---------- 模块源代码:----------------------
// ------------- blocking.v ---------------
module blocking(clk,a,b,c);
output [3:0] b,c;
input [3:0] a;
input clk;
reg [3:0] b,c;
always @(posedge clk)
begin b = a;
c = b;
$display("Blocking: a = %d, b = %d, c = %d ",a,b,c);
end
endmodule
//------------- non_blocking.v -------------------
module non_blocking(clk,a,b,c);
output [3:0] b,c;
input [3:0] a;
input clk;
reg [3:0] b,c;
always @(posedge clk)
begin
b <= a;
c <= b;
$display("Non_Blocking: a = %d, b = %d, c = %d ",a,b,c); end
endmodule
测试模块:
// ---------- 测试模块源代码:--------------------------
//------------- compareTop.v -----------------------------
`timescale 1ns/100ps
`include "./blocking.v"
`include "./non_blocking.v"
module compareTop;
wire [3:0] b1,c1,b2,c2;
reg [3:0] a;
reg clk;
initial
begin
clk = 0;
forever #50 clk = ~clk; //思考:如果在本句后还有语句,能否执行?为什么?end
initial
begin
a = 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("____________________________");
$stop;
end
non_blocking non_blocking(clk,a,b2,c2);
blocking blocking(clk,a,b1,c1);
endmodule
Verilog HDL 数字系统设计报告 2
姓名 学号 时间 地点
实验题目 利用状态机实现比较复杂的接口设计
一:实验目的与要求
(1)学习运用由状态机控制的逻辑开关,设计出一个比较复杂的接口逻辑; (2)在复杂设计中使用任务(task)结构,以提高程序的可读性; (3)加深对可综合风格模块的认识。
二.实验环境
仿真软件:modlsim6.2SE
三.实验内容
评 阅
设计一个并行数据转换为串行位流的变换器,利用双向总线输出。
(1)把并行地址存入寄存器。
(2)把并行数据存入寄存器。
(3)连接串行单总线
(4)地址的串行输出
(5)数据的串行输出
(6)给信号源应答
(7)让信号源给出下一个操作对象
(8)结束操作
四.系统框图
inputs outputs 状态译码器状态寄存器输出译码器
clk
五.实验波形图
六.实验体会
(1)实验代码很长,在检验的时候由于注前面的中文注释用的空格是中文空格而导致了程序的错误,还有begin end 的模块没有匹配,少了end也导致了程序的错误。
(2)在start simuiation时候,第一次忘了把enable optimization勾打掉,让其最优化设计,导致波形输出不对。后来才修正了这个错误。
七.代码附录:
//--------- 模块源代码:----------------------------
module writing(reset,clk,address,data,sda,ack);